diff --git a/ant/AntIntro/.checkstyle b/archive/ant/AntIntro/.checkstyle similarity index 100% rename from ant/AntIntro/.checkstyle rename to archive/ant/AntIntro/.checkstyle diff --git a/ant/AntIntro/.classpath b/archive/ant/AntIntro/.classpath similarity index 100% rename from ant/AntIntro/.classpath rename to archive/ant/AntIntro/.classpath diff --git a/ant/AntIntro/.project b/archive/ant/AntIntro/.project similarity index 100% rename from ant/AntIntro/.project rename to archive/ant/AntIntro/.project diff --git a/ant/AntIntro/.settings/org.eclipse.wst.validation.prefs b/archive/ant/AntIntro/.settings/org.eclipse.wst.validation.prefs similarity index 100% rename from ant/AntIntro/.settings/org.eclipse.wst.validation.prefs rename to archive/ant/AntIntro/.settings/org.eclipse.wst.validation.prefs diff --git a/ant/AntIntro/build.xml b/archive/ant/AntIntro/build.xml similarity index 100% rename from ant/AntIntro/build.xml rename to archive/ant/AntIntro/build.xml diff --git a/ant/AntIntro/libs/checkstyle-5.0.jar b/archive/ant/AntIntro/libs/checkstyle-5.0.jar similarity index 100% rename from ant/AntIntro/libs/checkstyle-5.0.jar rename to archive/ant/AntIntro/libs/checkstyle-5.0.jar diff --git a/ant/AntIntro/libs/checkstyle-all-5.0.jar b/archive/ant/AntIntro/libs/checkstyle-all-5.0.jar similarity index 100% rename from ant/AntIntro/libs/checkstyle-all-5.0.jar rename to archive/ant/AntIntro/libs/checkstyle-all-5.0.jar diff --git a/ant/AntIntro/libs/junit.jar b/archive/ant/AntIntro/libs/junit.jar similarity index 100% rename from ant/AntIntro/libs/junit.jar rename to archive/ant/AntIntro/libs/junit.jar diff --git a/ant/AntIntro/libs/org.hamcrest.core_1.1.0.v20090501071000.jar b/archive/ant/AntIntro/libs/org.hamcrest.core_1.1.0.v20090501071000.jar similarity index 100% rename from ant/AntIntro/libs/org.hamcrest.core_1.1.0.v20090501071000.jar rename to archive/ant/AntIntro/libs/org.hamcrest.core_1.1.0.v20090501071000.jar diff --git a/ant/AntIntro/reports/javadoc/package-list b/archive/ant/AntIntro/reports/javadoc/package-list similarity index 100% rename from ant/AntIntro/reports/javadoc/package-list rename to archive/ant/AntIntro/reports/javadoc/package-list diff --git a/ant/AntIntro/reports/javadoc/resources/inherit.gif b/archive/ant/AntIntro/reports/javadoc/resources/inherit.gif similarity index 100% rename from ant/AntIntro/reports/javadoc/resources/inherit.gif rename to archive/ant/AntIntro/reports/javadoc/resources/inherit.gif diff --git a/ant/AntIntro/reports/javadoc/stylesheet.css b/archive/ant/AntIntro/reports/javadoc/stylesheet.css similarity index 100% rename from ant/AntIntro/reports/javadoc/stylesheet.css rename to archive/ant/AntIntro/reports/javadoc/stylesheet.css diff --git a/ant/AntIntro/reports/junit/allclasses-frame.html b/archive/ant/AntIntro/reports/junit/allclasses-frame.html similarity index 100% rename from ant/AntIntro/reports/junit/allclasses-frame.html rename to archive/ant/AntIntro/reports/junit/allclasses-frame.html diff --git a/ant/AntIntro/reports/junit/alltests-errors.html b/archive/ant/AntIntro/reports/junit/alltests-errors.html similarity index 100% rename from ant/AntIntro/reports/junit/alltests-errors.html rename to archive/ant/AntIntro/reports/junit/alltests-errors.html diff --git a/ant/AntIntro/reports/junit/alltests-fails.html b/archive/ant/AntIntro/reports/junit/alltests-fails.html similarity index 100% rename from ant/AntIntro/reports/junit/alltests-fails.html rename to archive/ant/AntIntro/reports/junit/alltests-fails.html diff --git a/ant/AntIntro/reports/junit/index.html b/archive/ant/AntIntro/reports/junit/index.html similarity index 100% rename from ant/AntIntro/reports/junit/index.html rename to archive/ant/AntIntro/reports/junit/index.html diff --git a/ant/AntIntro/reports/junit/nl/ica/ddoa/dda/example/package-frame.html b/archive/ant/AntIntro/reports/junit/nl/ica/ddoa/dda/example/package-frame.html similarity index 100% rename from ant/AntIntro/reports/junit/nl/ica/ddoa/dda/example/package-frame.html rename to archive/ant/AntIntro/reports/junit/nl/ica/ddoa/dda/example/package-frame.html diff --git a/ant/AntIntro/reports/junit/nl/ica/ddoa/dda/reverse/package-frame.html b/archive/ant/AntIntro/reports/junit/nl/ica/ddoa/dda/reverse/package-frame.html similarity index 100% rename from ant/AntIntro/reports/junit/nl/ica/ddoa/dda/reverse/package-frame.html rename to archive/ant/AntIntro/reports/junit/nl/ica/ddoa/dda/reverse/package-frame.html diff --git a/ant/AntIntro/reports/junit/overview-frame.html b/archive/ant/AntIntro/reports/junit/overview-frame.html similarity index 100% rename from ant/AntIntro/reports/junit/overview-frame.html rename to archive/ant/AntIntro/reports/junit/overview-frame.html diff --git a/ant/AntIntro/reports/junit/stylesheet.css b/archive/ant/AntIntro/reports/junit/stylesheet.css similarity index 100% rename from ant/AntIntro/reports/junit/stylesheet.css rename to archive/ant/AntIntro/reports/junit/stylesheet.css diff --git a/ant/AntIntro/src/nl/ica/ddoa/dda/example/Fibonacci.java b/archive/ant/AntIntro/src/nl/ica/ddoa/dda/example/Fibonacci.java similarity index 100% rename from ant/AntIntro/src/nl/ica/ddoa/dda/example/Fibonacci.java rename to archive/ant/AntIntro/src/nl/ica/ddoa/dda/example/Fibonacci.java diff --git a/ant/AntIntro/src/nl/ica/ddoa/dda/example/MathTools.java b/archive/ant/AntIntro/src/nl/ica/ddoa/dda/example/MathTools.java similarity index 100% rename from ant/AntIntro/src/nl/ica/ddoa/dda/example/MathTools.java rename to archive/ant/AntIntro/src/nl/ica/ddoa/dda/example/MathTools.java diff --git a/ant/AntIntro/src/nl/ica/ddoa/dda/example/User.java b/archive/ant/AntIntro/src/nl/ica/ddoa/dda/example/User.java similarity index 100% rename from ant/AntIntro/src/nl/ica/ddoa/dda/example/User.java rename to archive/ant/AntIntro/src/nl/ica/ddoa/dda/example/User.java diff --git a/ant/AntIntro/src/nl/ica/ddoa/dda/reverse/InvalidInputException.java b/archive/ant/AntIntro/src/nl/ica/ddoa/dda/reverse/InvalidInputException.java similarity index 100% rename from ant/AntIntro/src/nl/ica/ddoa/dda/reverse/InvalidInputException.java rename to archive/ant/AntIntro/src/nl/ica/ddoa/dda/reverse/InvalidInputException.java diff --git a/ant/AntIntro/src/nl/ica/ddoa/dda/reverse/ReverseWord.java b/archive/ant/AntIntro/src/nl/ica/ddoa/dda/reverse/ReverseWord.java similarity index 100% rename from ant/AntIntro/src/nl/ica/ddoa/dda/reverse/ReverseWord.java rename to archive/ant/AntIntro/src/nl/ica/ddoa/dda/reverse/ReverseWord.java diff --git a/ant/AntIntro/test/nl/ica/ddoa/dda/example/AllTests.java b/archive/ant/AntIntro/test/nl/ica/ddoa/dda/example/AllTests.java similarity index 100% rename from ant/AntIntro/test/nl/ica/ddoa/dda/example/AllTests.java rename to archive/ant/AntIntro/test/nl/ica/ddoa/dda/example/AllTests.java diff --git a/ant/AntIntro/test/nl/ica/ddoa/dda/example/FibTest.java b/archive/ant/AntIntro/test/nl/ica/ddoa/dda/example/FibTest.java similarity index 100% rename from ant/AntIntro/test/nl/ica/ddoa/dda/example/FibTest.java rename to archive/ant/AntIntro/test/nl/ica/ddoa/dda/example/FibTest.java diff --git a/ant/AntIntro/test/nl/ica/ddoa/dda/example/MathToolsTest.java b/archive/ant/AntIntro/test/nl/ica/ddoa/dda/example/MathToolsTest.java similarity index 100% rename from ant/AntIntro/test/nl/ica/ddoa/dda/example/MathToolsTest.java rename to archive/ant/AntIntro/test/nl/ica/ddoa/dda/example/MathToolsTest.java diff --git a/ant/AntIntro/test/nl/ica/ddoa/dda/example/UserTest.java b/archive/ant/AntIntro/test/nl/ica/ddoa/dda/example/UserTest.java similarity index 100% rename from ant/AntIntro/test/nl/ica/ddoa/dda/example/UserTest.java rename to archive/ant/AntIntro/test/nl/ica/ddoa/dda/example/UserTest.java diff --git a/ant/AntIntro/test/nl/ica/ddoa/dda/reverse/ReverseTest.java b/archive/ant/AntIntro/test/nl/ica/ddoa/dda/reverse/ReverseTest.java similarity index 100% rename from ant/AntIntro/test/nl/ica/ddoa/dda/reverse/ReverseTest.java rename to archive/ant/AntIntro/test/nl/ica/ddoa/dda/reverse/ReverseTest.java diff --git a/ant/AntIntro/toolconfigs/checkstyle-noframes-sorted.xsl b/archive/ant/AntIntro/toolconfigs/checkstyle-noframes-sorted.xsl similarity index 100% rename from ant/AntIntro/toolconfigs/checkstyle-noframes-sorted.xsl rename to archive/ant/AntIntro/toolconfigs/checkstyle-noframes-sorted.xsl diff --git a/ant/AntIntro/toolconfigs/ddoa_checks.xml b/archive/ant/AntIntro/toolconfigs/ddoa_checks.xml similarity index 100% rename from ant/AntIntro/toolconfigs/ddoa_checks.xml rename to archive/ant/AntIntro/toolconfigs/ddoa_checks.xml diff --git a/ant/AntIntro/toolconfigs/ddoa_formatter.xml b/archive/ant/AntIntro/toolconfigs/ddoa_formatter.xml similarity index 100% rename from ant/AntIntro/toolconfigs/ddoa_formatter.xml rename to archive/ant/AntIntro/toolconfigs/ddoa_formatter.xml diff --git a/archive/j2ee/.DS_Store b/archive/j2ee/.DS_Store new file mode 100644 index 0000000..4f29b4a Binary files /dev/null and b/archive/j2ee/.DS_Store differ diff --git a/j2ee/JavaEE6SampleApp/build.xml b/archive/j2ee/JavaEE6SampleApp/build.xml similarity index 100% rename from j2ee/JavaEE6SampleApp/build.xml rename to archive/j2ee/JavaEE6SampleApp/build.xml diff --git a/j2ee/JavaEE6SampleApp/nbproject/ant-deploy.xml b/archive/j2ee/JavaEE6SampleApp/nbproject/ant-deploy.xml similarity index 100% rename from j2ee/JavaEE6SampleApp/nbproject/ant-deploy.xml rename to archive/j2ee/JavaEE6SampleApp/nbproject/ant-deploy.xml diff --git a/j2ee/JavaEE6SampleApp/nbproject/build-impl.xml b/archive/j2ee/JavaEE6SampleApp/nbproject/build-impl.xml similarity index 100% rename from j2ee/JavaEE6SampleApp/nbproject/build-impl.xml rename to archive/j2ee/JavaEE6SampleApp/nbproject/build-impl.xml diff --git a/j2ee/JavaEE6SampleApp/nbproject/genfiles.properties b/archive/j2ee/JavaEE6SampleApp/nbproject/genfiles.properties similarity index 100% rename from j2ee/JavaEE6SampleApp/nbproject/genfiles.properties rename to archive/j2ee/JavaEE6SampleApp/nbproject/genfiles.properties diff --git a/j2ee/JavaEE6SampleApp/nbproject/project.properties b/archive/j2ee/JavaEE6SampleApp/nbproject/project.properties similarity index 100% rename from j2ee/JavaEE6SampleApp/nbproject/project.properties rename to archive/j2ee/JavaEE6SampleApp/nbproject/project.properties diff --git a/j2ee/JavaEE6SampleApp/nbproject/project.xml b/archive/j2ee/JavaEE6SampleApp/nbproject/project.xml similarity index 100% rename from j2ee/JavaEE6SampleApp/nbproject/project.xml rename to archive/j2ee/JavaEE6SampleApp/nbproject/project.xml diff --git a/j2ee/JavaEE6SampleApp/nbproject/rest-build.xml b/archive/j2ee/JavaEE6SampleApp/nbproject/rest-build.xml similarity index 100% rename from j2ee/JavaEE6SampleApp/nbproject/rest-build.xml rename to archive/j2ee/JavaEE6SampleApp/nbproject/rest-build.xml diff --git a/j2ee/JavaEE6SampleApp/src/conf/MANIFEST.MF b/archive/j2ee/JavaEE6SampleApp/src/conf/MANIFEST.MF similarity index 100% rename from j2ee/JavaEE6SampleApp/src/conf/MANIFEST.MF rename to archive/j2ee/JavaEE6SampleApp/src/conf/MANIFEST.MF diff --git a/j2ee/JavaEE6SampleApp/src/conf/persistence.xml b/archive/j2ee/JavaEE6SampleApp/src/conf/persistence.xml similarity index 100% rename from j2ee/JavaEE6SampleApp/src/conf/persistence.xml rename to archive/j2ee/JavaEE6SampleApp/src/conf/persistence.xml diff --git a/j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/CustomerSessionBean.java b/archive/j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/CustomerSessionBean.java similarity index 100% rename from j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/CustomerSessionBean.java rename to archive/j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/CustomerSessionBean.java diff --git a/j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/TestServlet.java b/archive/j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/TestServlet.java similarity index 100% rename from j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/TestServlet.java rename to archive/j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/TestServlet.java diff --git a/j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/entities/Customer.java b/archive/j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/entities/Customer.java similarity index 100% rename from j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/entities/Customer.java rename to archive/j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/entities/Customer.java diff --git a/j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/entities/DiscountCode.java b/archive/j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/entities/DiscountCode.java similarity index 100% rename from j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/entities/DiscountCode.java rename to archive/j2ee/JavaEE6SampleApp/src/java/org/glassfish/samples/entities/DiscountCode.java diff --git a/j2ee/JavaEE6SampleApp/web/WEB-INF/beans.xml b/archive/j2ee/JavaEE6SampleApp/web/WEB-INF/beans.xml similarity index 100% rename from j2ee/JavaEE6SampleApp/web/WEB-INF/beans.xml rename to archive/j2ee/JavaEE6SampleApp/web/WEB-INF/beans.xml diff --git a/j2ee/JavaEE6SampleApp/web/WEB-INF/template.xhtml b/archive/j2ee/JavaEE6SampleApp/web/WEB-INF/template.xhtml similarity index 100% rename from j2ee/JavaEE6SampleApp/web/WEB-INF/template.xhtml rename to archive/j2ee/JavaEE6SampleApp/web/WEB-INF/template.xhtml diff --git a/j2ee/JavaEE6SampleApp/web/WEB-INF/web.xml b/archive/j2ee/JavaEE6SampleApp/web/WEB-INF/web.xml similarity index 100% rename from j2ee/JavaEE6SampleApp/web/WEB-INF/web.xml rename to archive/j2ee/JavaEE6SampleApp/web/WEB-INF/web.xml diff --git a/j2ee/JavaEE6SampleApp/web/index.jsp b/archive/j2ee/JavaEE6SampleApp/web/index.jsp similarity index 100% rename from j2ee/JavaEE6SampleApp/web/index.jsp rename to archive/j2ee/JavaEE6SampleApp/web/index.jsp diff --git a/j2ee/JavaEE6SampleApp/web/index.xhtml b/archive/j2ee/JavaEE6SampleApp/web/index.xhtml similarity index 100% rename from j2ee/JavaEE6SampleApp/web/index.xhtml rename to archive/j2ee/JavaEE6SampleApp/web/index.xhtml diff --git a/j2ee/JavaEE6SampleApp/web/resources/css/cssLayout.css b/archive/j2ee/JavaEE6SampleApp/web/resources/css/cssLayout.css similarity index 100% rename from j2ee/JavaEE6SampleApp/web/resources/css/cssLayout.css rename to archive/j2ee/JavaEE6SampleApp/web/resources/css/cssLayout.css diff --git a/j2ee/JavaEE6SampleApp/web/resources/css/default.css b/archive/j2ee/JavaEE6SampleApp/web/resources/css/default.css similarity index 100% rename from j2ee/JavaEE6SampleApp/web/resources/css/default.css rename to archive/j2ee/JavaEE6SampleApp/web/resources/css/default.css diff --git a/j2ee/OTN-Developer-Day-2012-JavaEE6SampleApp.zip b/archive/j2ee/OTN-Developer-Day-2012-JavaEE6SampleApp.zip similarity index 100% rename from j2ee/OTN-Developer-Day-2012-JavaEE6SampleApp.zip rename to archive/j2ee/OTN-Developer-Day-2012-JavaEE6SampleApp.zip diff --git a/j2ee/SorterApp/README.md b/archive/j2ee/SorterApp/README.md similarity index 100% rename from j2ee/SorterApp/README.md rename to archive/j2ee/SorterApp/README.md diff --git a/j2ee/SorterApp/Soapui-SorterWebService b/archive/j2ee/SorterApp/Soapui-SorterWebService similarity index 100% rename from j2ee/SorterApp/Soapui-SorterWebService rename to archive/j2ee/SorterApp/Soapui-SorterWebService diff --git a/j2ee/SorterApp/SorterApp-ear/nb-configuration.xml b/archive/j2ee/SorterApp/SorterApp-ear/nb-configuration.xml similarity index 100% rename from j2ee/SorterApp/SorterApp-ear/nb-configuration.xml rename to archive/j2ee/SorterApp/SorterApp-ear/nb-configuration.xml diff --git a/j2ee/SorterApp/SorterApp-ear/pom.xml b/archive/j2ee/SorterApp/SorterApp-ear/pom.xml similarity index 100% rename from j2ee/SorterApp/SorterApp-ear/pom.xml rename to archive/j2ee/SorterApp/SorterApp-ear/pom.xml diff --git a/j2ee/SorterApp/SorterApp-ear/src/main/application/META-INF/MANIFEST.MF b/archive/j2ee/SorterApp/SorterApp-ear/src/main/application/META-INF/MANIFEST.MF similarity index 100% rename from j2ee/SorterApp/SorterApp-ear/src/main/application/META-INF/MANIFEST.MF rename to archive/j2ee/SorterApp/SorterApp-ear/src/main/application/META-INF/MANIFEST.MF diff --git a/j2ee/SorterApp/SorterApp-ear/src/main/application/META-INF/glassfish-application.xml b/archive/j2ee/SorterApp/SorterApp-ear/src/main/application/META-INF/glassfish-application.xml similarity index 100% rename from j2ee/SorterApp/SorterApp-ear/src/main/application/META-INF/glassfish-application.xml rename to archive/j2ee/SorterApp/SorterApp-ear/src/main/application/META-INF/glassfish-application.xml diff --git a/j2ee/SorterApp/SorterApp-ejb/nb-configuration.xml b/archive/j2ee/SorterApp/SorterApp-ejb/nb-configuration.xml similarity index 100% rename from j2ee/SorterApp/SorterApp-ejb/nb-configuration.xml rename to archive/j2ee/SorterApp/SorterApp-ejb/nb-configuration.xml diff --git a/j2ee/SorterApp/SorterApp-ejb/pom.xml b/archive/j2ee/SorterApp/SorterApp-ejb/pom.xml similarity index 100% rename from j2ee/SorterApp/SorterApp-ejb/pom.xml rename to archive/j2ee/SorterApp/SorterApp-ejb/pom.xml diff --git a/j2ee/SorterApp/SorterApp-ejb/src/main/java/nl/han/ddoa/SorterBean.java b/archive/j2ee/SorterApp/SorterApp-ejb/src/main/java/nl/han/ddoa/SorterBean.java similarity index 100% rename from j2ee/SorterApp/SorterApp-ejb/src/main/java/nl/han/ddoa/SorterBean.java rename to archive/j2ee/SorterApp/SorterApp-ejb/src/main/java/nl/han/ddoa/SorterBean.java diff --git a/j2ee/SorterApp/SorterApp-ejb/src/main/java/nl/han/ddoa/SorterBeanLocal.java b/archive/j2ee/SorterApp/SorterApp-ejb/src/main/java/nl/han/ddoa/SorterBeanLocal.java similarity index 100% rename from j2ee/SorterApp/SorterApp-ejb/src/main/java/nl/han/ddoa/SorterBeanLocal.java rename to archive/j2ee/SorterApp/SorterApp-ejb/src/main/java/nl/han/ddoa/SorterBeanLocal.java diff --git a/j2ee/SorterApp/SorterApp-ejb/src/main/java/nl/han/ddoa/SorterWebService.java b/archive/j2ee/SorterApp/SorterApp-ejb/src/main/java/nl/han/ddoa/SorterWebService.java similarity index 100% rename from j2ee/SorterApp/SorterApp-ejb/src/main/java/nl/han/ddoa/SorterWebService.java rename to archive/j2ee/SorterApp/SorterApp-ejb/src/main/java/nl/han/ddoa/SorterWebService.java diff --git a/j2ee/SorterApp/SorterApp-ejb/src/main/resources/META-INF/MANIFEST.MF b/archive/j2ee/SorterApp/SorterApp-ejb/src/main/resources/META-INF/MANIFEST.MF similarity index 100% rename from j2ee/SorterApp/SorterApp-ejb/src/main/resources/META-INF/MANIFEST.MF rename to archive/j2ee/SorterApp/SorterApp-ejb/src/main/resources/META-INF/MANIFEST.MF diff --git a/j2ee/SorterApp/SorterApp-ejb/src/test/java/nl/han/ddoa/SorterBeanIntegrationTest.java b/archive/j2ee/SorterApp/SorterApp-ejb/src/test/java/nl/han/ddoa/SorterBeanIntegrationTest.java similarity index 100% rename from j2ee/SorterApp/SorterApp-ejb/src/test/java/nl/han/ddoa/SorterBeanIntegrationTest.java rename to archive/j2ee/SorterApp/SorterApp-ejb/src/test/java/nl/han/ddoa/SorterBeanIntegrationTest.java diff --git a/j2ee/SorterApp/SorterApp-ejb/src/test/java/nl/han/ddoa/SorterBeanTestBase.java b/archive/j2ee/SorterApp/SorterApp-ejb/src/test/java/nl/han/ddoa/SorterBeanTestBase.java similarity index 100% rename from j2ee/SorterApp/SorterApp-ejb/src/test/java/nl/han/ddoa/SorterBeanTestBase.java rename to archive/j2ee/SorterApp/SorterApp-ejb/src/test/java/nl/han/ddoa/SorterBeanTestBase.java diff --git a/j2ee/SorterApp/SorterApp-ejb/src/test/java/nl/han/ddoa/SorterBeanUnitTest.java b/archive/j2ee/SorterApp/SorterApp-ejb/src/test/java/nl/han/ddoa/SorterBeanUnitTest.java similarity index 100% rename from j2ee/SorterApp/SorterApp-ejb/src/test/java/nl/han/ddoa/SorterBeanUnitTest.java rename to archive/j2ee/SorterApp/SorterApp-ejb/src/test/java/nl/han/ddoa/SorterBeanUnitTest.java diff --git a/j2ee/SorterApp/SorterApp-web/nb-configuration.xml b/archive/j2ee/SorterApp/SorterApp-web/nb-configuration.xml similarity index 100% rename from j2ee/SorterApp/SorterApp-web/nb-configuration.xml rename to archive/j2ee/SorterApp/SorterApp-web/nb-configuration.xml diff --git a/j2ee/SorterApp/SorterApp-web/pom.xml b/archive/j2ee/SorterApp/SorterApp-web/pom.xml similarity index 100% rename from j2ee/SorterApp/SorterApp-web/pom.xml rename to archive/j2ee/SorterApp/SorterApp-web/pom.xml diff --git a/j2ee/SorterApp/SorterApp-web/src/main/java/nl/han/ddoa/SorterServlet.java b/archive/j2ee/SorterApp/SorterApp-web/src/main/java/nl/han/ddoa/SorterServlet.java similarity index 100% rename from j2ee/SorterApp/SorterApp-web/src/main/java/nl/han/ddoa/SorterServlet.java rename to archive/j2ee/SorterApp/SorterApp-web/src/main/java/nl/han/ddoa/SorterServlet.java diff --git a/j2ee/SorterApp/SorterApp-web/src/main/webapp/WEB-INF/beans.xml b/archive/j2ee/SorterApp/SorterApp-web/src/main/webapp/WEB-INF/beans.xml similarity index 100% rename from j2ee/SorterApp/SorterApp-web/src/main/webapp/WEB-INF/beans.xml rename to archive/j2ee/SorterApp/SorterApp-web/src/main/webapp/WEB-INF/beans.xml diff --git a/j2ee/SorterApp/SorterApp-web/src/main/webapp/WEB-INF/web.xml b/archive/j2ee/SorterApp/SorterApp-web/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from j2ee/SorterApp/SorterApp-web/src/main/webapp/WEB-INF/web.xml rename to archive/j2ee/SorterApp/SorterApp-web/src/main/webapp/WEB-INF/web.xml diff --git a/j2ee/SorterApp/SorterApp-web/src/main/webapp/index.html b/archive/j2ee/SorterApp/SorterApp-web/src/main/webapp/index.html similarity index 100% rename from j2ee/SorterApp/SorterApp-web/src/main/webapp/index.html rename to archive/j2ee/SorterApp/SorterApp-web/src/main/webapp/index.html diff --git a/j2ee/SorterApp/SorterApp-web/src/main/webapp/input.jsp b/archive/j2ee/SorterApp/SorterApp-web/src/main/webapp/input.jsp similarity index 100% rename from j2ee/SorterApp/SorterApp-web/src/main/webapp/input.jsp rename to archive/j2ee/SorterApp/SorterApp-web/src/main/webapp/input.jsp diff --git a/j2ee/SorterApp/SorterApp-web/src/main/webapp/output.jsp b/archive/j2ee/SorterApp/SorterApp-web/src/main/webapp/output.jsp similarity index 100% rename from j2ee/SorterApp/SorterApp-web/src/main/webapp/output.jsp rename to archive/j2ee/SorterApp/SorterApp-web/src/main/webapp/output.jsp diff --git a/j2ee/SorterApp/pom.xml b/archive/j2ee/SorterApp/pom.xml similarity index 100% rename from j2ee/SorterApp/pom.xml rename to archive/j2ee/SorterApp/pom.xml diff --git a/j2ee/javaee6-hol-2012.pdf b/archive/j2ee/javaee6-hol-2012.pdf similarity index 100% rename from j2ee/javaee6-hol-2012.pdf rename to archive/j2ee/javaee6-hol-2012.pdf diff --git a/spring-roo/README.md b/archive/spring-roo/README.md similarity index 100% rename from spring-roo/README.md rename to archive/spring-roo/README.md diff --git a/spring-roo/SimpleSpringRooApp/.classpath b/archive/spring-roo/SimpleSpringRooApp/.classpath similarity index 100% rename from spring-roo/SimpleSpringRooApp/.classpath rename to archive/spring-roo/SimpleSpringRooApp/.classpath diff --git a/spring-roo/SimpleSpringRooApp/.project b/archive/spring-roo/SimpleSpringRooApp/.project similarity index 100% rename from spring-roo/SimpleSpringRooApp/.project rename to archive/spring-roo/SimpleSpringRooApp/.project diff --git a/spring-roo/SimpleSpringRooApp/.settings/.jsdtscope b/archive/spring-roo/SimpleSpringRooApp/.settings/.jsdtscope similarity index 100% rename from spring-roo/SimpleSpringRooApp/.settings/.jsdtscope rename to archive/spring-roo/SimpleSpringRooApp/.settings/.jsdtscope diff --git a/spring-roo/SimpleSpringRooApp/.settings/com.springsource.sts.roo.core.prefs b/archive/spring-roo/SimpleSpringRooApp/.settings/com.springsource.sts.roo.core.prefs similarity index 100% rename from spring-roo/SimpleSpringRooApp/.settings/com.springsource.sts.roo.core.prefs rename to archive/spring-roo/SimpleSpringRooApp/.settings/com.springsource.sts.roo.core.prefs diff --git a/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.ajdt.core.prefs b/archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.ajdt.core.prefs similarity index 100% rename from spring-roo/SimpleSpringRooApp/.settings/org.eclipse.ajdt.core.prefs rename to archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.ajdt.core.prefs diff --git a/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.core.resources.prefs b/archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.core.resources.prefs similarity index 100% rename from spring-roo/SimpleSpringRooApp/.settings/org.eclipse.core.resources.prefs rename to archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.core.resources.prefs diff --git a/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.jdt.core.prefs b/archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from spring-roo/SimpleSpringRooApp/.settings/org.eclipse.jdt.core.prefs rename to archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.jdt.core.prefs diff --git a/designpatterns/dep-injection/TDD-Dep-Injection/.settings/org.eclipse.m2e.core.prefs b/archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from designpatterns/dep-injection/TDD-Dep-Injection/.settings/org.eclipse.m2e.core.prefs rename to archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.m2e.core.prefs diff --git a/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.common.component b/archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.common.component similarity index 100% rename from spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.common.component rename to archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.common.component diff --git a/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.common.project.facet.core.xml b/archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.common.project.facet.core.xml similarity index 100% rename from spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.common.project.facet.core.xml rename to archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.common.project.facet.core.xml diff --git a/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.jsdt.ui.superType.container b/archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.jsdt.ui.superType.container similarity index 100% rename from spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.jsdt.ui.superType.container rename to archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.jsdt.ui.superType.container diff --git a/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.jsdt.ui.superType.name b/archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.jsdt.ui.superType.name similarity index 100% rename from spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.jsdt.ui.superType.name rename to archive/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.wst.jsdt.ui.superType.name diff --git a/spring-roo/SimpleSpringRooApp/.settings/org.springframework.ide.eclipse.core.prefs b/archive/spring-roo/SimpleSpringRooApp/.settings/org.springframework.ide.eclipse.core.prefs similarity index 100% rename from spring-roo/SimpleSpringRooApp/.settings/org.springframework.ide.eclipse.core.prefs rename to archive/spring-roo/SimpleSpringRooApp/.settings/org.springframework.ide.eclipse.core.prefs diff --git a/spring-roo/SimpleSpringRooApp/log.roo b/archive/spring-roo/SimpleSpringRooApp/log.roo similarity index 100% rename from spring-roo/SimpleSpringRooApp/log.roo rename to archive/spring-roo/SimpleSpringRooApp/log.roo diff --git a/spring-roo/SimpleSpringRooApp/pom.xml b/archive/spring-roo/SimpleSpringRooApp/pom.xml similarity index 100% rename from spring-roo/SimpleSpringRooApp/pom.xml rename to archive/spring-roo/SimpleSpringRooApp/pom.xml diff --git a/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/ApplicationConversionServiceFactoryBean.java b/archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/ApplicationConversionServiceFactoryBean.java similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/ApplicationConversionServiceFactoryBean.java rename to archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/ApplicationConversionServiceFactoryBean.java diff --git a/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/ApplicationConversionServiceFactoryBean_Roo_ConversionService.aj b/archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/ApplicationConversionServiceFactoryBean_Roo_ConversionService.aj similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/ApplicationConversionServiceFactoryBean_Roo_ConversionService.aj rename to archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/ApplicationConversionServiceFactoryBean_Roo_ConversionService.aj diff --git a/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person.java b/archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person.java similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person.java rename to archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person.java diff --git a/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/PersonController.java b/archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/PersonController.java similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/PersonController.java rename to archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/PersonController.java diff --git a/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/PersonController_Roo_Controller.aj b/archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/PersonController_Roo_Controller.aj similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/PersonController_Roo_Controller.aj rename to archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/PersonController_Roo_Controller.aj diff --git a/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Configurable.aj b/archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Configurable.aj similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Configurable.aj rename to archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Configurable.aj diff --git a/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_JavaBean.aj b/archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_JavaBean.aj similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_JavaBean.aj rename to archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_JavaBean.aj diff --git a/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Jpa_ActiveRecord.aj b/archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Jpa_ActiveRecord.aj similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Jpa_ActiveRecord.aj rename to archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Jpa_ActiveRecord.aj diff --git a/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Jpa_Entity.aj b/archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Jpa_Entity.aj similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Jpa_Entity.aj rename to archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Jpa_Entity.aj diff --git a/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Json.aj b/archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Json.aj similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Json.aj rename to archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_Json.aj diff --git a/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_ToString.aj b/archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_ToString.aj similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_ToString.aj rename to archive/spring-roo/SimpleSpringRooApp/src/main/java/nl/ica/ddoa/dda/springrooexample/Person_Roo_ToString.aj diff --git a/spring-roo/SimpleSpringRooApp/src/main/resources/META-INF/persistence.xml b/archive/spring-roo/SimpleSpringRooApp/src/main/resources/META-INF/persistence.xml similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/resources/META-INF/persistence.xml rename to archive/spring-roo/SimpleSpringRooApp/src/main/resources/META-INF/persistence.xml diff --git a/spring-roo/SimpleSpringRooApp/src/main/resources/META-INF/spring/applicationContext.xml b/archive/spring-roo/SimpleSpringRooApp/src/main/resources/META-INF/spring/applicationContext.xml similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/resources/META-INF/spring/applicationContext.xml rename to archive/spring-roo/SimpleSpringRooApp/src/main/resources/META-INF/spring/applicationContext.xml diff --git a/spring-roo/SimpleSpringRooApp/src/main/resources/META-INF/spring/database.properties b/archive/spring-roo/SimpleSpringRooApp/src/main/resources/META-INF/spring/database.properties similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/resources/META-INF/spring/database.properties rename to archive/spring-roo/SimpleSpringRooApp/src/main/resources/META-INF/spring/database.properties diff --git a/spring-roo/SimpleSpringRooApp/src/main/resources/log4j.properties b/archive/spring-roo/SimpleSpringRooApp/src/main/resources/log4j.properties similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/resources/log4j.properties rename to archive/spring-roo/SimpleSpringRooApp/src/main/resources/log4j.properties diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/classes/alt.properties b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/classes/alt.properties similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/classes/alt.properties rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/classes/alt.properties diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/classes/standard.properties b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/classes/standard.properties similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/classes/standard.properties rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/classes/standard.properties diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/i18n/application.properties b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/i18n/application.properties similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/i18n/application.properties rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/i18n/application.properties diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/i18n/messages.properties b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/i18n/messages.properties similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/i18n/messages.properties rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/i18n/messages.properties diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/layouts/default.jspx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/layouts/default.jspx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/layouts/default.jspx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/layouts/default.jspx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/layouts/layouts.xml b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/layouts/layouts.xml similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/layouts/layouts.xml rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/layouts/layouts.xml diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/spring/webmvc-config.xml b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/spring/webmvc-config.xml similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/spring/webmvc-config.xml rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/spring/webmvc-config.xml diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/create.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/create.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/create.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/create.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/dependency.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/dependency.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/dependency.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/dependency.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/checkbox.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/checkbox.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/checkbox.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/checkbox.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/column.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/column.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/column.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/column.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/datetime.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/datetime.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/datetime.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/datetime.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/display.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/display.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/display.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/display.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/editor.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/editor.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/editor.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/editor.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/input.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/input.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/input.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/input.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/reference.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/reference.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/reference.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/reference.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/select.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/select.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/select.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/select.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/simple.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/simple.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/simple.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/simple.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/table.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/table.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/table.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/table.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/textarea.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/textarea.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/textarea.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/fields/textarea.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/find.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/find.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/find.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/find.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/list.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/list.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/list.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/list.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/show.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/show.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/show.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/show.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/update.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/update.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/update.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/form/update.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/menu/category.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/menu/category.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/menu/category.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/menu/category.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/menu/item.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/menu/item.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/menu/item.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/menu/item.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/menu/menu.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/menu/menu.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/menu/menu.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/menu/menu.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/language.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/language.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/language.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/language.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/load-scripts.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/load-scripts.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/load-scripts.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/load-scripts.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/pagination.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/pagination.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/pagination.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/pagination.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/panel.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/panel.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/panel.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/panel.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/placeholder.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/placeholder.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/placeholder.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/placeholder.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/theme.tagx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/theme.tagx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/theme.tagx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/tags/util/theme.tagx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/dataAccessFailure.jspx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/dataAccessFailure.jspx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/dataAccessFailure.jspx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/dataAccessFailure.jspx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/footer.jspx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/footer.jspx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/footer.jspx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/footer.jspx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/header.jspx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/header.jspx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/header.jspx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/header.jspx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/index-template.jspx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/index-template.jspx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/index-template.jspx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/index-template.jspx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/index.jspx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/index.jspx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/index.jspx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/index.jspx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/menu.jspx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/menu.jspx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/menu.jspx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/menu.jspx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/create.jspx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/create.jspx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/create.jspx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/create.jspx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/list.jspx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/list.jspx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/list.jspx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/list.jspx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/show.jspx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/show.jspx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/show.jspx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/show.jspx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/update.jspx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/update.jspx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/update.jspx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/update.jspx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/views.xml b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/views.xml similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/views.xml rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/people/views.xml diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/resourceNotFound.jspx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/resourceNotFound.jspx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/resourceNotFound.jspx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/resourceNotFound.jspx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/uncaughtException.jspx b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/uncaughtException.jspx similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/uncaughtException.jspx rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/uncaughtException.jspx diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/views.xml b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/views.xml similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/views.xml rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/views/views.xml diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/web.xml b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/web.xml rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/WEB-INF/web.xml diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/images/add.png b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/add.png similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/images/add.png rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/add.png diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/images/banner-graphic.png b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/banner-graphic.png similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/images/banner-graphic.png rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/banner-graphic.png diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/images/create.png b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/create.png similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/images/create.png rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/create.png diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/images/delete.png b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/delete.png similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/images/delete.png rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/delete.png diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/images/en.png b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/en.png similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/images/en.png rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/en.png diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/images/favicon.ico b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/favicon.ico similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/images/favicon.ico rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/favicon.ico diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/images/list.png b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/list.png similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/images/list.png rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/list.png diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_first.png b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_first.png similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_first.png rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_first.png diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_last.png b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_last.png similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_last.png rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_last.png diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_next.png b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_next.png similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_next.png rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_next.png diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_previous.png b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_previous.png similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_previous.png rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/resultset_previous.png diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/images/show.png b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/show.png similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/images/show.png rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/show.png diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/images/springsource-logo.png b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/springsource-logo.png similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/images/springsource-logo.png rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/springsource-logo.png diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/images/update.png b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/update.png similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/images/update.png rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/images/update.png diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/styles/alt.css b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/styles/alt.css similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/styles/alt.css rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/styles/alt.css diff --git a/spring-roo/SimpleSpringRooApp/src/main/webapp/styles/standard.css b/archive/spring-roo/SimpleSpringRooApp/src/main/webapp/styles/standard.css similarity index 100% rename from spring-roo/SimpleSpringRooApp/src/main/webapp/styles/standard.css rename to archive/spring-roo/SimpleSpringRooApp/src/main/webapp/styles/standard.css diff --git a/spring/README b/archive/spring/README similarity index 100% rename from spring/README rename to archive/spring/README diff --git a/spring/SimpleSpringAnnotated/.classpath b/archive/spring/SimpleSpringAnnotated/.classpath similarity index 100% rename from spring/SimpleSpringAnnotated/.classpath rename to archive/spring/SimpleSpringAnnotated/.classpath diff --git a/spring/SimpleSpringAnnotated/.project b/archive/spring/SimpleSpringAnnotated/.project similarity index 100% rename from spring/SimpleSpringAnnotated/.project rename to archive/spring/SimpleSpringAnnotated/.project diff --git a/designpatterns/dep-injection/TDD-Dep-Injection/.settings/org.eclipse.jdt.core.prefs b/archive/spring/SimpleSpringAnnotated/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from designpatterns/dep-injection/TDD-Dep-Injection/.settings/org.eclipse.jdt.core.prefs rename to archive/spring/SimpleSpringAnnotated/.settings/org.eclipse.jdt.core.prefs diff --git a/spring-roo/SimpleSpringRooApp/.settings/org.eclipse.m2e.core.prefs b/archive/spring/SimpleSpringAnnotated/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from spring-roo/SimpleSpringRooApp/.settings/org.eclipse.m2e.core.prefs rename to archive/spring/SimpleSpringAnnotated/.settings/org.eclipse.m2e.core.prefs diff --git a/spring/SimpleSpringAnnotated/pom.xml b/archive/spring/SimpleSpringAnnotated/pom.xml similarity index 100% rename from spring/SimpleSpringAnnotated/pom.xml rename to archive/spring/SimpleSpringAnnotated/pom.xml diff --git a/spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/Moppenverteller.java b/archive/spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/Moppenverteller.java similarity index 100% rename from spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/Moppenverteller.java rename to archive/spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/Moppenverteller.java diff --git a/spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/Moppenvrager.java b/archive/spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/Moppenvrager.java similarity index 100% rename from spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/Moppenvrager.java rename to archive/spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/Moppenvrager.java diff --git a/spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/StartApp.java b/archive/spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/StartApp.java similarity index 100% rename from spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/StartApp.java rename to archive/spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/StartApp.java diff --git a/spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/VertelDieVanEenAardbei.java b/archive/spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/VertelDieVanEenAardbei.java similarity index 100% rename from spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/VertelDieVanEenAardbei.java rename to archive/spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/VertelDieVanEenAardbei.java diff --git a/spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/VertelDieVanEenBanaan.java b/archive/spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/VertelDieVanEenBanaan.java similarity index 100% rename from spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/VertelDieVanEenBanaan.java rename to archive/spring/SimpleSpringAnnotated/src/main/java/nl/ica/ddoa/dda/springexample/VertelDieVanEenBanaan.java diff --git a/spring/SimpleSpringAnnotated/src/main/resources/application-context.xml b/archive/spring/SimpleSpringAnnotated/src/main/resources/application-context.xml similarity index 100% rename from spring/SimpleSpringAnnotated/src/main/resources/application-context.xml rename to archive/spring/SimpleSpringAnnotated/src/main/resources/application-context.xml diff --git a/spring/SimpleSpringWithConfiguration/.classpath b/archive/spring/SimpleSpringWithConfiguration/.classpath similarity index 100% rename from spring/SimpleSpringWithConfiguration/.classpath rename to archive/spring/SimpleSpringWithConfiguration/.classpath diff --git a/spring/SimpleSpringWithConfiguration/.project b/archive/spring/SimpleSpringWithConfiguration/.project similarity index 100% rename from spring/SimpleSpringWithConfiguration/.project rename to archive/spring/SimpleSpringWithConfiguration/.project diff --git a/spring/SimpleSpringWithConfiguration/.settings/org.eclipse.jdt.core.prefs b/archive/spring/SimpleSpringWithConfiguration/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from spring/SimpleSpringWithConfiguration/.settings/org.eclipse.jdt.core.prefs rename to archive/spring/SimpleSpringWithConfiguration/.settings/org.eclipse.jdt.core.prefs diff --git a/spring/SimpleSpringAnnotated/.settings/org.eclipse.m2e.core.prefs b/archive/spring/SimpleSpringWithConfiguration/.settings/org.eclipse.m2e.core.prefs similarity index 100% rename from spring/SimpleSpringAnnotated/.settings/org.eclipse.m2e.core.prefs rename to archive/spring/SimpleSpringWithConfiguration/.settings/org.eclipse.m2e.core.prefs diff --git a/spring/SimpleSpringWithConfiguration/.settings/org.maven.ide.eclipse.prefs b/archive/spring/SimpleSpringWithConfiguration/.settings/org.maven.ide.eclipse.prefs similarity index 100% rename from spring/SimpleSpringWithConfiguration/.settings/org.maven.ide.eclipse.prefs rename to archive/spring/SimpleSpringWithConfiguration/.settings/org.maven.ide.eclipse.prefs diff --git a/spring/SimpleSpringWithConfiguration/pom.xml b/archive/spring/SimpleSpringWithConfiguration/pom.xml similarity index 100% rename from spring/SimpleSpringWithConfiguration/pom.xml rename to archive/spring/SimpleSpringWithConfiguration/pom.xml diff --git a/spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/Moppenverteller.java b/archive/spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/Moppenverteller.java similarity index 100% rename from spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/Moppenverteller.java rename to archive/spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/Moppenverteller.java diff --git a/spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/Moppenvrager.java b/archive/spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/Moppenvrager.java similarity index 100% rename from spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/Moppenvrager.java rename to archive/spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/Moppenvrager.java diff --git a/spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/StartApp.java b/archive/spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/StartApp.java similarity index 100% rename from spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/StartApp.java rename to archive/spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/StartApp.java diff --git a/spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/VertelDieVanEenAardbei.java b/archive/spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/VertelDieVanEenAardbei.java similarity index 100% rename from spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/VertelDieVanEenAardbei.java rename to archive/spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/VertelDieVanEenAardbei.java diff --git a/spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/VertelDieVanEenBanaan.java b/archive/spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/VertelDieVanEenBanaan.java similarity index 100% rename from spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/VertelDieVanEenBanaan.java rename to archive/spring/SimpleSpringWithConfiguration/src/main/java/nl/ica/ddoa/ddoa/springexample/VertelDieVanEenBanaan.java diff --git a/spring/SimpleSpringWithConfiguration/src/main/resources/application-context.xml b/archive/spring/SimpleSpringWithConfiguration/src/main/resources/application-context.xml similarity index 100% rename from spring/SimpleSpringWithConfiguration/src/main/resources/application-context.xml rename to archive/spring/SimpleSpringWithConfiguration/src/main/resources/application-context.xml diff --git a/spring/SimpleSpringWithConfiguration/src/test/java/nl/ica/ddoa/ddoa/springexample/MoppenVertellerTest.java b/archive/spring/SimpleSpringWithConfiguration/src/test/java/nl/ica/ddoa/ddoa/springexample/MoppenVertellerTest.java similarity index 100% rename from spring/SimpleSpringWithConfiguration/src/test/java/nl/ica/ddoa/ddoa/springexample/MoppenVertellerTest.java rename to archive/spring/SimpleSpringWithConfiguration/src/test/java/nl/ica/ddoa/ddoa/springexample/MoppenVertellerTest.java diff --git a/travelmaps/.install-sts.sh.swp b/archive/travelmaps/.install-sts.sh.swp similarity index 100% rename from travelmaps/.install-sts.sh.swp rename to archive/travelmaps/.install-sts.sh.swp diff --git a/travelmaps/.vagrant/machines/default/virtualbox/action_provision b/archive/travelmaps/.vagrant/machines/default/virtualbox/action_provision similarity index 100% rename from travelmaps/.vagrant/machines/default/virtualbox/action_provision rename to archive/travelmaps/.vagrant/machines/default/virtualbox/action_provision diff --git a/travelmaps/.vagrant/machines/default/virtualbox/action_set_name b/archive/travelmaps/.vagrant/machines/default/virtualbox/action_set_name similarity index 100% rename from travelmaps/.vagrant/machines/default/virtualbox/action_set_name rename to archive/travelmaps/.vagrant/machines/default/virtualbox/action_set_name diff --git a/travelmaps/.vagrant/machines/default/virtualbox/id b/archive/travelmaps/.vagrant/machines/default/virtualbox/id similarity index 100% rename from travelmaps/.vagrant/machines/default/virtualbox/id rename to archive/travelmaps/.vagrant/machines/default/virtualbox/id diff --git a/travelmaps/README.md b/archive/travelmaps/README.md similarity index 100% rename from travelmaps/README.md rename to archive/travelmaps/README.md diff --git a/travelmaps/Vagrantfile b/archive/travelmaps/Vagrantfile similarity index 100% rename from travelmaps/Vagrantfile rename to archive/travelmaps/Vagrantfile diff --git a/travelmaps/scripts/install-netbeans.sh b/archive/travelmaps/scripts/install-netbeans.sh similarity index 100% rename from travelmaps/scripts/install-netbeans.sh rename to archive/travelmaps/scripts/install-netbeans.sh diff --git a/travelmaps/scripts/install-soapui.sh b/archive/travelmaps/scripts/install-soapui.sh similarity index 100% rename from travelmaps/scripts/install-soapui.sh rename to archive/travelmaps/scripts/install-soapui.sh diff --git a/travelmaps/scripts/install-sts.sh b/archive/travelmaps/scripts/install-sts.sh similarity index 100% rename from travelmaps/scripts/install-sts.sh rename to archive/travelmaps/scripts/install-sts.sh diff --git a/travelmaps/scripts/install-with-presets.sh b/archive/travelmaps/scripts/install-with-presets.sh similarity index 100% rename from travelmaps/scripts/install-with-presets.sh rename to archive/travelmaps/scripts/install-with-presets.sh diff --git a/travelmaps/scripts/set-paths.sh b/archive/travelmaps/scripts/set-paths.sh similarity index 100% rename from travelmaps/scripts/set-paths.sh rename to archive/travelmaps/scripts/set-paths.sh diff --git a/android-deckard-unittest/.pairs b/examples/android-deckard-unittest/.pairs similarity index 100% rename from android-deckard-unittest/.pairs rename to examples/android-deckard-unittest/.pairs diff --git a/android-deckard-unittest/.travis.yml b/examples/android-deckard-unittest/.travis.yml similarity index 100% rename from android-deckard-unittest/.travis.yml rename to examples/android-deckard-unittest/.travis.yml diff --git a/android-deckard-unittest/AndroidManifest.xml b/examples/android-deckard-unittest/maven/AndroidManifest.xml similarity index 100% rename from android-deckard-unittest/AndroidManifest.xml rename to examples/android-deckard-unittest/maven/AndroidManifest.xml diff --git a/android-deckard-unittest/LICENSE.txt b/examples/android-deckard-unittest/maven/LICENSE.txt similarity index 100% rename from android-deckard-unittest/LICENSE.txt rename to examples/android-deckard-unittest/maven/LICENSE.txt diff --git a/android-deckard-unittest/README.md b/examples/android-deckard-unittest/maven/README.md similarity index 100% rename from android-deckard-unittest/README.md rename to examples/android-deckard-unittest/maven/README.md diff --git a/android-deckard-unittest/pom.xml b/examples/android-deckard-unittest/maven/pom.xml similarity index 100% rename from android-deckard-unittest/pom.xml rename to examples/android-deckard-unittest/maven/pom.xml diff --git a/android-deckard-unittest/res/layout/deckard.xml b/examples/android-deckard-unittest/maven/res/layout/deckard.xml similarity index 100% rename from android-deckard-unittest/res/layout/deckard.xml rename to examples/android-deckard-unittest/maven/res/layout/deckard.xml diff --git a/android-deckard-unittest/src/main/java/com/example/activity/ButtonClickHandler.java b/examples/android-deckard-unittest/maven/src/main/java/com/example/activity/ButtonClickHandler.java similarity index 100% rename from android-deckard-unittest/src/main/java/com/example/activity/ButtonClickHandler.java rename to examples/android-deckard-unittest/maven/src/main/java/com/example/activity/ButtonClickHandler.java diff --git a/android-deckard-unittest/src/main/java/com/example/activity/DeckardActivity.java b/examples/android-deckard-unittest/maven/src/main/java/com/example/activity/DeckardActivity.java similarity index 100% rename from android-deckard-unittest/src/main/java/com/example/activity/DeckardActivity.java rename to examples/android-deckard-unittest/maven/src/main/java/com/example/activity/DeckardActivity.java diff --git a/android-deckard-unittest/src/main/java/com/example/activity/DeckardApplication.java b/examples/android-deckard-unittest/maven/src/main/java/com/example/activity/DeckardApplication.java similarity index 100% rename from android-deckard-unittest/src/main/java/com/example/activity/DeckardApplication.java rename to examples/android-deckard-unittest/maven/src/main/java/com/example/activity/DeckardApplication.java diff --git a/android-deckard-unittest/src/main/java/com/example/activity/DeckardModule.java b/examples/android-deckard-unittest/maven/src/main/java/com/example/activity/DeckardModule.java similarity index 100% rename from android-deckard-unittest/src/main/java/com/example/activity/DeckardModule.java rename to examples/android-deckard-unittest/maven/src/main/java/com/example/activity/DeckardModule.java diff --git a/android-deckard-unittest/src/main/java/com/example/activity/IButtonClickHandler.java b/examples/android-deckard-unittest/maven/src/main/java/com/example/activity/IButtonClickHandler.java similarity index 100% rename from android-deckard-unittest/src/main/java/com/example/activity/IButtonClickHandler.java rename to examples/android-deckard-unittest/maven/src/main/java/com/example/activity/IButtonClickHandler.java diff --git a/android-deckard-unittest/src/main/java/com/example/activity/IDataController.java b/examples/android-deckard-unittest/maven/src/main/java/com/example/activity/IDataController.java similarity index 100% rename from android-deckard-unittest/src/main/java/com/example/activity/IDataController.java rename to examples/android-deckard-unittest/maven/src/main/java/com/example/activity/IDataController.java diff --git a/android-deckard-unittest/src/main/java/com/example/activity/RestDataController.java b/examples/android-deckard-unittest/maven/src/main/java/com/example/activity/RestDataController.java similarity index 100% rename from android-deckard-unittest/src/main/java/com/example/activity/RestDataController.java rename to examples/android-deckard-unittest/maven/src/main/java/com/example/activity/RestDataController.java diff --git a/android-deckard-unittest/src/test/java/com/example/activity/ButtonClickHandlerTest.java b/examples/android-deckard-unittest/maven/src/test/java/com/example/activity/ButtonClickHandlerTest.java similarity index 100% rename from android-deckard-unittest/src/test/java/com/example/activity/ButtonClickHandlerTest.java rename to examples/android-deckard-unittest/maven/src/test/java/com/example/activity/ButtonClickHandlerTest.java diff --git a/android-deckard-unittest/src/test/java/com/example/activity/DeckardActivityTest.java b/examples/android-deckard-unittest/maven/src/test/java/com/example/activity/DeckardActivityTest.java similarity index 100% rename from android-deckard-unittest/src/test/java/com/example/activity/DeckardActivityTest.java rename to examples/android-deckard-unittest/maven/src/test/java/com/example/activity/DeckardActivityTest.java diff --git a/android-deckard-unittest/src/test/java/com/example/activity/TestGuiceModule.java b/examples/android-deckard-unittest/maven/src/test/java/com/example/activity/TestGuiceModule.java similarity index 100% rename from android-deckard-unittest/src/test/java/com/example/activity/TestGuiceModule.java rename to examples/android-deckard-unittest/maven/src/test/java/com/example/activity/TestGuiceModule.java diff --git a/examples/android-deckard-unittest/pom.xml b/examples/android-deckard-unittest/pom.xml new file mode 100644 index 0000000..1b5ac90 --- /dev/null +++ b/examples/android-deckard-unittest/pom.xml @@ -0,0 +1,103 @@ + + + 4.0.0 + + com.example + deckard + 1.0.0-SNAPSHOT + apk + Deckard + Who is the replicant here? + + + + robojuice + http://repo1.maven.org/maven2/org/roboguice/roboguice/ + + + + + + + junit + junit + 4.8.2 + test + + + + org.mockito + mockito-core + 1.9.5 + test + + + + + org.robolectric + robolectric + 2.2 + test + + + + android + android + 4.3_r2 + provided + + + + + org.roboguice + roboguice + 2.0 + + + com.google.inject + guice + 3.0 + no_aop + + + + + + ${project.artifactId} + + + maven-compiler-plugin + 2.3.2 + + 1.6 + 1.6 + + + + com.jayway.maven.plugins.android.generation2 + android-maven-plugin + 3.6.1 + + + + 18 + + true + + true + + + org.apache.maven.plugins + maven-surefire-plugin + 2.6 + + + **/Test*.java + + -Xmx1024m + + + + + diff --git a/confluence-plugin-example/ForumPlugin/MIT-license.txt b/examples/confluence-plugin-example/ForumPlugin/MIT-license.txt similarity index 100% rename from confluence-plugin-example/ForumPlugin/MIT-license.txt rename to examples/confluence-plugin-example/ForumPlugin/MIT-license.txt diff --git a/confluence-plugin-example/ForumPlugin/pom.xml b/examples/confluence-plugin-example/ForumPlugin/pom.xml similarity index 100% rename from confluence-plugin-example/ForumPlugin/pom.xml rename to examples/confluence-plugin-example/ForumPlugin/pom.xml diff --git a/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/action/ForumThreadAction.java b/examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/action/ForumThreadAction.java similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/action/ForumThreadAction.java rename to examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/action/ForumThreadAction.java diff --git a/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/Comment.java b/examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/Comment.java similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/Comment.java rename to examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/Comment.java diff --git a/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/ForumThread.java b/examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/ForumThread.java similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/ForumThread.java rename to examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/ForumThread.java diff --git a/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/ForumThreadRepository.java b/examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/ForumThreadRepository.java similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/ForumThreadRepository.java rename to examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/ForumThreadRepository.java diff --git a/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/ForumThreadRepositoryImpl.java b/examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/ForumThreadRepositoryImpl.java similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/ForumThreadRepositoryImpl.java rename to examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/ForumThreadRepositoryImpl.java diff --git a/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/Post.java b/examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/Post.java similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/Post.java rename to examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/entities/Post.java diff --git a/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/services/rest/ForumThreadRestService.java b/examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/services/rest/ForumThreadRestService.java similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/services/rest/ForumThreadRestService.java rename to examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/services/rest/ForumThreadRestService.java diff --git a/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/services/rest/SerializableForumThread.java b/examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/services/rest/SerializableForumThread.java similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/services/rest/SerializableForumThread.java rename to examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/services/rest/SerializableForumThread.java diff --git a/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/servlet/ThreadServlet.java b/examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/servlet/ThreadServlet.java similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/servlet/ThreadServlet.java rename to examples/confluence-plugin-example/ForumPlugin/src/main/java/nl/han/ddoa/forumplugin/servlet/ThreadServlet.java diff --git a/confluence-plugin-example/ForumPlugin/src/main/resources/atlassian-plugin.xml b/examples/confluence-plugin-example/ForumPlugin/src/main/resources/atlassian-plugin.xml similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/resources/atlassian-plugin.xml rename to examples/confluence-plugin-example/ForumPlugin/src/main/resources/atlassian-plugin.xml diff --git a/confluence-plugin-example/ForumPlugin/src/main/resources/css/ForumPlugin.css b/examples/confluence-plugin-example/ForumPlugin/src/main/resources/css/ForumPlugin.css similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/resources/css/ForumPlugin.css rename to examples/confluence-plugin-example/ForumPlugin/src/main/resources/css/ForumPlugin.css diff --git a/confluence-plugin-example/ForumPlugin/src/main/resources/images/pluginIcon.png b/examples/confluence-plugin-example/ForumPlugin/src/main/resources/images/pluginIcon.png similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/resources/images/pluginIcon.png rename to examples/confluence-plugin-example/ForumPlugin/src/main/resources/images/pluginIcon.png diff --git a/confluence-plugin-example/ForumPlugin/src/main/resources/images/pluginLogo.png b/examples/confluence-plugin-example/ForumPlugin/src/main/resources/images/pluginLogo.png similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/resources/images/pluginLogo.png rename to examples/confluence-plugin-example/ForumPlugin/src/main/resources/images/pluginLogo.png diff --git a/confluence-plugin-example/ForumPlugin/src/main/resources/js/app.js b/examples/confluence-plugin-example/ForumPlugin/src/main/resources/js/app.js similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/resources/js/app.js rename to examples/confluence-plugin-example/ForumPlugin/src/main/resources/js/app.js diff --git a/confluence-plugin-example/ForumPlugin/src/main/resources/js/controller.js b/examples/confluence-plugin-example/ForumPlugin/src/main/resources/js/controller.js similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/resources/js/controller.js rename to examples/confluence-plugin-example/ForumPlugin/src/main/resources/js/controller.js diff --git a/confluence-plugin-example/ForumPlugin/src/main/resources/js/forumservice.js b/examples/confluence-plugin-example/ForumPlugin/src/main/resources/js/forumservice.js similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/resources/js/forumservice.js rename to examples/confluence-plugin-example/ForumPlugin/src/main/resources/js/forumservice.js diff --git a/confluence-plugin-example/ForumPlugin/src/main/resources/js/libs/angular.js b/examples/confluence-plugin-example/ForumPlugin/src/main/resources/js/libs/angular.js similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/resources/js/libs/angular.js rename to examples/confluence-plugin-example/ForumPlugin/src/main/resources/js/libs/angular.js diff --git a/confluence-plugin-example/ForumPlugin/src/main/resources/templates/forums-rest.vm b/examples/confluence-plugin-example/ForumPlugin/src/main/resources/templates/forums-rest.vm similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/main/resources/templates/forums-rest.vm rename to examples/confluence-plugin-example/ForumPlugin/src/main/resources/templates/forums-rest.vm diff --git a/confluence-plugin-example/ForumPlugin/src/test/java/nl/han/ddoa/forumplugin/entities/ForumThreadRepositoryTest.java b/examples/confluence-plugin-example/ForumPlugin/src/test/java/nl/han/ddoa/forumplugin/entities/ForumThreadRepositoryTest.java similarity index 100% rename from confluence-plugin-example/ForumPlugin/src/test/java/nl/han/ddoa/forumplugin/entities/ForumThreadRepositoryTest.java rename to examples/confluence-plugin-example/ForumPlugin/src/test/java/nl/han/ddoa/forumplugin/entities/ForumThreadRepositoryTest.java diff --git a/examples/designpatterns/.DS_Store b/examples/designpatterns/.DS_Store new file mode 100644 index 0000000..043fa2d Binary files /dev/null and b/examples/designpatterns/.DS_Store differ diff --git a/examples/designpatterns/adapter/.idea/.name b/examples/designpatterns/adapter/.idea/.name new file mode 100644 index 0000000..768d85a --- /dev/null +++ b/examples/designpatterns/adapter/.idea/.name @@ -0,0 +1 @@ +adapter \ No newline at end of file diff --git a/exercises/solid/1-SOLID-SRP/.idea/compiler.xml b/examples/designpatterns/adapter/.idea/compiler.xml similarity index 96% rename from exercises/solid/1-SOLID-SRP/.idea/compiler.xml rename to examples/designpatterns/adapter/.idea/compiler.xml index 6d73d6c..4040786 100644 --- a/exercises/solid/1-SOLID-SRP/.idea/compiler.xml +++ b/examples/designpatterns/adapter/.idea/compiler.xml @@ -22,7 +22,7 @@ - + diff --git a/exercises/solid/1-SOLID-SRP/.idea/copyright/profiles_settings.xml b/examples/designpatterns/adapter/.idea/copyright/profiles_settings.xml similarity index 100% rename from exercises/solid/1-SOLID-SRP/.idea/copyright/profiles_settings.xml rename to examples/designpatterns/adapter/.idea/copyright/profiles_settings.xml diff --git a/examples/designpatterns/adapter/.idea/encodings.xml b/examples/designpatterns/adapter/.idea/encodings.xml new file mode 100644 index 0000000..e206d70 --- /dev/null +++ b/examples/designpatterns/adapter/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/designpatterns/adapter/.idea/libraries/Maven__junit_junit_4_7.xml b/examples/designpatterns/adapter/.idea/libraries/Maven__junit_junit_4_7.xml new file mode 100644 index 0000000..4402995 --- /dev/null +++ b/examples/designpatterns/adapter/.idea/libraries/Maven__junit_junit_4_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/exercises/solid/3-SOLID-LSP/.idea/misc.xml b/examples/designpatterns/adapter/.idea/misc.xml similarity index 87% rename from exercises/solid/3-SOLID-LSP/.idea/misc.xml rename to examples/designpatterns/adapter/.idea/misc.xml index da56fbd..fca1064 100644 --- a/exercises/solid/3-SOLID-LSP/.idea/misc.xml +++ b/examples/designpatterns/adapter/.idea/misc.xml @@ -3,7 +3,7 @@ - + diff --git a/exercises/solid/2-SOLID-OCP/.idea/copyright/profiles_settings.xml b/examples/designpatterns/factory/NamerFactoryExample/.idea/copyright/profiles_settings.xml similarity index 100% rename from exercises/solid/2-SOLID-OCP/.idea/copyright/profiles_settings.xml rename to examples/designpatterns/factory/NamerFactoryExample/.idea/copyright/profiles_settings.xml diff --git a/examples/designpatterns/factory/NamerFactoryExample/.idea/encodings.xml b/examples/designpatterns/factory/NamerFactoryExample/.idea/encodings.xml new file mode 100644 index 0000000..e206d70 --- /dev/null +++ b/examples/designpatterns/factory/NamerFactoryExample/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/designpatterns/factory/NamerFactoryExample/.idea/libraries/Maven__junit_junit_4_10.xml b/examples/designpatterns/factory/NamerFactoryExample/.idea/libraries/Maven__junit_junit_4_10.xml new file mode 100644 index 0000000..ed8bf5f --- /dev/null +++ b/examples/designpatterns/factory/NamerFactoryExample/.idea/libraries/Maven__junit_junit_4_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/examples/designpatterns/factory/NamerFactoryExample/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml similarity index 64% rename from exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml rename to examples/designpatterns/factory/NamerFactoryExample/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml index f58bbc1..acdf443 100644 --- a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml +++ b/examples/designpatterns/factory/NamerFactoryExample/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/exercises/solid/1-SOLID-SRP/.idea/misc.xml b/examples/designpatterns/factory/NamerFactoryExample/.idea/misc.xml similarity index 78% rename from exercises/solid/1-SOLID-SRP/.idea/misc.xml rename to examples/designpatterns/factory/NamerFactoryExample/.idea/misc.xml index da56fbd..c9ca5c9 100644 --- a/exercises/solid/1-SOLID-SRP/.idea/misc.xml +++ b/examples/designpatterns/factory/NamerFactoryExample/.idea/misc.xml @@ -3,11 +3,11 @@ - + diff --git a/examples/designpatterns/factory/NamerFactoryExample/.idea/modules.xml b/examples/designpatterns/factory/NamerFactoryExample/.idea/modules.xml new file mode 100644 index 0000000..0d78561 --- /dev/null +++ b/examples/designpatterns/factory/NamerFactoryExample/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/exercises/solid/2-SOLID-OCP/.idea/scopes/scope_settings.xml b/examples/designpatterns/factory/NamerFactoryExample/.idea/scopes/scope_settings.xml similarity index 100% rename from exercises/solid/2-SOLID-OCP/.idea/scopes/scope_settings.xml rename to examples/designpatterns/factory/NamerFactoryExample/.idea/scopes/scope_settings.xml diff --git a/exercises/solid/1-SOLID-SRP/.idea/uiDesigner.xml b/examples/designpatterns/factory/NamerFactoryExample/.idea/uiDesigner.xml similarity index 100% rename from exercises/solid/1-SOLID-SRP/.idea/uiDesigner.xml rename to examples/designpatterns/factory/NamerFactoryExample/.idea/uiDesigner.xml diff --git a/exercises/solid/2-SOLID-OCP/.idea/vcs.xml b/examples/designpatterns/factory/NamerFactoryExample/.idea/vcs.xml similarity index 100% rename from exercises/solid/2-SOLID-OCP/.idea/vcs.xml rename to examples/designpatterns/factory/NamerFactoryExample/.idea/vcs.xml diff --git a/exercises/solid/1-SOLID-SRP/.idea/workspace.xml b/examples/designpatterns/factory/NamerFactoryExample/.idea/workspace.xml similarity index 60% rename from exercises/solid/1-SOLID-SRP/.idea/workspace.xml rename to examples/designpatterns/factory/NamerFactoryExample/.idea/workspace.xml index a7aa8e0..ecec3ac 100644 --- a/exercises/solid/1-SOLID-SRP/.idea/workspace.xml +++ b/examples/designpatterns/factory/NamerFactoryExample/.idea/workspace.xml @@ -1,8 +1,8 @@ - - + + - + - + - - + + - - + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + @@ -76,19 +133,11 @@ - @@ -131,41 +180,53 @@ - - - - - + + + + + + - - @@ -181,7 +242,7 @@ - @@ -197,41 +258,38 @@ - - + + - - - - - + - - - - - - - + + - - - - - - - - - - - - - - - - - - - - @@ -319,6 +349,19 @@ + + + @@ -340,6 +383,41 @@ + + + + + + - - - - - - - - - - - - - - - - + - + @@ -446,47 +523,45 @@ - - 1402220195132 - 1402220195132 - - + + 1410208412419 + 1410208412419 + - - - + + - - - - - - + + + + + + - - - - - - + + + + + + - + - - - - + + + - + @@ -514,73 +589,83 @@ - + + + + + + + + + + + + + + + + + - - + + - + - - - - - - + + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - - - - - + + + @@ -613,7 +698,6 @@ - abstract (v1.0.0, ruby-1.8.7-p249) [gem] - 1.6 + 1.7 - SOLID-SRP + NamerFactory + + + + + + + + 1.7 - Maven: junit:junit:4.11 diff --git a/exercises/solid/3-SOLID-LSP/.idea/copyright/profiles_settings.xml b/examples/designpatterns/factory/NamerFactoryExample/KoenenKramers/.idea/copyright/profiles_settings.xml similarity index 100% rename from exercises/solid/3-SOLID-LSP/.idea/copyright/profiles_settings.xml rename to examples/designpatterns/factory/NamerFactoryExample/KoenenKramers/.idea/copyright/profiles_settings.xml diff --git a/examples/designpatterns/factory/NamerFactoryExample/KoenenKramers/.idea/modules.xml b/examples/designpatterns/factory/NamerFactoryExample/KoenenKramers/.idea/modules.xml new file mode 100644 index 0000000..684f749 --- /dev/null +++ b/examples/designpatterns/factory/NamerFactoryExample/KoenenKramers/.idea/modules.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/exercises/solid/3-SOLID-LSP/.idea/scopes/scope_settings.xml b/examples/designpatterns/factory/NamerFactoryExample/KoenenKramers/.idea/scopes/scope_settings.xml similarity index 100% rename from exercises/solid/3-SOLID-LSP/.idea/scopes/scope_settings.xml rename to examples/designpatterns/factory/NamerFactoryExample/KoenenKramers/.idea/scopes/scope_settings.xml diff --git a/exercises/solid/3-SOLID-LSP/.idea/vcs.xml b/examples/designpatterns/factory/NamerFactoryExample/KoenenKramers/.idea/vcs.xml similarity index 100% rename from exercises/solid/3-SOLID-LSP/.idea/vcs.xml rename to examples/designpatterns/factory/NamerFactoryExample/KoenenKramers/.idea/vcs.xml diff --git a/exercises/solid/2-SOLID-OCP/.idea/workspace.xml b/examples/designpatterns/factory/NamerFactoryExample/KoenenKramers/.idea/workspace.xml similarity index 58% rename from exercises/solid/2-SOLID-OCP/.idea/workspace.xml rename to examples/designpatterns/factory/NamerFactoryExample/KoenenKramers/.idea/workspace.xml index ccac5a4..6f580fe 100644 --- a/exercises/solid/2-SOLID-OCP/.idea/workspace.xml +++ b/examples/designpatterns/factory/NamerFactoryExample/KoenenKramers/.idea/workspace.xml @@ -1,8 +1,8 @@ - - + + - + @@ -32,22 +32,17 @@ - @@ -86,72 +81,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -164,40 +94,36 @@ - - - - - - - - + - + + + + - - + + - - - - - - - - - - - - - - - - - - - - @@ -271,7 +169,7 @@ + + + @@ -297,7 +208,7 @@ + + + + + + - - - - - - - - - - - - - - - - + - + @@ -413,31 +358,28 @@ - - 1402220195132 - 1402220195132 - - - - + + 1411394702100 + 1411394702100 + + - - + - + - @@ -449,13 +391,13 @@ - - + + - + @@ -483,206 +425,109 @@ - - - - - - - - - + - - + + - + - - + + - + - - + + - - - - - - - - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - - - - - - - - + + - + - - + + - + - - + + - + - - + + - + - - + + + - - - - - - - - - - - - - No facets are configured - - - - - - - - abstract (v1.0.0, ruby-1.8.7-p249) [gem] - - - - - - - - 1.6 - - - - - - - - SOLID-OCP - - - - - - - - Maven: junit:junit:4.11 - - - - - - - diff --git a/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/.name b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/.name new file mode 100644 index 0000000..2638e6a --- /dev/null +++ b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/.name @@ -0,0 +1 @@ +NamerFactory \ No newline at end of file diff --git a/exercises/solid/4-SOLID-ISP/.idea/compiler.xml b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/compiler.xml similarity index 88% rename from exercises/solid/4-SOLID-ISP/.idea/compiler.xml rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/compiler.xml index 1ad1fed..f39c72f 100644 --- a/exercises/solid/4-SOLID-ISP/.idea/compiler.xml +++ b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/compiler.xml @@ -22,10 +22,7 @@ - - - - + diff --git a/exercises/solid/4-SOLID-ISP/.idea/copyright/profiles_settings.xml b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/copyright/profiles_settings.xml similarity index 100% rename from exercises/solid/4-SOLID-ISP/.idea/copyright/profiles_settings.xml rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/copyright/profiles_settings.xml diff --git a/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/encodings.xml b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/encodings.xml new file mode 100644 index 0000000..e206d70 --- /dev/null +++ b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/libraries/Maven__junit_junit_4_10.xml b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/libraries/Maven__junit_junit_4_10.xml new file mode 100644 index 0000000..ed8bf5f --- /dev/null +++ b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/libraries/Maven__junit_junit_4_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/exercises/solid/4-SOLID-ISP/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml similarity index 64% rename from exercises/solid/4-SOLID-ISP/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml index f58bbc1..acdf443 100644 --- a/exercises/solid/4-SOLID-ISP/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml +++ b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/misc.xml b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/misc.xml new file mode 100644 index 0000000..fdb9e6a --- /dev/null +++ b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/misc.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + 1.7 + + + + + + + + + diff --git a/exercises/solid/1-SOLID-SRP/.idea/modules.xml b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/modules.xml similarity index 59% rename from exercises/solid/1-SOLID-SRP/.idea/modules.xml rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/modules.xml index 1db324d..de4d4ec 100644 --- a/exercises/solid/1-SOLID-SRP/.idea/modules.xml +++ b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/modules.xml @@ -2,7 +2,7 @@ - + diff --git a/exercises/solid/4-SOLID-ISP/.idea/scopes/scope_settings.xml b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/scopes/scope_settings.xml similarity index 100% rename from exercises/solid/4-SOLID-ISP/.idea/scopes/scope_settings.xml rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/scopes/scope_settings.xml diff --git a/exercises/solid/4-SOLID-ISP/.idea/vcs.xml b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/vcs.xml similarity index 100% rename from exercises/solid/4-SOLID-ISP/.idea/vcs.xml rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/vcs.xml diff --git a/exercises/solid/3-SOLID-LSP/.idea/workspace.xml b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/workspace.xml similarity index 52% rename from exercises/solid/3-SOLID-LSP/.idea/workspace.xml rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/workspace.xml index 06b3916..9b321a8 100644 --- a/exercises/solid/3-SOLID-LSP/.idea/workspace.xml +++ b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/.idea/workspace.xml @@ -1,9 +1,12 @@ - - + + + + + - + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -41,27 +87,16 @@ - + + true + - - @@ -100,67 +135,27 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -170,44 +165,32 @@ - - - - - - - - + + - - - - - - - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - @@ -296,6 +251,19 @@ + + + @@ -317,6 +285,41 @@ + + + + + + - - - - - - - - - - - - - - - - + - + @@ -423,54 +425,79 @@ - - 1402220195132 - 1402220195132 - - - - - - - + + 1411390854800 + - - - + + - + + - - - + + + - - - - - - - + + + + + - - + + - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + + - + - - + + + + + + - + - - + + + - + - - + + + - + - - + + + - + - - + + + + + + - + - - + + - - - - - - - - - - - - - No facets are configured - - - - - - - - abstract (v1.0.0, ruby-1.8.7-p249) [gem] - - - - - - - - 1.6 - - - - - - - - SOLID-LSP - - - - - - - - Maven: junit:junit:4.11 - - - - - - - - - + \ No newline at end of file diff --git a/designpatterns/factory/NamerFactoryExample/NamerFactory/NamerFactory.iml b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/NamerFactory.iml similarity index 100% rename from designpatterns/factory/NamerFactoryExample/NamerFactory/NamerFactory.iml rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/NamerFactory.iml diff --git a/designpatterns/factory/NamerFactoryExample/NamerFactory/pom.xml b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/pom.xml similarity index 100% rename from designpatterns/factory/NamerFactoryExample/NamerFactory/pom.xml rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/pom.xml diff --git a/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/DutchNamer.java b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/DutchNamer.java similarity index 100% rename from designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/DutchNamer.java rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/DutchNamer.java diff --git a/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/InvalidNameException.java b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/InvalidNameException.java similarity index 100% rename from designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/InvalidNameException.java rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/InvalidNameException.java diff --git a/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/Namer.java b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/Namer.java similarity index 100% rename from designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/Namer.java rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/Namer.java diff --git a/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/NamerClient.java b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/NamerClient.java similarity index 100% rename from designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/NamerClient.java rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/NamerClient.java diff --git a/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/NamerFactory.java b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/NamerFactory.java similarity index 100% rename from designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/NamerFactory.java rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/NamerFactory.java diff --git a/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/TakatoekalandNamer.java b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/TakatoekalandNamer.java similarity index 100% rename from designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/TakatoekalandNamer.java rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/main/java/nl/ica/ddoa/namer/TakatoekalandNamer.java diff --git a/designpatterns/factory/NamerFactoryExample/NamerFactory/src/test/java/nl/ica/ddoa/namer/DutchNamerTest.java b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/test/java/nl/ica/ddoa/namer/DutchNamerTest.java similarity index 100% rename from designpatterns/factory/NamerFactoryExample/NamerFactory/src/test/java/nl/ica/ddoa/namer/DutchNamerTest.java rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/test/java/nl/ica/ddoa/namer/DutchNamerTest.java diff --git a/designpatterns/factory/NamerFactoryExample/NamerFactory/src/test/java/nl/ica/ddoa/namer/NamerFactoryTest.java b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/test/java/nl/ica/ddoa/namer/NamerFactoryTest.java similarity index 100% rename from designpatterns/factory/NamerFactoryExample/NamerFactory/src/test/java/nl/ica/ddoa/namer/NamerFactoryTest.java rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/test/java/nl/ica/ddoa/namer/NamerFactoryTest.java diff --git a/designpatterns/factory/NamerFactoryExample/NamerFactory/src/test/java/nl/ica/ddoa/namer/TakatoekalandNamerTest.java b/examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/test/java/nl/ica/ddoa/namer/TakatoekalandNamerTest.java similarity index 100% rename from designpatterns/factory/NamerFactoryExample/NamerFactory/src/test/java/nl/ica/ddoa/namer/TakatoekalandNamerTest.java rename to examples/designpatterns/factory/NamerFactoryExample/NamerFactory/src/test/java/nl/ica/ddoa/namer/TakatoekalandNamerTest.java diff --git a/examples/designpatterns/mvc/.DS_Store b/examples/designpatterns/mvc/.DS_Store new file mode 100644 index 0000000..1c215ef Binary files /dev/null and b/examples/designpatterns/mvc/.DS_Store differ diff --git a/examples/designpatterns/mvc/MVCExample/.DS_Store b/examples/designpatterns/mvc/MVCExample/.DS_Store new file mode 100644 index 0000000..0387394 Binary files /dev/null and b/examples/designpatterns/mvc/MVCExample/.DS_Store differ diff --git a/designpatterns/mvc/MVCExample/.classpath b/examples/designpatterns/mvc/MVCExample/.classpath similarity index 100% rename from designpatterns/mvc/MVCExample/.classpath rename to examples/designpatterns/mvc/MVCExample/.classpath diff --git a/examples/designpatterns/mvc/MVCExample/.idea/.name b/examples/designpatterns/mvc/MVCExample/.idea/.name new file mode 100644 index 0000000..59a9130 --- /dev/null +++ b/examples/designpatterns/mvc/MVCExample/.idea/.name @@ -0,0 +1 @@ +MVCExample \ No newline at end of file diff --git a/examples/designpatterns/mvc/MVCExample/.idea/compiler.xml b/examples/designpatterns/mvc/MVCExample/.idea/compiler.xml new file mode 100644 index 0000000..9a8b7e5 --- /dev/null +++ b/examples/designpatterns/mvc/MVCExample/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/.idea/copyright/profiles_settings.xml b/examples/designpatterns/mvc/MVCExample/.idea/copyright/profiles_settings.xml similarity index 100% rename from exercises/solid/5-SOLID-DIP/.idea/copyright/profiles_settings.xml rename to examples/designpatterns/mvc/MVCExample/.idea/copyright/profiles_settings.xml diff --git a/examples/designpatterns/mvc/MVCExample/.idea/encodings.xml b/examples/designpatterns/mvc/MVCExample/.idea/encodings.xml new file mode 100644 index 0000000..d821048 --- /dev/null +++ b/examples/designpatterns/mvc/MVCExample/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/examples/designpatterns/mvc/MVCExample/.idea/misc.xml b/examples/designpatterns/mvc/MVCExample/.idea/misc.xml new file mode 100644 index 0000000..f5adb22 --- /dev/null +++ b/examples/designpatterns/mvc/MVCExample/.idea/misc.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Android + + + Android Lint + + + Java language level migration aids + + + + + Abstraction issues + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + + + + + + 1.7 + + + + + + + + \ No newline at end of file diff --git a/exercises/solid/4-SOLID-ISP/.idea/modules.xml b/examples/designpatterns/mvc/MVCExample/.idea/modules.xml similarity index 56% rename from exercises/solid/4-SOLID-ISP/.idea/modules.xml rename to examples/designpatterns/mvc/MVCExample/.idea/modules.xml index db58894..c35a954 100644 --- a/exercises/solid/4-SOLID-ISP/.idea/modules.xml +++ b/examples/designpatterns/mvc/MVCExample/.idea/modules.xml @@ -2,8 +2,7 @@ - + - - + \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/.idea/scopes/scope_settings.xml b/examples/designpatterns/mvc/MVCExample/.idea/scopes/scope_settings.xml similarity index 100% rename from exercises/solid/5-SOLID-DIP/.idea/scopes/scope_settings.xml rename to examples/designpatterns/mvc/MVCExample/.idea/scopes/scope_settings.xml diff --git a/exercises/solid/5-SOLID-DIP/.idea/vcs.xml b/examples/designpatterns/mvc/MVCExample/.idea/vcs.xml similarity index 92% rename from exercises/solid/5-SOLID-DIP/.idea/vcs.xml rename to examples/designpatterns/mvc/MVCExample/.idea/vcs.xml index def6a6a..6564d52 100644 --- a/exercises/solid/5-SOLID-DIP/.idea/vcs.xml +++ b/examples/designpatterns/mvc/MVCExample/.idea/vcs.xml @@ -3,5 +3,4 @@ - - + \ No newline at end of file diff --git a/examples/designpatterns/mvc/MVCExample/.idea/workspace.xml b/examples/designpatterns/mvc/MVCExample/.idea/workspace.xml new file mode 100644 index 0000000..fcbb864 --- /dev/null +++ b/examples/designpatterns/mvc/MVCExample/.idea/workspace.xml @@ -0,0 +1,650 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + + + + 1424959287172 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/designpatterns/mvc/MVCExample/.project b/examples/designpatterns/mvc/MVCExample/.project similarity index 100% rename from designpatterns/mvc/MVCExample/.project rename to examples/designpatterns/mvc/MVCExample/.project diff --git a/examples/designpatterns/mvc/MVCExample/MVCExample.iml b/examples/designpatterns/mvc/MVCExample/MVCExample.iml new file mode 100644 index 0000000..f452a91 --- /dev/null +++ b/examples/designpatterns/mvc/MVCExample/MVCExample.iml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/designpatterns/mvc/MVCExample/build/1.jpg b/examples/designpatterns/mvc/MVCExample/build/1.jpg similarity index 100% rename from designpatterns/mvc/MVCExample/build/1.jpg rename to examples/designpatterns/mvc/MVCExample/build/1.jpg diff --git a/designpatterns/mvc/MVCExample/build/2.jpg b/examples/designpatterns/mvc/MVCExample/build/2.jpg similarity index 100% rename from designpatterns/mvc/MVCExample/build/2.jpg rename to examples/designpatterns/mvc/MVCExample/build/2.jpg diff --git a/designpatterns/mvc/MVCExample/build/3.jpg b/examples/designpatterns/mvc/MVCExample/build/3.jpg similarity index 100% rename from designpatterns/mvc/MVCExample/build/3.jpg rename to examples/designpatterns/mvc/MVCExample/build/3.jpg diff --git a/designpatterns/mvc/MVCExample/build/4.jpg b/examples/designpatterns/mvc/MVCExample/build/4.jpg similarity index 100% rename from designpatterns/mvc/MVCExample/build/4.jpg rename to examples/designpatterns/mvc/MVCExample/build/4.jpg diff --git a/designpatterns/mvc/MVCExample/build/5.jpg b/examples/designpatterns/mvc/MVCExample/build/5.jpg similarity index 100% rename from designpatterns/mvc/MVCExample/build/5.jpg rename to examples/designpatterns/mvc/MVCExample/build/5.jpg diff --git a/designpatterns/mvc/MVCExample/build/6.jpg b/examples/designpatterns/mvc/MVCExample/build/6.jpg similarity index 100% rename from designpatterns/mvc/MVCExample/build/6.jpg rename to examples/designpatterns/mvc/MVCExample/build/6.jpg diff --git a/designpatterns/mvc/MVCExample/res/1.jpg b/examples/designpatterns/mvc/MVCExample/res/1.jpg similarity index 100% rename from designpatterns/mvc/MVCExample/res/1.jpg rename to examples/designpatterns/mvc/MVCExample/res/1.jpg diff --git a/designpatterns/mvc/MVCExample/res/2.jpg b/examples/designpatterns/mvc/MVCExample/res/2.jpg similarity index 100% rename from designpatterns/mvc/MVCExample/res/2.jpg rename to examples/designpatterns/mvc/MVCExample/res/2.jpg diff --git a/designpatterns/mvc/MVCExample/res/3.jpg b/examples/designpatterns/mvc/MVCExample/res/3.jpg similarity index 100% rename from designpatterns/mvc/MVCExample/res/3.jpg rename to examples/designpatterns/mvc/MVCExample/res/3.jpg diff --git a/designpatterns/mvc/MVCExample/res/4.jpg b/examples/designpatterns/mvc/MVCExample/res/4.jpg similarity index 100% rename from designpatterns/mvc/MVCExample/res/4.jpg rename to examples/designpatterns/mvc/MVCExample/res/4.jpg diff --git a/designpatterns/mvc/MVCExample/res/5.jpg b/examples/designpatterns/mvc/MVCExample/res/5.jpg similarity index 100% rename from designpatterns/mvc/MVCExample/res/5.jpg rename to examples/designpatterns/mvc/MVCExample/res/5.jpg diff --git a/designpatterns/mvc/MVCExample/res/6.jpg b/examples/designpatterns/mvc/MVCExample/res/6.jpg similarity index 100% rename from designpatterns/mvc/MVCExample/res/6.jpg rename to examples/designpatterns/mvc/MVCExample/res/6.jpg diff --git a/examples/designpatterns/mvc/MVCExample/src/.DS_Store b/examples/designpatterns/mvc/MVCExample/src/.DS_Store new file mode 100644 index 0000000..61bddce Binary files /dev/null and b/examples/designpatterns/mvc/MVCExample/src/.DS_Store differ diff --git a/examples/designpatterns/mvc/MVCExample/src/nl/.DS_Store b/examples/designpatterns/mvc/MVCExample/src/nl/.DS_Store new file mode 100644 index 0000000..171ac30 Binary files /dev/null and b/examples/designpatterns/mvc/MVCExample/src/nl/.DS_Store differ diff --git a/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/.DS_Store b/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/.DS_Store new file mode 100644 index 0000000..5abe255 Binary files /dev/null and b/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/.DS_Store differ diff --git a/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/.DS_Store b/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/.DS_Store new file mode 100644 index 0000000..a90837a Binary files /dev/null and b/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/.DS_Store differ diff --git a/designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/Dobbelsteen.java b/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/Dobbelsteen.java similarity index 100% rename from designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/Dobbelsteen.java rename to examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/Dobbelsteen.java diff --git a/designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/DobbelsteenConsoleView.java b/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/DobbelsteenConsoleView.java similarity index 100% rename from designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/DobbelsteenConsoleView.java rename to examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/DobbelsteenConsoleView.java diff --git a/designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/DobbelsteenController.java b/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/DobbelsteenController.java similarity index 100% rename from designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/DobbelsteenController.java rename to examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/DobbelsteenController.java diff --git a/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/DobbelsteenDelegate.java b/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/DobbelsteenDelegate.java new file mode 100644 index 0000000..d3ce0c9 --- /dev/null +++ b/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/DobbelsteenDelegate.java @@ -0,0 +1,6 @@ +package nl.ddoa.example.dice; + +import java.util.Observable; + +public class DobbelsteenDelegate extends Observable { +} diff --git a/designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/DobbelsteenSwingView.java b/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/DobbelsteenSwingView.java similarity index 100% rename from designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/DobbelsteenSwingView.java rename to examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/dice/DobbelsteenSwingView.java diff --git a/designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/PupletLiefde.java b/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/PupletLiefde.java similarity index 100% rename from designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/PupletLiefde.java rename to examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/PupletLiefde.java diff --git a/designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/Tanja.java b/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/Tanja.java similarity index 100% rename from designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/Tanja.java rename to examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/Tanja.java diff --git a/designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/Tim.java b/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/Tim.java similarity index 100% rename from designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/Tim.java rename to examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/Tim.java diff --git a/designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/Tom.java b/examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/Tom.java similarity index 100% rename from designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/Tom.java rename to examples/designpatterns/mvc/MVCExample/src/nl/ddoa/example/puplets/Tom.java diff --git a/designpatterns/mvc/MVCExampleResults/.classpath b/examples/designpatterns/mvc/MVCExampleResults/.classpath similarity index 100% rename from designpatterns/mvc/MVCExampleResults/.classpath rename to examples/designpatterns/mvc/MVCExampleResults/.classpath diff --git a/designpatterns/mvc/MVCExampleResults/.project b/examples/designpatterns/mvc/MVCExampleResults/.project similarity index 100% rename from designpatterns/mvc/MVCExampleResults/.project rename to examples/designpatterns/mvc/MVCExampleResults/.project diff --git a/designpatterns/mvc/MVCExampleResults/build.xml b/examples/designpatterns/mvc/MVCExampleResults/build.xml similarity index 100% rename from designpatterns/mvc/MVCExampleResults/build.xml rename to examples/designpatterns/mvc/MVCExampleResults/build.xml diff --git a/designpatterns/mvc/MVCExampleResults/build/1.jpg b/examples/designpatterns/mvc/MVCExampleResults/build/1.jpg similarity index 100% rename from designpatterns/mvc/MVCExampleResults/build/1.jpg rename to examples/designpatterns/mvc/MVCExampleResults/build/1.jpg diff --git a/designpatterns/mvc/MVCExampleResults/build/2.jpg b/examples/designpatterns/mvc/MVCExampleResults/build/2.jpg similarity index 100% rename from designpatterns/mvc/MVCExampleResults/build/2.jpg rename to examples/designpatterns/mvc/MVCExampleResults/build/2.jpg diff --git a/designpatterns/mvc/MVCExampleResults/build/3.jpg b/examples/designpatterns/mvc/MVCExampleResults/build/3.jpg similarity index 100% rename from designpatterns/mvc/MVCExampleResults/build/3.jpg rename to examples/designpatterns/mvc/MVCExampleResults/build/3.jpg diff --git a/designpatterns/mvc/MVCExampleResults/build/4.jpg b/examples/designpatterns/mvc/MVCExampleResults/build/4.jpg similarity index 100% rename from designpatterns/mvc/MVCExampleResults/build/4.jpg rename to examples/designpatterns/mvc/MVCExampleResults/build/4.jpg diff --git a/designpatterns/mvc/MVCExampleResults/build/5.jpg b/examples/designpatterns/mvc/MVCExampleResults/build/5.jpg similarity index 100% rename from designpatterns/mvc/MVCExampleResults/build/5.jpg rename to examples/designpatterns/mvc/MVCExampleResults/build/5.jpg diff --git a/designpatterns/mvc/MVCExampleResults/build/6.jpg b/examples/designpatterns/mvc/MVCExampleResults/build/6.jpg similarity index 100% rename from designpatterns/mvc/MVCExampleResults/build/6.jpg rename to examples/designpatterns/mvc/MVCExampleResults/build/6.jpg diff --git a/designpatterns/mvc/MVCExampleResults/report/all-tests.html b/examples/designpatterns/mvc/MVCExampleResults/report/all-tests.html similarity index 100% rename from designpatterns/mvc/MVCExampleResults/report/all-tests.html rename to examples/designpatterns/mvc/MVCExampleResults/report/all-tests.html diff --git a/designpatterns/mvc/MVCExampleResults/report/allclasses-frame.html b/examples/designpatterns/mvc/MVCExampleResults/report/allclasses-frame.html similarity index 100% rename from designpatterns/mvc/MVCExampleResults/report/allclasses-frame.html rename to examples/designpatterns/mvc/MVCExampleResults/report/allclasses-frame.html diff --git a/designpatterns/mvc/MVCExampleResults/report/alltests-errors.html b/examples/designpatterns/mvc/MVCExampleResults/report/alltests-errors.html similarity index 100% rename from designpatterns/mvc/MVCExampleResults/report/alltests-errors.html rename to examples/designpatterns/mvc/MVCExampleResults/report/alltests-errors.html diff --git a/designpatterns/mvc/MVCExampleResults/report/alltests-fails.html b/examples/designpatterns/mvc/MVCExampleResults/report/alltests-fails.html similarity index 100% rename from designpatterns/mvc/MVCExampleResults/report/alltests-fails.html rename to examples/designpatterns/mvc/MVCExampleResults/report/alltests-fails.html diff --git a/designpatterns/mvc/MVCExampleResults/report/index.html b/examples/designpatterns/mvc/MVCExampleResults/report/index.html similarity index 100% rename from designpatterns/mvc/MVCExampleResults/report/index.html rename to examples/designpatterns/mvc/MVCExampleResults/report/index.html diff --git a/designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/0_DobbelsteenTest-errors.html b/examples/designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/0_DobbelsteenTest-errors.html similarity index 100% rename from designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/0_DobbelsteenTest-errors.html rename to examples/designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/0_DobbelsteenTest-errors.html diff --git a/designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/0_DobbelsteenTest.html b/examples/designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/0_DobbelsteenTest.html similarity index 100% rename from designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/0_DobbelsteenTest.html rename to examples/designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/0_DobbelsteenTest.html diff --git a/designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/package-frame.html b/examples/designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/package-frame.html similarity index 100% rename from designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/package-frame.html rename to examples/designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/package-frame.html diff --git a/designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/package-summary.html b/examples/designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/package-summary.html similarity index 100% rename from designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/package-summary.html rename to examples/designpatterns/mvc/MVCExampleResults/report/nl/ddoa/example/dice/package-summary.html diff --git a/designpatterns/mvc/MVCExampleResults/report/overview-frame.html b/examples/designpatterns/mvc/MVCExampleResults/report/overview-frame.html similarity index 100% rename from designpatterns/mvc/MVCExampleResults/report/overview-frame.html rename to examples/designpatterns/mvc/MVCExampleResults/report/overview-frame.html diff --git a/designpatterns/mvc/MVCExampleResults/report/overview-summary.html b/examples/designpatterns/mvc/MVCExampleResults/report/overview-summary.html similarity index 100% rename from designpatterns/mvc/MVCExampleResults/report/overview-summary.html rename to examples/designpatterns/mvc/MVCExampleResults/report/overview-summary.html diff --git a/designpatterns/mvc/MVCExampleResults/report/stylesheet.css b/examples/designpatterns/mvc/MVCExampleResults/report/stylesheet.css similarity index 100% rename from designpatterns/mvc/MVCExampleResults/report/stylesheet.css rename to examples/designpatterns/mvc/MVCExampleResults/report/stylesheet.css diff --git a/designpatterns/mvc/MVCExampleResults/reports/TEST-nl.ddoa.example.dice.DobbelsteenTest.xml b/examples/designpatterns/mvc/MVCExampleResults/reports/TEST-nl.ddoa.example.dice.DobbelsteenTest.xml similarity index 100% rename from designpatterns/mvc/MVCExampleResults/reports/TEST-nl.ddoa.example.dice.DobbelsteenTest.xml rename to examples/designpatterns/mvc/MVCExampleResults/reports/TEST-nl.ddoa.example.dice.DobbelsteenTest.xml diff --git a/designpatterns/mvc/MVCExampleResults/reports/TESTS-TestSuites.xml b/examples/designpatterns/mvc/MVCExampleResults/reports/TESTS-TestSuites.xml similarity index 100% rename from designpatterns/mvc/MVCExampleResults/reports/TESTS-TestSuites.xml rename to examples/designpatterns/mvc/MVCExampleResults/reports/TESTS-TestSuites.xml diff --git a/designpatterns/mvc/MVCExampleResults/res/1.jpg b/examples/designpatterns/mvc/MVCExampleResults/res/1.jpg similarity index 100% rename from designpatterns/mvc/MVCExampleResults/res/1.jpg rename to examples/designpatterns/mvc/MVCExampleResults/res/1.jpg diff --git a/designpatterns/mvc/MVCExampleResults/res/2.jpg b/examples/designpatterns/mvc/MVCExampleResults/res/2.jpg similarity index 100% rename from designpatterns/mvc/MVCExampleResults/res/2.jpg rename to examples/designpatterns/mvc/MVCExampleResults/res/2.jpg diff --git a/designpatterns/mvc/MVCExampleResults/res/3.jpg b/examples/designpatterns/mvc/MVCExampleResults/res/3.jpg similarity index 100% rename from designpatterns/mvc/MVCExampleResults/res/3.jpg rename to examples/designpatterns/mvc/MVCExampleResults/res/3.jpg diff --git a/designpatterns/mvc/MVCExampleResults/res/4.jpg b/examples/designpatterns/mvc/MVCExampleResults/res/4.jpg similarity index 100% rename from designpatterns/mvc/MVCExampleResults/res/4.jpg rename to examples/designpatterns/mvc/MVCExampleResults/res/4.jpg diff --git a/designpatterns/mvc/MVCExampleResults/res/5.jpg b/examples/designpatterns/mvc/MVCExampleResults/res/5.jpg similarity index 100% rename from designpatterns/mvc/MVCExampleResults/res/5.jpg rename to examples/designpatterns/mvc/MVCExampleResults/res/5.jpg diff --git a/designpatterns/mvc/MVCExampleResults/res/6.jpg b/examples/designpatterns/mvc/MVCExampleResults/res/6.jpg similarity index 100% rename from designpatterns/mvc/MVCExampleResults/res/6.jpg rename to examples/designpatterns/mvc/MVCExampleResults/res/6.jpg diff --git a/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/Dobbelsteen.java b/examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/Dobbelsteen.java similarity index 100% rename from designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/Dobbelsteen.java rename to examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/Dobbelsteen.java diff --git a/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/DobbelsteenApp.java b/examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/DobbelsteenApp.java similarity index 100% rename from designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/DobbelsteenApp.java rename to examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/DobbelsteenApp.java diff --git a/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/DobbelsteenConsoleView.java b/examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/DobbelsteenConsoleView.java similarity index 100% rename from designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/DobbelsteenConsoleView.java rename to examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/DobbelsteenConsoleView.java diff --git a/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/DobbelsteenSwingView.java b/examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/DobbelsteenSwingView.java similarity index 100% rename from designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/DobbelsteenSwingView.java rename to examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/dice/DobbelsteenSwingView.java diff --git a/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/PupletLiefde.java b/examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/PupletLiefde.java similarity index 100% rename from designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/PupletLiefde.java rename to examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/PupletLiefde.java diff --git a/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tammie.java b/examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tammie.java similarity index 100% rename from designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tammie.java rename to examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tammie.java diff --git a/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tanja.java b/examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tanja.java similarity index 100% rename from designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tanja.java rename to examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tanja.java diff --git a/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tim.java b/examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tim.java similarity index 100% rename from designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tim.java rename to examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tim.java diff --git a/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tom.java b/examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tom.java similarity index 100% rename from designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tom.java rename to examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/puplets/Tom.java diff --git a/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/threadrace/AddRacer.java b/examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/threadrace/AddRacer.java similarity index 100% rename from designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/threadrace/AddRacer.java rename to examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/threadrace/AddRacer.java diff --git a/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/threadrace/RemoveRacer.java b/examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/threadrace/RemoveRacer.java similarity index 100% rename from designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/threadrace/RemoveRacer.java rename to examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/threadrace/RemoveRacer.java diff --git a/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/threadrace/ThreadRace.java b/examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/threadrace/ThreadRace.java similarity index 100% rename from designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/threadrace/ThreadRace.java rename to examples/designpatterns/mvc/MVCExampleResults/src/nl/ddoa/example/threadrace/ThreadRace.java diff --git a/designpatterns/mvc/MVCExampleResults/test/nl/ddoa/example/dice/AllTests.java b/examples/designpatterns/mvc/MVCExampleResults/test/nl/ddoa/example/dice/AllTests.java similarity index 100% rename from designpatterns/mvc/MVCExampleResults/test/nl/ddoa/example/dice/AllTests.java rename to examples/designpatterns/mvc/MVCExampleResults/test/nl/ddoa/example/dice/AllTests.java diff --git a/designpatterns/mvc/MVCExampleResults/test/nl/ddoa/example/dice/DobbelsteenTest.java b/examples/designpatterns/mvc/MVCExampleResults/test/nl/ddoa/example/dice/DobbelsteenTest.java similarity index 100% rename from designpatterns/mvc/MVCExampleResults/test/nl/ddoa/example/dice/DobbelsteenTest.java rename to examples/designpatterns/mvc/MVCExampleResults/test/nl/ddoa/example/dice/DobbelsteenTest.java diff --git a/designpatterns/mvc/MVCExampleResults/toolconfigs/ddoa_checks.xml b/examples/designpatterns/mvc/MVCExampleResults/toolconfigs/ddoa_checks.xml similarity index 100% rename from designpatterns/mvc/MVCExampleResults/toolconfigs/ddoa_checks.xml rename to examples/designpatterns/mvc/MVCExampleResults/toolconfigs/ddoa_checks.xml diff --git a/designpatterns/mvc/MVCExampleResults/toolconfigs/ddoa_formatter.xml b/examples/designpatterns/mvc/MVCExampleResults/toolconfigs/ddoa_formatter.xml similarity index 100% rename from designpatterns/mvc/MVCExampleResults/toolconfigs/ddoa_formatter.xml rename to examples/designpatterns/mvc/MVCExampleResults/toolconfigs/ddoa_formatter.xml diff --git a/generics/demo-generics/demo-generics.iml b/examples/generics/demo-generics/demo-generics.iml similarity index 100% rename from generics/demo-generics/demo-generics.iml rename to examples/generics/demo-generics/demo-generics.iml diff --git a/generics/demo-generics/src/nl/ica/ddoa/generics/EasySort.java b/examples/generics/demo-generics/src/nl/ica/ddoa/generics/EasySort.java similarity index 100% rename from generics/demo-generics/src/nl/ica/ddoa/generics/EasySort.java rename to examples/generics/demo-generics/src/nl/ica/ddoa/generics/EasySort.java diff --git a/generics/demo-generics/src/nl/ica/ddoa/generics/EasySortClient.java b/examples/generics/demo-generics/src/nl/ica/ddoa/generics/EasySortClient.java similarity index 100% rename from generics/demo-generics/src/nl/ica/ddoa/generics/EasySortClient.java rename to examples/generics/demo-generics/src/nl/ica/ddoa/generics/EasySortClient.java diff --git a/generics/demo-generics/src/nl/ica/ddoa/generics/ObjectHolder.java b/examples/generics/demo-generics/src/nl/ica/ddoa/generics/ObjectHolder.java similarity index 100% rename from generics/demo-generics/src/nl/ica/ddoa/generics/ObjectHolder.java rename to examples/generics/demo-generics/src/nl/ica/ddoa/generics/ObjectHolder.java diff --git a/generics/sorter-generics/SorterGenericsResults/src/nl/ica/ddoa/sorter/EasySort.java b/examples/generics/sorter-generics/SorterGenericsResults/src/nl/ica/ddoa/sorter/EasySort.java similarity index 100% rename from generics/sorter-generics/SorterGenericsResults/src/nl/ica/ddoa/sorter/EasySort.java rename to examples/generics/sorter-generics/SorterGenericsResults/src/nl/ica/ddoa/sorter/EasySort.java diff --git a/generics/sorter-generics/SorterGenericsResults/src/nl/ica/ddoa/sorter/ISorter.java b/examples/generics/sorter-generics/SorterGenericsResults/src/nl/ica/ddoa/sorter/ISorter.java similarity index 100% rename from generics/sorter-generics/SorterGenericsResults/src/nl/ica/ddoa/sorter/ISorter.java rename to examples/generics/sorter-generics/SorterGenericsResults/src/nl/ica/ddoa/sorter/ISorter.java diff --git a/generics/sorter-generics/SorterGenericsResults/src/nl/ica/ddoa/sorter/SortClient.java b/examples/generics/sorter-generics/SorterGenericsResults/src/nl/ica/ddoa/sorter/SortClient.java similarity index 100% rename from generics/sorter-generics/SorterGenericsResults/src/nl/ica/ddoa/sorter/SortClient.java rename to examples/generics/sorter-generics/SorterGenericsResults/src/nl/ica/ddoa/sorter/SortClient.java diff --git a/interfaces/src/nl/ica/ddoa/interfaces/AmfibieVoertuig.java b/examples/interfaces/src/nl/ica/ddoa/interfaces/AmfibieVoertuig.java similarity index 100% rename from interfaces/src/nl/ica/ddoa/interfaces/AmfibieVoertuig.java rename to examples/interfaces/src/nl/ica/ddoa/interfaces/AmfibieVoertuig.java diff --git a/interfaces/src/nl/ica/ddoa/interfaces/Auto.java b/examples/interfaces/src/nl/ica/ddoa/interfaces/Auto.java similarity index 100% rename from interfaces/src/nl/ica/ddoa/interfaces/Auto.java rename to examples/interfaces/src/nl/ica/ddoa/interfaces/Auto.java diff --git a/interfaces/src/nl/ica/ddoa/interfaces/Boot.java b/examples/interfaces/src/nl/ica/ddoa/interfaces/Boot.java similarity index 100% rename from interfaces/src/nl/ica/ddoa/interfaces/Boot.java rename to examples/interfaces/src/nl/ica/ddoa/interfaces/Boot.java diff --git a/interfaces/src/nl/ica/ddoa/interfaces/Hovercraft.java b/examples/interfaces/src/nl/ica/ddoa/interfaces/Hovercraft.java similarity index 100% rename from interfaces/src/nl/ica/ddoa/interfaces/Hovercraft.java rename to examples/interfaces/src/nl/ica/ddoa/interfaces/Hovercraft.java diff --git a/interfaces/src/nl/ica/ddoa/interfaces/Vehikels.java b/examples/interfaces/src/nl/ica/ddoa/interfaces/Vehikels.java similarity index 100% rename from interfaces/src/nl/ica/ddoa/interfaces/Vehikels.java rename to examples/interfaces/src/nl/ica/ddoa/interfaces/Vehikels.java diff --git a/interfaces/src/nl/ica/ddoa/interfaces/VrachtAuto.java b/examples/interfaces/src/nl/ica/ddoa/interfaces/VrachtAuto.java similarity index 100% rename from interfaces/src/nl/ica/ddoa/interfaces/VrachtAuto.java rename to examples/interfaces/src/nl/ica/ddoa/interfaces/VrachtAuto.java diff --git a/examples/maven/dotnet-example/pom.xml b/examples/maven/dotnet-example/pom.xml new file mode 100644 index 0000000..45ec15e --- /dev/null +++ b/examples/maven/dotnet-example/pom.xml @@ -0,0 +1,39 @@ + + 4.0.0 + nl.yourcompanyname + yourappname + 1.0-SNAPSHOT + OOSE CompanyName AppName + netpack + + + nameofyoursolutionfile.sln + *.Tests + 4.0 + cs + C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319 + skip + C:/Program Files/Gallio + + + + + + org.codehaus.sonar-plugins.dotnet + maven-dotnet-plugin + 1.0 + true + + c:\Program Files\Gallio + + + + org.codehaus.mojo + sonar-maven-plugin + + cs + + + + + diff --git a/maven/multimodule/README.md b/examples/maven/multimodule/README.md similarity index 100% rename from maven/multimodule/README.md rename to examples/maven/multimodule/README.md diff --git a/maven/multimodule/SorterClient/pom.xml b/examples/maven/multimodule/SorterClient/pom.xml similarity index 100% rename from maven/multimodule/SorterClient/pom.xml rename to examples/maven/multimodule/SorterClient/pom.xml diff --git a/maven/multimodule/SorterClient/src/main/java/nl/han/ddoa/sorter/client/SortClient.java b/examples/maven/multimodule/SorterClient/src/main/java/nl/han/ddoa/sorter/client/SortClient.java similarity index 100% rename from maven/multimodule/SorterClient/src/main/java/nl/han/ddoa/sorter/client/SortClient.java rename to examples/maven/multimodule/SorterClient/src/main/java/nl/han/ddoa/sorter/client/SortClient.java diff --git a/maven/multimodule/SorterServer/pom.xml b/examples/maven/multimodule/SorterServer/pom.xml similarity index 100% rename from maven/multimodule/SorterServer/pom.xml rename to examples/maven/multimodule/SorterServer/pom.xml diff --git a/maven/multimodule/SorterServer/src/main/java/nl/han/ddoa/sorter/algorithms/DefaultSortFactory.java b/examples/maven/multimodule/SorterServer/src/main/java/nl/han/ddoa/sorter/algorithms/DefaultSortFactory.java similarity index 100% rename from maven/multimodule/SorterServer/src/main/java/nl/han/ddoa/sorter/algorithms/DefaultSortFactory.java rename to examples/maven/multimodule/SorterServer/src/main/java/nl/han/ddoa/sorter/algorithms/DefaultSortFactory.java diff --git a/maven/multimodule/SorterServer/src/main/java/nl/han/ddoa/sorter/server/SortServer.java b/examples/maven/multimodule/SorterServer/src/main/java/nl/han/ddoa/sorter/server/SortServer.java similarity index 100% rename from maven/multimodule/SorterServer/src/main/java/nl/han/ddoa/sorter/server/SortServer.java rename to examples/maven/multimodule/SorterServer/src/main/java/nl/han/ddoa/sorter/server/SortServer.java diff --git a/maven/multimodule/SorterShared/pom.xml b/examples/maven/multimodule/SorterShared/pom.xml similarity index 100% rename from maven/multimodule/SorterShared/pom.xml rename to examples/maven/multimodule/SorterShared/pom.xml diff --git a/maven/multimodule/SorterShared/src/main/java/nl/han/ddoa/sorter/algorithms/JavaSorter.java b/examples/maven/multimodule/SorterShared/src/main/java/nl/han/ddoa/sorter/algorithms/JavaSorter.java similarity index 100% rename from maven/multimodule/SorterShared/src/main/java/nl/han/ddoa/sorter/algorithms/JavaSorter.java rename to examples/maven/multimodule/SorterShared/src/main/java/nl/han/ddoa/sorter/algorithms/JavaSorter.java diff --git a/maven/multimodule/SorterShared/src/main/java/nl/han/ddoa/sorter/algorithms/SortFactory.java b/examples/maven/multimodule/SorterShared/src/main/java/nl/han/ddoa/sorter/algorithms/SortFactory.java similarity index 100% rename from maven/multimodule/SorterShared/src/main/java/nl/han/ddoa/sorter/algorithms/SortFactory.java rename to examples/maven/multimodule/SorterShared/src/main/java/nl/han/ddoa/sorter/algorithms/SortFactory.java diff --git a/maven/multimodule/SorterShared/src/main/java/nl/han/ddoa/sorter/algorithms/Sorter.java b/examples/maven/multimodule/SorterShared/src/main/java/nl/han/ddoa/sorter/algorithms/Sorter.java similarity index 100% rename from maven/multimodule/SorterShared/src/main/java/nl/han/ddoa/sorter/algorithms/Sorter.java rename to examples/maven/multimodule/SorterShared/src/main/java/nl/han/ddoa/sorter/algorithms/Sorter.java diff --git a/maven/multimodule/SorterShared/src/test/java/nl/han/ddoa/sorter/algorithms/JavaSorterTest.java b/examples/maven/multimodule/SorterShared/src/test/java/nl/han/ddoa/sorter/algorithms/JavaSorterTest.java similarity index 100% rename from maven/multimodule/SorterShared/src/test/java/nl/han/ddoa/sorter/algorithms/JavaSorterTest.java rename to examples/maven/multimodule/SorterShared/src/test/java/nl/han/ddoa/sorter/algorithms/JavaSorterTest.java diff --git a/maven/multimodule/pom.xml b/examples/maven/multimodule/pom.xml similarity index 100% rename from maven/multimodule/pom.xml rename to examples/maven/multimodule/pom.xml diff --git a/maven/singlemodule/README b/examples/maven/singlemodule/README similarity index 100% rename from maven/singlemodule/README rename to examples/maven/singlemodule/README diff --git a/maven/singlemodule/SortClientApp/.classpath b/examples/maven/singlemodule/SortClientApp/.classpath similarity index 100% rename from maven/singlemodule/SortClientApp/.classpath rename to examples/maven/singlemodule/SortClientApp/.classpath diff --git a/maven/singlemodule/SortClientApp/.project b/examples/maven/singlemodule/SortClientApp/.project similarity index 100% rename from maven/singlemodule/SortClientApp/.project rename to examples/maven/singlemodule/SortClientApp/.project diff --git a/maven/singlemodule/SortClientApp/SomeSimpleApp.ipr b/examples/maven/singlemodule/SortClientApp/SomeSimpleApp.ipr similarity index 100% rename from maven/singlemodule/SortClientApp/SomeSimpleApp.ipr rename to examples/maven/singlemodule/SortClientApp/SomeSimpleApp.ipr diff --git a/maven/singlemodule/SortClientApp/SomeSimpleApp.iws b/examples/maven/singlemodule/SortClientApp/SomeSimpleApp.iws similarity index 100% rename from maven/singlemodule/SortClientApp/SomeSimpleApp.iws rename to examples/maven/singlemodule/SortClientApp/SomeSimpleApp.iws diff --git a/maven/singlemodule/SortClientApp/pom.xml b/examples/maven/singlemodule/SortClientApp/pom.xml similarity index 100% rename from maven/singlemodule/SortClientApp/pom.xml rename to examples/maven/singlemodule/SortClientApp/pom.xml diff --git a/maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/ListGenerator.java b/examples/maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/ListGenerator.java similarity index 100% rename from maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/ListGenerator.java rename to examples/maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/ListGenerator.java diff --git a/maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/ListLogger.java b/examples/maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/ListLogger.java similarity index 100% rename from maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/ListLogger.java rename to examples/maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/ListLogger.java diff --git a/maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/SortClient.java b/examples/maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/SortClient.java similarity index 100% rename from maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/SortClient.java rename to examples/maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/SortClient.java diff --git a/maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/SortServiceFinder.java b/examples/maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/SortServiceFinder.java similarity index 100% rename from maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/SortServiceFinder.java rename to examples/maven/singlemodule/SortClientApp/src/main/java/nl/ica/ddoa/maven/example/SortServiceFinder.java diff --git a/maven/singlemodule/SortClientApp/src/test/java/nl/ica/ddoa/maven/example/ListGeneratorTest.java b/examples/maven/singlemodule/SortClientApp/src/test/java/nl/ica/ddoa/maven/example/ListGeneratorTest.java similarity index 100% rename from maven/singlemodule/SortClientApp/src/test/java/nl/ica/ddoa/maven/example/ListGeneratorTest.java rename to examples/maven/singlemodule/SortClientApp/src/test/java/nl/ica/ddoa/maven/example/ListGeneratorTest.java diff --git a/maven/singlemodule/SortClientApp/src/test/java/nl/ica/ddoa/maven/example/SortClientTest.java b/examples/maven/singlemodule/SortClientApp/src/test/java/nl/ica/ddoa/maven/example/SortClientTest.java similarity index 100% rename from maven/singlemodule/SortClientApp/src/test/java/nl/ica/ddoa/maven/example/SortClientTest.java rename to examples/maven/singlemodule/SortClientApp/src/test/java/nl/ica/ddoa/maven/example/SortClientTest.java diff --git a/maven/singlemodule/SortServerApp/SorterApp-ejb/build.xml b/examples/maven/singlemodule/SortServerApp/SorterApp-ejb/build.xml similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-ejb/build.xml rename to examples/maven/singlemodule/SortServerApp/SorterApp-ejb/build.xml diff --git a/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/ant-deploy.xml b/examples/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/ant-deploy.xml similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/ant-deploy.xml rename to examples/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/ant-deploy.xml diff --git a/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/build-impl.xml b/examples/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/build-impl.xml similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/build-impl.xml rename to examples/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/build-impl.xml diff --git a/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/genfiles.properties b/examples/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/genfiles.properties similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/genfiles.properties rename to examples/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/genfiles.properties diff --git a/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/private/private.properties b/examples/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/private/private.properties similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/private/private.properties rename to examples/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/private/private.properties diff --git a/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/private/private.xml b/examples/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/private/private.xml similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/private/private.xml rename to examples/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/private/private.xml diff --git a/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/project.properties b/examples/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/project.properties similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/project.properties rename to examples/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/project.properties diff --git a/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/project.xml b/examples/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/project.xml similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/project.xml rename to examples/maven/singlemodule/SortServerApp/SorterApp-ejb/nbproject/project.xml diff --git a/maven/singlemodule/SortServerApp/SorterApp-ejb/src/conf/MANIFEST.MF b/examples/maven/singlemodule/SortServerApp/SorterApp-ejb/src/conf/MANIFEST.MF similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-ejb/src/conf/MANIFEST.MF rename to examples/maven/singlemodule/SortServerApp/SorterApp-ejb/src/conf/MANIFEST.MF diff --git a/maven/singlemodule/SortServerApp/SorterApp-ejb/src/java/nl/ica/ddoa/sorter/ejb/Sorter.java b/examples/maven/singlemodule/SortServerApp/SorterApp-ejb/src/java/nl/ica/ddoa/sorter/ejb/Sorter.java similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-ejb/src/java/nl/ica/ddoa/sorter/ejb/Sorter.java rename to examples/maven/singlemodule/SortServerApp/SorterApp-ejb/src/java/nl/ica/ddoa/sorter/ejb/Sorter.java diff --git a/maven/singlemodule/SortServerApp/SorterApp-ejb/src/java/nl/ica/ddoa/sorter/ejb/SorterLocal.java b/examples/maven/singlemodule/SortServerApp/SorterApp-ejb/src/java/nl/ica/ddoa/sorter/ejb/SorterLocal.java similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-ejb/src/java/nl/ica/ddoa/sorter/ejb/SorterLocal.java rename to examples/maven/singlemodule/SortServerApp/SorterApp-ejb/src/java/nl/ica/ddoa/sorter/ejb/SorterLocal.java diff --git a/maven/singlemodule/SortServerApp/SorterApp-war/build.xml b/examples/maven/singlemodule/SortServerApp/SorterApp-war/build.xml similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-war/build.xml rename to examples/maven/singlemodule/SortServerApp/SorterApp-war/build.xml diff --git a/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/ant-deploy.xml b/examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/ant-deploy.xml similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-war/nbproject/ant-deploy.xml rename to examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/ant-deploy.xml diff --git a/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/build-impl.xml b/examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/build-impl.xml similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-war/nbproject/build-impl.xml rename to examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/build-impl.xml diff --git a/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/genfiles.properties b/examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/genfiles.properties similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-war/nbproject/genfiles.properties rename to examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/genfiles.properties diff --git a/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/jax-ws.xml b/examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/jax-ws.xml similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-war/nbproject/jax-ws.xml rename to examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/jax-ws.xml diff --git a/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/jaxws-build.xml b/examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/jaxws-build.xml similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-war/nbproject/jaxws-build.xml rename to examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/jaxws-build.xml diff --git a/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/private/private.properties b/examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/private/private.properties similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-war/nbproject/private/private.properties rename to examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/private/private.properties diff --git a/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/project.properties b/examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/project.properties similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-war/nbproject/project.properties rename to examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/project.properties diff --git a/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/project.xml b/examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/project.xml similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-war/nbproject/project.xml rename to examples/maven/singlemodule/SortServerApp/SorterApp-war/nbproject/project.xml diff --git a/maven/singlemodule/SortServerApp/SorterApp-war/src/conf/MANIFEST.MF b/examples/maven/singlemodule/SortServerApp/SorterApp-war/src/conf/MANIFEST.MF similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-war/src/conf/MANIFEST.MF rename to examples/maven/singlemodule/SortServerApp/SorterApp-war/src/conf/MANIFEST.MF diff --git a/maven/singlemodule/SortServerApp/SorterApp-war/src/java/nl/ica/ddoa/sorter/ws/SortService.java b/examples/maven/singlemodule/SortServerApp/SorterApp-war/src/java/nl/ica/ddoa/sorter/ws/SortService.java similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-war/src/java/nl/ica/ddoa/sorter/ws/SortService.java rename to examples/maven/singlemodule/SortServerApp/SorterApp-war/src/java/nl/ica/ddoa/sorter/ws/SortService.java diff --git a/maven/singlemodule/SortServerApp/SorterApp-war/web/WEB-INF/web.xml b/examples/maven/singlemodule/SortServerApp/SorterApp-war/web/WEB-INF/web.xml similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-war/web/WEB-INF/web.xml rename to examples/maven/singlemodule/SortServerApp/SorterApp-war/web/WEB-INF/web.xml diff --git a/maven/singlemodule/SortServerApp/SorterApp-war/web/index.jsp b/examples/maven/singlemodule/SortServerApp/SorterApp-war/web/index.jsp similarity index 100% rename from maven/singlemodule/SortServerApp/SorterApp-war/web/index.jsp rename to examples/maven/singlemodule/SortServerApp/SorterApp-war/web/index.jsp diff --git a/maven/singlemodule/SortServerApp/build.xml b/examples/maven/singlemodule/SortServerApp/build.xml similarity index 100% rename from maven/singlemodule/SortServerApp/build.xml rename to examples/maven/singlemodule/SortServerApp/build.xml diff --git a/maven/singlemodule/SortServerApp/nbproject/ant-deploy.xml b/examples/maven/singlemodule/SortServerApp/nbproject/ant-deploy.xml similarity index 100% rename from maven/singlemodule/SortServerApp/nbproject/ant-deploy.xml rename to examples/maven/singlemodule/SortServerApp/nbproject/ant-deploy.xml diff --git a/maven/singlemodule/SortServerApp/nbproject/build-impl.xml b/examples/maven/singlemodule/SortServerApp/nbproject/build-impl.xml similarity index 100% rename from maven/singlemodule/SortServerApp/nbproject/build-impl.xml rename to examples/maven/singlemodule/SortServerApp/nbproject/build-impl.xml diff --git a/maven/singlemodule/SortServerApp/nbproject/genfiles.properties b/examples/maven/singlemodule/SortServerApp/nbproject/genfiles.properties similarity index 100% rename from maven/singlemodule/SortServerApp/nbproject/genfiles.properties rename to examples/maven/singlemodule/SortServerApp/nbproject/genfiles.properties diff --git a/maven/singlemodule/SortServerApp/nbproject/private/private.properties b/examples/maven/singlemodule/SortServerApp/nbproject/private/private.properties similarity index 100% rename from maven/singlemodule/SortServerApp/nbproject/private/private.properties rename to examples/maven/singlemodule/SortServerApp/nbproject/private/private.properties diff --git a/maven/singlemodule/SortServerApp/nbproject/project.properties b/examples/maven/singlemodule/SortServerApp/nbproject/project.properties similarity index 100% rename from maven/singlemodule/SortServerApp/nbproject/project.properties rename to examples/maven/singlemodule/SortServerApp/nbproject/project.properties diff --git a/maven/singlemodule/SortServerApp/nbproject/project.xml b/examples/maven/singlemodule/SortServerApp/nbproject/project.xml similarity index 100% rename from maven/singlemodule/SortServerApp/nbproject/project.xml rename to examples/maven/singlemodule/SortServerApp/nbproject/project.xml diff --git a/maven/singlemodule/SortServerApp/src/conf/MANIFEST.MF b/examples/maven/singlemodule/SortServerApp/src/conf/MANIFEST.MF similarity index 100% rename from maven/singlemodule/SortServerApp/src/conf/MANIFEST.MF rename to examples/maven/singlemodule/SortServerApp/src/conf/MANIFEST.MF diff --git a/maven/singlemodule/maven-demo.script b/examples/maven/singlemodule/maven-demo.script similarity index 100% rename from maven/singlemodule/maven-demo.script rename to examples/maven/singlemodule/maven-demo.script diff --git a/examples/rmi/.DS_Store b/examples/rmi/.DS_Store new file mode 100644 index 0000000..34ad315 Binary files /dev/null and b/examples/rmi/.DS_Store differ diff --git a/examples/rmi/RMISortingExample/.DS_Store b/examples/rmi/RMISortingExample/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/examples/rmi/RMISortingExample/.DS_Store differ diff --git a/rmi/RMISortingExample/.classpath b/examples/rmi/RMISortingExample/.classpath similarity index 100% rename from rmi/RMISortingExample/.classpath rename to examples/rmi/RMISortingExample/.classpath diff --git a/examples/rmi/RMISortingExample/.idea/.name b/examples/rmi/RMISortingExample/.idea/.name new file mode 100644 index 0000000..7f5456f --- /dev/null +++ b/examples/rmi/RMISortingExample/.idea/.name @@ -0,0 +1 @@ +RMI Sorting \ No newline at end of file diff --git a/examples/rmi/RMISortingExample/.idea/compiler.xml b/examples/rmi/RMISortingExample/.idea/compiler.xml new file mode 100644 index 0000000..a4feac1 --- /dev/null +++ b/examples/rmi/RMISortingExample/.idea/compiler.xml @@ -0,0 +1,29 @@ + + + + + \ No newline at end of file diff --git a/examples/rmi/RMISortingExample/.idea/copyright/profiles_settings.xml b/examples/rmi/RMISortingExample/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/examples/rmi/RMISortingExample/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/exercises/solid/1-SOLID-SRP/.idea/encodings.xml b/examples/rmi/RMISortingExample/.idea/encodings.xml similarity index 80% rename from exercises/solid/1-SOLID-SRP/.idea/encodings.xml rename to examples/rmi/RMISortingExample/.idea/encodings.xml index 2f1a13c..d44269f 100644 --- a/exercises/solid/1-SOLID-SRP/.idea/encodings.xml +++ b/examples/rmi/RMISortingExample/.idea/encodings.xml @@ -2,7 +2,5 @@ - - - + \ No newline at end of file diff --git a/exercises/solid/1-SOLID-SRP/.idea/libraries/Maven__junit_junit_4_11.xml b/examples/rmi/RMISortingExample/.idea/libraries/Maven__junit_junit_4_11.xml similarity index 100% rename from exercises/solid/1-SOLID-SRP/.idea/libraries/Maven__junit_junit_4_11.xml rename to examples/rmi/RMISortingExample/.idea/libraries/Maven__junit_junit_4_11.xml diff --git a/exercises/solid/1-SOLID-SRP/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/examples/rmi/RMISortingExample/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml similarity index 100% rename from exercises/solid/1-SOLID-SRP/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml rename to examples/rmi/RMISortingExample/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml diff --git a/examples/rmi/RMISortingExample/.idea/misc.xml b/examples/rmi/RMISortingExample/.idea/misc.xml new file mode 100644 index 0000000..af0bc21 --- /dev/null +++ b/examples/rmi/RMISortingExample/.idea/misc.xml @@ -0,0 +1,261 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Android + + + Android Lint + + + Java language level migration aids + + + + + Abstraction issues + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + + + + + + 1.7 + + + + + + + + \ No newline at end of file diff --git a/examples/rmi/RMISortingExample/.idea/modules.xml b/examples/rmi/RMISortingExample/.idea/modules.xml new file mode 100644 index 0000000..2f651fa --- /dev/null +++ b/examples/rmi/RMISortingExample/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/examples/rmi/RMISortingExample/.idea/scopes/scope_settings.xml b/examples/rmi/RMISortingExample/.idea/scopes/scope_settings.xml new file mode 100644 index 0000000..922003b --- /dev/null +++ b/examples/rmi/RMISortingExample/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/examples/rmi/RMISortingExample/.idea/vcs.xml b/examples/rmi/RMISortingExample/.idea/vcs.xml new file mode 100644 index 0000000..b2bdec2 --- /dev/null +++ b/examples/rmi/RMISortingExample/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/examples/rmi/RMISortingExample/.idea/workspace.xml b/examples/rmi/RMISortingExample/.idea/workspace.xml new file mode 100644 index 0000000..c1f887b --- /dev/null +++ b/examples/rmi/RMISortingExample/.idea/workspace.xml @@ -0,0 +1,781 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + 1423414424842 + + + 1423414701220 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rmi/RMISortingExample/.project b/examples/rmi/RMISortingExample/.project similarity index 100% rename from rmi/RMISortingExample/.project rename to examples/rmi/RMISortingExample/.project diff --git a/rmi/RMISortingExample/.settings/org.eclipse.jdt.core.prefs b/examples/rmi/RMISortingExample/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from rmi/RMISortingExample/.settings/org.eclipse.jdt.core.prefs rename to examples/rmi/RMISortingExample/.settings/org.eclipse.jdt.core.prefs diff --git a/examples/rmi/RMISortingExample/RMISortingExample.iml b/examples/rmi/RMISortingExample/RMISortingExample.iml new file mode 100644 index 0000000..fda3f3a --- /dev/null +++ b/examples/rmi/RMISortingExample/RMISortingExample.iml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rmi/RMISortingExample/ddoa.policy b/examples/rmi/RMISortingExample/ddoa.policy similarity index 100% rename from rmi/RMISortingExample/ddoa.policy rename to examples/rmi/RMISortingExample/ddoa.policy diff --git a/examples/rmi/RMISortingExample/src/.DS_Store b/examples/rmi/RMISortingExample/src/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/examples/rmi/RMISortingExample/src/.DS_Store differ diff --git a/examples/rmi/RMISortingExample/src/main/java/nl/ica/ddoa/rmi/sorter/Bekertje.java b/examples/rmi/RMISortingExample/src/main/java/nl/ica/ddoa/rmi/sorter/Bekertje.java new file mode 100644 index 0000000..76f369c --- /dev/null +++ b/examples/rmi/RMISortingExample/src/main/java/nl/ica/ddoa/rmi/sorter/Bekertje.java @@ -0,0 +1,29 @@ +package nl.ica.ddoa.rmi.sorter; + +import java.io.Serializable; + +public class Bekertje implements Comparable, Serializable { + private int inhoud; + + @Override + public String toString() { + return "Bekertje{" + + "inhoud=" + inhoud + + '}'; + } + + public Bekertje(int inhoud) + { + this.inhoud = inhoud; + } + + + @Override + public int compareTo(Object o) { + if (o instanceof Bekertje) { + Bekertje b = (Bekertje) o; + return b.inhoud - this.inhoud; + } + throw new IllegalArgumentException(""); + } +} diff --git a/rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/ISorter.java b/examples/rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/ISorter.java similarity index 100% rename from rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/ISorter.java rename to examples/rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/ISorter.java diff --git a/rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/SortClient.java b/examples/rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/SortClient.java similarity index 100% rename from rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/SortClient.java rename to examples/rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/SortClient.java diff --git a/rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/SortServer.java b/examples/rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/SortServer.java similarity index 100% rename from rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/SortServer.java rename to examples/rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/SortServer.java diff --git a/rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/Sorter.java b/examples/rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/Sorter.java similarity index 100% rename from rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/Sorter.java rename to examples/rmi/RMISortingExample/src/nl/ica/ddoa/rmi/sorter/Sorter.java diff --git a/examples/rmi/RMISortingExample/target/MANIFEST.MF b/examples/rmi/RMISortingExample/target/MANIFEST.MF new file mode 100644 index 0000000..e27e6ca --- /dev/null +++ b/examples/rmi/RMISortingExample/target/MANIFEST.MF @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +Build-Jdk: 1.8.0_25 +Built-By: mdkr +Created-By: IntelliJ IDEA + diff --git a/rmi/RMISortingExample/test/nl/ica/ddoa/rmi/sorter/SorterTest.java b/examples/rmi/RMISortingExample/test/nl/ica/ddoa/rmi/sorter/SorterTest.java similarity index 100% rename from rmi/RMISortingExample/test/nl/ica/ddoa/rmi/sorter/SorterTest.java rename to examples/rmi/RMISortingExample/test/nl/ica/ddoa/rmi/sorter/SorterTest.java diff --git a/examples/rmi/RMISortingExampleResults/.DS_Store b/examples/rmi/RMISortingExampleResults/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/examples/rmi/RMISortingExampleResults/.DS_Store differ diff --git a/rmi/RMISortingExampleResults/.classpath b/examples/rmi/RMISortingExampleResults/.classpath similarity index 100% rename from rmi/RMISortingExampleResults/.classpath rename to examples/rmi/RMISortingExampleResults/.classpath diff --git a/examples/rmi/RMISortingExampleResults/.idea/.name b/examples/rmi/RMISortingExampleResults/.idea/.name new file mode 100644 index 0000000..7f5456f --- /dev/null +++ b/examples/rmi/RMISortingExampleResults/.idea/.name @@ -0,0 +1 @@ +RMI Sorting \ No newline at end of file diff --git a/examples/rmi/RMISortingExampleResults/.idea/compiler.xml b/examples/rmi/RMISortingExampleResults/.idea/compiler.xml new file mode 100644 index 0000000..9aa773f --- /dev/null +++ b/examples/rmi/RMISortingExampleResults/.idea/compiler.xml @@ -0,0 +1,29 @@ + + + + + \ No newline at end of file diff --git a/examples/rmi/RMISortingExampleResults/.idea/copyright/profiles_settings.xml b/examples/rmi/RMISortingExampleResults/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/examples/rmi/RMISortingExampleResults/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/exercises/solid/3-SOLID-LSP/.idea/encodings.xml b/examples/rmi/RMISortingExampleResults/.idea/encodings.xml similarity index 80% rename from exercises/solid/3-SOLID-LSP/.idea/encodings.xml rename to examples/rmi/RMISortingExampleResults/.idea/encodings.xml index 2f1a13c..d44269f 100644 --- a/exercises/solid/3-SOLID-LSP/.idea/encodings.xml +++ b/examples/rmi/RMISortingExampleResults/.idea/encodings.xml @@ -2,7 +2,5 @@ - - - + \ No newline at end of file diff --git a/examples/rmi/RMISortingExampleResults/.idea/misc.xml b/examples/rmi/RMISortingExampleResults/.idea/misc.xml new file mode 100644 index 0000000..9be0ff0 --- /dev/null +++ b/examples/rmi/RMISortingExampleResults/.idea/misc.xml @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Android + + + Android Lint + + + Java language level migration aids + + + + + Abstraction issues + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + + + + + + 1.7 + + + + + + + + \ No newline at end of file diff --git a/examples/rmi/RMISortingExampleResults/.idea/modules.xml b/examples/rmi/RMISortingExampleResults/.idea/modules.xml new file mode 100644 index 0000000..955308d --- /dev/null +++ b/examples/rmi/RMISortingExampleResults/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/examples/rmi/RMISortingExampleResults/.idea/scopes/scope_settings.xml b/examples/rmi/RMISortingExampleResults/.idea/scopes/scope_settings.xml new file mode 100644 index 0000000..922003b --- /dev/null +++ b/examples/rmi/RMISortingExampleResults/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/examples/rmi/RMISortingExampleResults/.idea/vcs.xml b/examples/rmi/RMISortingExampleResults/.idea/vcs.xml new file mode 100644 index 0000000..b2bdec2 --- /dev/null +++ b/examples/rmi/RMISortingExampleResults/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/examples/rmi/RMISortingExampleResults/.idea/workspace.xml b/examples/rmi/RMISortingExampleResults/.idea/workspace.xml new file mode 100644 index 0000000..62de03b --- /dev/null +++ b/examples/rmi/RMISortingExampleResults/.idea/workspace.xml @@ -0,0 +1,542 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + + 1423414812050 + + + 1423414975544 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rmi/RMISortingExampleResults/.project b/examples/rmi/RMISortingExampleResults/.project similarity index 100% rename from rmi/RMISortingExampleResults/.project rename to examples/rmi/RMISortingExampleResults/.project diff --git a/examples/rmi/RMISortingExampleResults/RMISortingExampleResults.iml b/examples/rmi/RMISortingExampleResults/RMISortingExampleResults.iml new file mode 100644 index 0000000..5a277e6 --- /dev/null +++ b/examples/rmi/RMISortingExampleResults/RMISortingExampleResults.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/rmi/RMISortingExampleResults/src/.DS_Store b/examples/rmi/RMISortingExampleResults/src/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/examples/rmi/RMISortingExampleResults/src/.DS_Store differ diff --git a/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/ISorter.java b/examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/ISorter.java similarity index 100% rename from rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/ISorter.java rename to examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/ISorter.java diff --git a/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/SortClient.java b/examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/SortClient.java similarity index 100% rename from rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/SortClient.java rename to examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/SortClient.java diff --git a/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/SortServer.java b/examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/SortServer.java similarity index 100% rename from rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/SortServer.java rename to examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/SortServer.java diff --git a/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/Sorter.java b/examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/Sorter.java similarity index 100% rename from rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/Sorter.java rename to examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withoutplugin/Sorter.java diff --git a/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/ISorter.java b/examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/ISorter.java similarity index 100% rename from rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/ISorter.java rename to examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/ISorter.java diff --git a/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/SortClient.java b/examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/SortClient.java similarity index 100% rename from rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/SortClient.java rename to examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/SortClient.java diff --git a/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/SortServer.java b/examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/SortServer.java similarity index 100% rename from rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/SortServer.java rename to examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/SortServer.java diff --git a/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/Sorter.java b/examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/Sorter.java similarity index 100% rename from rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/Sorter.java rename to examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/sorter/withplugin/Sorter.java diff --git a/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/IntfTim.java b/examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/IntfTim.java similarity index 100% rename from rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/IntfTim.java rename to examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/IntfTim.java diff --git a/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/IntfTom.java b/examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/IntfTom.java similarity index 100% rename from rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/IntfTom.java rename to examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/IntfTom.java diff --git a/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/Tim.java b/examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/Tim.java similarity index 100% rename from rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/Tim.java rename to examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/Tim.java diff --git a/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/Tom.java b/examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/Tom.java similarity index 100% rename from rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/Tom.java rename to examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/Tom.java diff --git a/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/TomServer.java b/examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/TomServer.java similarity index 100% rename from rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/TomServer.java rename to examples/rmi/RMISortingExampleResults/src/nl/ica/ddoa/example/rmi/timtom/TomServer.java diff --git a/rmi/RMISortingExampleResults/test/nl/ica/ddoa/rmi/sorter/SorterTest.java b/examples/rmi/RMISortingExampleResults/test/nl/ica/ddoa/rmi/sorter/SorterTest.java similarity index 100% rename from rmi/RMISortingExampleResults/test/nl/ica/ddoa/rmi/sorter/SorterTest.java rename to examples/rmi/RMISortingExampleResults/test/nl/ica/ddoa/rmi/sorter/SorterTest.java diff --git a/examples/threading/.DS_Store b/examples/threading/.DS_Store new file mode 100644 index 0000000..214c6dc Binary files /dev/null and b/examples/threading/.DS_Store differ diff --git a/threading/ThreadingExample/.classpath b/examples/threading/ThreadingExample/.classpath similarity index 100% rename from threading/ThreadingExample/.classpath rename to examples/threading/ThreadingExample/.classpath diff --git a/examples/threading/ThreadingExample/.idea/.name b/examples/threading/ThreadingExample/.idea/.name new file mode 100644 index 0000000..b22741c --- /dev/null +++ b/examples/threading/ThreadingExample/.idea/.name @@ -0,0 +1 @@ +Threading \ No newline at end of file diff --git a/examples/threading/ThreadingExample/.idea/compiler.xml b/examples/threading/ThreadingExample/.idea/compiler.xml new file mode 100644 index 0000000..fe02c00 --- /dev/null +++ b/examples/threading/ThreadingExample/.idea/compiler.xml @@ -0,0 +1,29 @@ + + + + + \ No newline at end of file diff --git a/examples/threading/ThreadingExample/.idea/copyright/profiles_settings.xml b/examples/threading/ThreadingExample/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/examples/threading/ThreadingExample/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/exercises/solid/2-SOLID-OCP/.idea/encodings.xml b/examples/threading/ThreadingExample/.idea/encodings.xml similarity index 80% rename from exercises/solid/2-SOLID-OCP/.idea/encodings.xml rename to examples/threading/ThreadingExample/.idea/encodings.xml index 2f1a13c..d44269f 100644 --- a/exercises/solid/2-SOLID-OCP/.idea/encodings.xml +++ b/examples/threading/ThreadingExample/.idea/encodings.xml @@ -2,7 +2,5 @@ - - - + \ No newline at end of file diff --git a/exercises/solid/2-SOLID-OCP/.idea/libraries/Maven__junit_junit_4_11.xml b/examples/threading/ThreadingExample/.idea/libraries/Maven__junit_junit_4_11.xml similarity index 100% rename from exercises/solid/2-SOLID-OCP/.idea/libraries/Maven__junit_junit_4_11.xml rename to examples/threading/ThreadingExample/.idea/libraries/Maven__junit_junit_4_11.xml diff --git a/exercises/solid/2-SOLID-OCP/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/examples/threading/ThreadingExample/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml similarity index 100% rename from exercises/solid/2-SOLID-OCP/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml rename to examples/threading/ThreadingExample/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml diff --git a/examples/threading/ThreadingExample/.idea/misc.xml b/examples/threading/ThreadingExample/.idea/misc.xml new file mode 100644 index 0000000..a96f840 --- /dev/null +++ b/examples/threading/ThreadingExample/.idea/misc.xml @@ -0,0 +1,261 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Android + + + Android Lint + + + Java language level migration aids + + + + + Abstraction issues + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + + + + + + 1.7 + + + + + + + + \ No newline at end of file diff --git a/exercises/solid/2-SOLID-OCP/.idea/modules.xml b/examples/threading/ThreadingExample/.idea/modules.xml similarity index 56% rename from exercises/solid/2-SOLID-OCP/.idea/modules.xml rename to examples/threading/ThreadingExample/.idea/modules.xml index 437e952..67b0f22 100644 --- a/exercises/solid/2-SOLID-OCP/.idea/modules.xml +++ b/examples/threading/ThreadingExample/.idea/modules.xml @@ -2,8 +2,7 @@ - + - - + \ No newline at end of file diff --git a/examples/threading/ThreadingExample/.idea/scopes/scope_settings.xml b/examples/threading/ThreadingExample/.idea/scopes/scope_settings.xml new file mode 100644 index 0000000..922003b --- /dev/null +++ b/examples/threading/ThreadingExample/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/examples/threading/ThreadingExample/.idea/vcs.xml b/examples/threading/ThreadingExample/.idea/vcs.xml new file mode 100644 index 0000000..b2bdec2 --- /dev/null +++ b/examples/threading/ThreadingExample/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/examples/threading/ThreadingExample/.idea/workspace.xml b/examples/threading/ThreadingExample/.idea/workspace.xml new file mode 100644 index 0000000..9047937 --- /dev/null +++ b/examples/threading/ThreadingExample/.idea/workspace.xml @@ -0,0 +1,898 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + 1423079971383 + + + 1423082939237 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/threading/ThreadingExample/.project b/examples/threading/ThreadingExample/.project similarity index 100% rename from threading/ThreadingExample/.project rename to examples/threading/ThreadingExample/.project diff --git a/examples/threading/ThreadingExample/src/.DS_Store b/examples/threading/ThreadingExample/src/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/examples/threading/ThreadingExample/src/.DS_Store differ diff --git a/examples/threading/ThreadingExample/src/main/.DS_Store b/examples/threading/ThreadingExample/src/main/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/examples/threading/ThreadingExample/src/main/.DS_Store differ diff --git a/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/Consumer.java b/examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/Consumer.java similarity index 100% rename from threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/Consumer.java rename to examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/Consumer.java diff --git a/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/CubbyHole.java b/examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/CubbyHole.java similarity index 100% rename from threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/CubbyHole.java rename to examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/CubbyHole.java diff --git a/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/Producer.java b/examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/Producer.java similarity index 100% rename from threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/Producer.java rename to examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/Producer.java diff --git a/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/Unsynced.java b/examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/Unsynced.java similarity index 100% rename from threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/Unsynced.java rename to examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/cubbyhole/Unsynced.java diff --git a/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/dating/Dating.java b/examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/dating/Dating.java similarity index 100% rename from threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/dating/Dating.java rename to examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/dating/Dating.java diff --git a/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/dating/EvenGetallen.java b/examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/dating/EvenGetallen.java similarity index 100% rename from threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/dating/EvenGetallen.java rename to examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/dating/EvenGetallen.java diff --git a/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/dating/EvenGetallenEnDating.java b/examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/dating/EvenGetallenEnDating.java similarity index 100% rename from threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/dating/EvenGetallenEnDating.java rename to examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/dating/EvenGetallenEnDating.java diff --git a/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/racer/Racer.java b/examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/racer/Racer.java similarity index 100% rename from threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/racer/Racer.java rename to examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/racer/Racer.java diff --git a/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/racer/RandomRacer.java b/examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/racer/RandomRacer.java similarity index 100% rename from threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/racer/RandomRacer.java rename to examples/threading/ThreadingExample/src/nl/han/ddoa/dda/example/base/racer/RandomRacer.java diff --git a/examples/threading/ThreadingExample/target/MANIFEST.MF b/examples/threading/ThreadingExample/target/MANIFEST.MF new file mode 100644 index 0000000..e27e6ca --- /dev/null +++ b/examples/threading/ThreadingExample/target/MANIFEST.MF @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +Build-Jdk: 1.8.0_25 +Built-By: mdkr +Created-By: IntelliJ IDEA + diff --git a/examples/threading/ThreadingExampleResults/.DS_Store b/examples/threading/ThreadingExampleResults/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/examples/threading/ThreadingExampleResults/.DS_Store differ diff --git a/threading/ThreadingExampleResults/.classpath b/examples/threading/ThreadingExampleResults/.classpath similarity index 100% rename from threading/ThreadingExampleResults/.classpath rename to examples/threading/ThreadingExampleResults/.classpath diff --git a/examples/threading/ThreadingExampleResults/.idea/.name b/examples/threading/ThreadingExampleResults/.idea/.name new file mode 100644 index 0000000..b22741c --- /dev/null +++ b/examples/threading/ThreadingExampleResults/.idea/.name @@ -0,0 +1 @@ +Threading \ No newline at end of file diff --git a/examples/threading/ThreadingExampleResults/.idea/compiler.xml b/examples/threading/ThreadingExampleResults/.idea/compiler.xml new file mode 100644 index 0000000..fe02c00 --- /dev/null +++ b/examples/threading/ThreadingExampleResults/.idea/compiler.xml @@ -0,0 +1,29 @@ + + + + + \ No newline at end of file diff --git a/examples/threading/ThreadingExampleResults/.idea/copyright/profiles_settings.xml b/examples/threading/ThreadingExampleResults/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/examples/threading/ThreadingExampleResults/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/exercises/solid/4-SOLID-ISP/.idea/encodings.xml b/examples/threading/ThreadingExampleResults/.idea/encodings.xml similarity index 80% rename from exercises/solid/4-SOLID-ISP/.idea/encodings.xml rename to examples/threading/ThreadingExampleResults/.idea/encodings.xml index 2f1a13c..d44269f 100644 --- a/exercises/solid/4-SOLID-ISP/.idea/encodings.xml +++ b/examples/threading/ThreadingExampleResults/.idea/encodings.xml @@ -2,7 +2,5 @@ - - - + \ No newline at end of file diff --git a/exercises/solid/3-SOLID-LSP/.idea/libraries/Maven__junit_junit_4_11.xml b/examples/threading/ThreadingExampleResults/.idea/libraries/Maven__junit_junit_4_11.xml similarity index 100% rename from exercises/solid/3-SOLID-LSP/.idea/libraries/Maven__junit_junit_4_11.xml rename to examples/threading/ThreadingExampleResults/.idea/libraries/Maven__junit_junit_4_11.xml diff --git a/exercises/solid/3-SOLID-LSP/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/examples/threading/ThreadingExampleResults/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml similarity index 100% rename from exercises/solid/3-SOLID-LSP/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml rename to examples/threading/ThreadingExampleResults/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml diff --git a/examples/threading/ThreadingExampleResults/.idea/misc.xml b/examples/threading/ThreadingExampleResults/.idea/misc.xml new file mode 100644 index 0000000..1a56ced --- /dev/null +++ b/examples/threading/ThreadingExampleResults/.idea/misc.xml @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Android + + + Android Lint + + + Java language level migration aids + + + + + Abstraction issues + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + + + + + + 1.7 + + + + + + + + \ No newline at end of file diff --git a/examples/threading/ThreadingExampleResults/.idea/modules.xml b/examples/threading/ThreadingExampleResults/.idea/modules.xml new file mode 100644 index 0000000..67b0f22 --- /dev/null +++ b/examples/threading/ThreadingExampleResults/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/examples/threading/ThreadingExampleResults/.idea/scopes/scope_settings.xml b/examples/threading/ThreadingExampleResults/.idea/scopes/scope_settings.xml new file mode 100644 index 0000000..922003b --- /dev/null +++ b/examples/threading/ThreadingExampleResults/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/examples/threading/ThreadingExampleResults/.idea/vcs.xml b/examples/threading/ThreadingExampleResults/.idea/vcs.xml new file mode 100644 index 0000000..b2bdec2 --- /dev/null +++ b/examples/threading/ThreadingExampleResults/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/examples/threading/ThreadingExampleResults/.idea/workspace.xml b/examples/threading/ThreadingExampleResults/.idea/workspace.xml new file mode 100644 index 0000000..1f4bead --- /dev/null +++ b/examples/threading/ThreadingExampleResults/.idea/workspace.xml @@ -0,0 +1,742 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + + 1423083026194 + + + 1423083793266 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/threading/ThreadingExampleResults/.project b/examples/threading/ThreadingExampleResults/.project similarity index 100% rename from threading/ThreadingExampleResults/.project rename to examples/threading/ThreadingExampleResults/.project diff --git a/examples/threading/ThreadingExampleResults/Threading.iml b/examples/threading/ThreadingExampleResults/Threading.iml new file mode 100644 index 0000000..fda3f3a --- /dev/null +++ b/examples/threading/ThreadingExampleResults/Threading.iml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/threading/ThreadingExampleResults/src/.DS_Store b/examples/threading/ThreadingExampleResults/src/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/examples/threading/ThreadingExampleResults/src/.DS_Store differ diff --git a/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/Consumer.java b/examples/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/Consumer.java similarity index 100% rename from threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/Consumer.java rename to examples/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/Consumer.java diff --git a/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/CubbyHole.java b/examples/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/CubbyHole.java similarity index 100% rename from threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/CubbyHole.java rename to examples/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/CubbyHole.java diff --git a/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/Producer.java b/examples/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/Producer.java similarity index 100% rename from threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/Producer.java rename to examples/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/Producer.java diff --git a/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/Synced.java b/examples/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/Synced.java similarity index 100% rename from threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/Synced.java rename to examples/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/cubbyhole/Synced.java diff --git a/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/dating/Dating.java b/examples/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/dating/Dating.java similarity index 100% rename from threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/dating/Dating.java rename to examples/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/dating/Dating.java diff --git a/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/dating/EvenGetallen.java b/examples/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/dating/EvenGetallen.java similarity index 100% rename from threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/dating/EvenGetallen.java rename to examples/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/dating/EvenGetallen.java diff --git a/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/dating/Getallen.java b/examples/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/dating/Getallen.java similarity index 100% rename from threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/dating/Getallen.java rename to examples/threading/ThreadingExampleResults/src/nl/han/ddoa/dda/example/uitwerking/dating/Getallen.java diff --git a/examples/threading/ThreadingExampleResults/target/MANIFEST.MF b/examples/threading/ThreadingExampleResults/target/MANIFEST.MF new file mode 100644 index 0000000..e27e6ca --- /dev/null +++ b/examples/threading/ThreadingExampleResults/target/MANIFEST.MF @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +Build-Jdk: 1.8.0_25 +Built-By: mdkr +Created-By: IntelliJ IDEA + diff --git a/threading/ThreadingExampleResults/test/nl/han/ddoa/dda/example/uitwerking/cubbyhole/CubbyHoleTest.java b/examples/threading/ThreadingExampleResults/test/nl/han/ddoa/dda/example/uitwerking/cubbyhole/CubbyHoleTest.java similarity index 100% rename from threading/ThreadingExampleResults/test/nl/han/ddoa/dda/example/uitwerking/cubbyhole/CubbyHoleTest.java rename to examples/threading/ThreadingExampleResults/test/nl/han/ddoa/dda/example/uitwerking/cubbyhole/CubbyHoleTest.java diff --git a/exercises/README.md b/exercises/README.md index 06bc258..6e85fc9 100644 --- a/exercises/README.md +++ b/exercises/README.md @@ -1,4 +1,4 @@ -This subdirectory contains the quickstart projects to do the exercises/workshops from the DEA course: +This subdirectory contains some results of the quickstart projects to do the exercises/workshops from the DEA course: * Bolanimatie (Threads) * VideoStore (Refactoring) * Kleurenmenger (Observer) diff --git a/exercises/amdahl/README.md b/exercises/amdahl/README.md new file mode 100644 index 0000000..f6d0f4b --- /dev/null +++ b/exercises/amdahl/README.md @@ -0,0 +1,7 @@ +Steps +----- +* Run mvn clean test to see that all tests pass. +* Run with coverage in your favourite IDE (native support for that in IntelliJ) and see that the coverage is 100% +* Run mvn clean test org.pitest:pitest-maven:mutationCoverage and open up the html-file in target/pit-reports/{date}. +You'll notice that we used a simple Maven plugin called pi-test that tries to modify our sourcecode to see if test cases still pass +(when they do, the tests do not match the sourcecode!). This is called [mutation testing](https://www.youtube.com/watch?v=aLAcvMI2VBI). \ No newline at end of file diff --git a/exercises/amdahl/pom.xml b/exercises/amdahl/pom.xml new file mode 100644 index 0000000..4fcf8e9 --- /dev/null +++ b/exercises/amdahl/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + + nl.oose.dea + Amdahl + 1.0-SNAPSHOT + + + + + org.pitest + pitest-maven + ${pitest.version} + + + nl.oose.dea.amdahl* + + + nl.oose.dea.amdahl* + + + + + + + + + junit + junit + 4.11 + + + org.pitest + pitest-maven + ${pitest.version} + + + + + 1.1.5 + + \ No newline at end of file diff --git a/exercises/amdahl/src/main/java/nl/oose/dea/amdahl/Amdahl.java b/exercises/amdahl/src/main/java/nl/oose/dea/amdahl/Amdahl.java new file mode 100644 index 0000000..fa1f283 --- /dev/null +++ b/exercises/amdahl/src/main/java/nl/oose/dea/amdahl/Amdahl.java @@ -0,0 +1,47 @@ +package nl.oose.dea.amdahl; + +public class Amdahl { + + + private int numberOfProcessors; + private double sequentialFactor; + + /** + * @param numberOfProcessors (value restricted to 0 and greater) + * @param sequentialFactor (value restricted between 0.0 and 1.0) + */ + public Amdahl(int numberOfProcessors, double sequentialFactor) { + handleNegativeProcessors(numberOfProcessors); + handleSequentialFactorOutOfRange(sequentialFactor); + + this.numberOfProcessors = numberOfProcessors; + this.sequentialFactor = sequentialFactor; + } + + public double calculateSpeedup() { + return ((double)numberOfProcessors)/(1+sequentialFactor*((double)numberOfProcessors-1)); + } + + public double calculateEfficiency() + { + return calculateSpeedup()/numberOfProcessors; + } + + private void handleSequentialFactorOutOfRange(double sequentialFactor) { + if (isInvalidSequentialFactor(sequentialFactor)) + throw new SequentialFactorOutOfRange("Sequentiele factor moet tussen 0 en 1 liggen"); + } + + private boolean isInvalidSequentialFactor(double sequentialFactor) { + return sequentialFactor < 0 || sequentialFactor > 1; + } + + private void handleNegativeProcessors(int numberOfProcessors) { + if (isInvalidNumberOfProcessors(numberOfProcessors)) + throw new NegativeNumberOfProcessors("Aantal processoren moet 0 of groter zijn"); + } + + private boolean isInvalidNumberOfProcessors(int numberOfProcessors) { + return numberOfProcessors < 0; + } +} diff --git a/exercises/amdahl/src/main/java/nl/oose/dea/amdahl/NegativeNumberOfProcessors.java b/exercises/amdahl/src/main/java/nl/oose/dea/amdahl/NegativeNumberOfProcessors.java new file mode 100644 index 0000000..917bf5b --- /dev/null +++ b/exercises/amdahl/src/main/java/nl/oose/dea/amdahl/NegativeNumberOfProcessors.java @@ -0,0 +1,7 @@ +package nl.oose.dea.amdahl; + +public class NegativeNumberOfProcessors extends RuntimeException { + public NegativeNumberOfProcessors(String message) { + super(message); + } +} diff --git a/exercises/amdahl/src/main/java/nl/oose/dea/amdahl/SequentialFactorOutOfRange.java b/exercises/amdahl/src/main/java/nl/oose/dea/amdahl/SequentialFactorOutOfRange.java new file mode 100644 index 0000000..a6faed4 --- /dev/null +++ b/exercises/amdahl/src/main/java/nl/oose/dea/amdahl/SequentialFactorOutOfRange.java @@ -0,0 +1,7 @@ +package nl.oose.dea.amdahl; + +public class SequentialFactorOutOfRange extends RuntimeException { + public SequentialFactorOutOfRange(String message) { + super(message); + } +} diff --git a/exercises/amdahl/src/test/java/nl/oose/dea/amdahl/AmdahlTest.java b/exercises/amdahl/src/test/java/nl/oose/dea/amdahl/AmdahlTest.java new file mode 100644 index 0000000..7c79235 --- /dev/null +++ b/exercises/amdahl/src/test/java/nl/oose/dea/amdahl/AmdahlTest.java @@ -0,0 +1,57 @@ +package nl.oose.dea.amdahl; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class AmdahlTest { + @Test(expected = NegativeNumberOfProcessors.class) + public void givenANegativeNumberOfProcessorsAnInstanceOfAmdahlCannotBeCreated() { + new Amdahl(-1,0); + } + + @Test(expected = SequentialFactorOutOfRange.class) + public void givenANegativeSequentialFactorAnInstanceOfAmdahlCannotBeCreated() { + new Amdahl(1,-1); + } + + @Test(expected = SequentialFactorOutOfRange.class) + public void givenASequentialFactorGreaterThanOneAnInstanceOfAmdahlCannotBeCreated() { + new Amdahl(1,2); + } + + @Test + public void givenANumberOfProcessorsOfZeroTheSpeedupIsAlwaysZero() { + assertEquals(0, new Amdahl(0, 0.5).calculateSpeedup(), 0); + } + + @Test + public void givenASequentialFactorOfOneTheSpeedupIsAlwaysConstant() { + long ONE = 1; + for(int i=1;i<10;i++) { + double d = new Amdahl(i, 1).calculateSpeedup(); + assertEquals(ONE, d, 0.01); + } + } + + @Test + public void givenASequentialFactorOfZeroTheSpeedupIsEqualToNumberOfProcessors() { + for(int i=1;i<10;i++) { + double d = new Amdahl(i, 0).calculateSpeedup(); + assertEquals(i, d, 0.01); + } + } + + @Test + public void givenValidParametersSpeedupReturnsFine() + { + double d = new Amdahl(10, 0.01).calculateSpeedup(); + assertEquals(9.174311926605505, d, 0.01); + } + + @Test + public void givenValidParametersEfficiencyReturnsFine() { + double d = new Amdahl(10, 0.01).calculateEfficiency(); + assertEquals(0.9174311926605505, d, 0.01); + } +} diff --git a/exercises/bolanimatie/pom.xml b/exercises/bolanimatie/pom.xml new file mode 100644 index 0000000..ecd2d46 --- /dev/null +++ b/exercises/bolanimatie/pom.xml @@ -0,0 +1,19 @@ + + + 4.0.0 + + nl.oose.dea + BolAnimatie + 1.0-SNAPSHOT + + + + junit + junit + 4.11 + + + + \ No newline at end of file diff --git a/exercises/bolanimatie/runversie/BolAnimatieApplet.jar b/exercises/bolanimatie/runversie/BolAnimatieApplet.jar deleted file mode 100755 index 0cfc62f..0000000 Binary files a/exercises/bolanimatie/runversie/BolAnimatieApplet.jar and /dev/null differ diff --git a/exercises/bolanimatie/runversie/bolanimatie.html b/exercises/bolanimatie/runversie/bolanimatie.html deleted file mode 100755 index 7d2bdf2..0000000 --- a/exercises/bolanimatie/runversie/bolanimatie.html +++ /dev/null @@ -1,11 +0,0 @@ - - -Stuiterballetje - - -

Speel pong!

- -Your browser does not support Java, so nothing is displayed. - - - diff --git a/exercises/bolanimatie/src/main/java/bolanimatie/AnimatieRegelaar.java b/exercises/bolanimatie/src/main/java/bolanimatie/AnimatieRegelaar.java old mode 100755 new mode 100644 index 4084a49..6bfa85c --- a/exercises/bolanimatie/src/main/java/bolanimatie/AnimatieRegelaar.java +++ b/exercises/bolanimatie/src/main/java/bolanimatie/AnimatieRegelaar.java @@ -1,109 +1,136 @@ -package bolanimatie; - -/** - * - */ - -import java.awt.*; -import java.awt.event.*; -import java.applet.*; -import java.util.*; -import javax.swing.*; - -class AnimatieRegelaar extends JPanel - implements ActionListener -{ // Variables - private BolAnimatie ba; - - private JLabel richtingLabel; - private JTextField richtingInput; - private JButton richtingOk; - - private JButton stapbutton; - - private JLabel snelheidLabel; - private JTextField snelheidInput; - private JButton snelheidOk; - - public AnimatieRegelaar(BolAnimatie b, Color bg) - { ba = b; - Font display = new Font("SansSerif", Font.PLAIN, 12); - setBackground(bg); - - setSize(250, 400); - setLayout(null); - - richtingLabel = new JLabel("Richting (0-90)"); - richtingLabel.setFont(display); - richtingLabel.setVisible(true); - richtingLabel.setSize(100, 20); - richtingLabel.setLocation(5, 20); - add(richtingLabel); - richtingInput = new JTextField(Integer.toString(BolAnimatie.STARTRICHTING), 5); - richtingInput.setFont(display); - richtingInput.setVisible(true); - richtingInput.setSize(60, 24); - richtingInput.setLocation(110, 20); - add(richtingInput); - richtingOk = new JButton( "Ok"); - richtingOk.addActionListener(this); - richtingOk.setFont(display); - richtingOk.setVisible(true); - richtingOk.setEnabled(true); - richtingOk.setSize(60, 24); - richtingOk.setLocation(180, 20); - add(richtingOk); - - stapbutton = new JButton( "Stap" ); - stapbutton.addActionListener(this); - stapbutton.setFont(display); - stapbutton.setVisible(true); - stapbutton.setEnabled(true); - stapbutton.setSize(120, 25); - stapbutton.setLocation(5, 200); - add(stapbutton); - - snelheidLabel = new JLabel("Snelheid (1-50)"); - snelheidLabel.setFont(display); - snelheidLabel.setVisible(true); - snelheidLabel.setSize(100, 20); - snelheidLabel.setLocation(5, 300); - add(snelheidLabel); - snelheidInput = new JTextField(Integer.toString(BolAnimatie.STARTSNELHEID), 5); - snelheidInput.setFont(display); - snelheidInput.setVisible(true); - snelheidInput.setSize(60, 24); - snelheidInput.setLocation(110, 300); - add(snelheidInput); - snelheidOk = new JButton( "Ok"); - snelheidOk.addActionListener(this); - snelheidOk.setFont(display); - snelheidOk.setVisible(true); - snelheidOk.setEnabled(true); - snelheidOk.setSize(60, 24); - snelheidOk.setLocation(180, 300); - add(snelheidOk); - } - -// ----- Listeners, ActionListener ------- - - public void actionPerformed(ActionEvent e) - { if ( e.getSource() == stapbutton ) - { ba.paintStep(); - } else if ( e.getSource() == richtingOk ) - { try - { int ri = Integer.parseInt(richtingInput.getText()); - ba.setRichting(ri); - } catch ( NumberFormatException e1 ) - {} // niks doen als input niet ok is... - } else if ( e.getSource() == snelheidOk ) - { int v = 0; - try - { int s = Integer.parseInt(snelheidInput.getText()); - ba.setSnelheid(s); - } catch ( NumberFormatException e2 ) - {} - } - } - -} +package bolanimatie; + +/** + * + */ + +import java.awt.*; +import java.awt.event.*; +import java.applet.*; +import java.util.*; +import javax.swing.*; + +class AnimatieRegelaar extends JPanel implements ActionListener{ // Variables + private BolAnimatie ba; + + private JLabel richtingLabel; + private JTextField richtingInput; + private JButton richtingOk; + + private JButton stapbutton; + private JButton startStopButton; + + private JLabel snelheidLabel; + private JTextField snelheidInput; + private JButton snelheidOk; + + public AnimatieRegelaar(BolAnimatie b, Color bg) { + ba = b; + + Font display = new Font("SansSerif", Font.PLAIN, 12); + setBackground(bg); + + setSize(250, 400); + setLayout(null); + + richtingLabel = new JLabel("Richting (0-90)"); + richtingLabel.setFont(display); + richtingLabel.setVisible(true); + richtingLabel.setSize(100, 20); + richtingLabel.setLocation(5, 20); + add(richtingLabel); + richtingInput = new JTextField( + Integer.toString(BolAnimatie.STARTRICHTING), 5); + richtingInput.setFont(display); + richtingInput.setVisible(true); + richtingInput.setSize(60, 24); + richtingInput.setLocation(110, 20); + add(richtingInput); + richtingOk = new JButton("Ok"); + richtingOk.addActionListener(this); + richtingOk.setFont(display); + richtingOk.setVisible(true); + richtingOk.setEnabled(true); + richtingOk.setSize(60, 24); + richtingOk.setLocation(180, 20); + add(richtingOk); + + stapbutton = new JButton("Stap"); + stapbutton.addActionListener(this); + stapbutton.setFont(display); + stapbutton.setVisible(true); + stapbutton.setEnabled(true); + stapbutton.setSize(120, 25); + stapbutton.setLocation(5, 200); + add(stapbutton); + + startStopButton = new JButton("Start"); + startStopButton.addActionListener(this); + startStopButton.setVisible(true); + startStopButton.setEnabled(true); + startStopButton.setSize(120, 25); + stapbutton.setLocation(130, 200); + + add(startStopButton); + + snelheidLabel = new JLabel("Snelheid (1-50)"); + snelheidLabel.setFont(display); + snelheidLabel.setVisible(true); + snelheidLabel.setSize(100, 20); + snelheidLabel.setLocation(5, 300); + add(snelheidLabel); + snelheidInput = new JTextField( + Integer.toString(BolAnimatie.STARTSNELHEID), 5); + snelheidInput.setFont(display); + snelheidInput.setVisible(true); + snelheidInput.setSize(60, 24); + snelheidInput.setLocation(110, 300); + add(snelheidInput); + snelheidOk = new JButton("Ok"); + snelheidOk.addActionListener(this); + snelheidOk.setFont(display); + snelheidOk.setVisible(true); + snelheidOk.setEnabled(true); + snelheidOk.setSize(60, 24); + snelheidOk.setLocation(180, 300); + add(snelheidOk); + } + + // ----- Listeners, ActionListener ------- + public void toggleUI() + { + startStopButton.setEnabled(!startStopButton.isEnabled()); + } + + public void actionPerformed(ActionEvent e) { + if (e.getSource() == startStopButton) + { + startStopButton.setEnabled(false); + if(startStopButton.getText().equals("Start")) + { + ba.start(); + startStopButton.setText("Stop"); + } + else { + ba.stop(); + startStopButton.setText("Start"); + } + } + else if (e.getSource() == stapbutton) { + ba.paintStep(); + } else if (e.getSource() == richtingOk) { + try { + int ri = Integer.parseInt(richtingInput.getText()); + ba.setRichting(ri); + } catch (NumberFormatException e1) { + } // niks doen als input niet ok is... + } else if (e.getSource() == snelheidOk) { + int v = 0; + try { + int s = Integer.parseInt(snelheidInput.getText()); + ba.setSnelheid(s); + } catch (NumberFormatException e2) { + } + } + } +} diff --git a/exercises/bolanimatie/src/main/java/bolanimatie/BolAnimatie.java b/exercises/bolanimatie/src/main/java/bolanimatie/BolAnimatie.java old mode 100755 new mode 100644 index 5748308..b00ea14 --- a/exercises/bolanimatie/src/main/java/bolanimatie/BolAnimatie.java +++ b/exercises/bolanimatie/src/main/java/bolanimatie/BolAnimatie.java @@ -1,120 +1,180 @@ -package bolanimatie; - -/** - * - */ - -import java.awt.*; -import java.awt.event.*; -import java.util.*; -import javax.swing.*; - -class BolAnimatie extends JPanel -{ // Constants - public static final int SIZE = 350; // omvang Canvas: 350x350 - public static final int BOLSIZE = 20; // omvang vierkant: 20x20 - public static final int COLORSTEP = 255/(BOLSIZE/2); - public static final int STARTSNELHEID = 10; // sleeptime is 1000/snelheid - public static final int STARTRICHTING = 45; // schuin - - private double xpos = (SIZE-BOLSIZE)/2; // zet balletje in het midden - private double ypos = (SIZE-BOLSIZE)/2; // linksbovenhoek van bounding vierkant! - private double xspeed = 7; - private double yspeed = 7; - private int xdir = 1; // -1 of +1 - private int ydir = 1; - - private int sleeptime = 1000/STARTSNELHEID; // sleeptime van de thread - -/** - * constructor - */ - public BolAnimatie() - { // ----- uiterlijk - setBackground(Color.white); - setSize(SIZE, SIZE); - } - -/** - * Balletje verplaatsen. - * NB: de x- en y-component in de stap zijn altijd positief. De variabelen xdir en - * ydir zijn -1 of 1 en bepalen de richting door vermenigvuldiging - * (bijvoorbeeld xdir*xspeed) - * Wanneer het balletje de rand van het speelveld dreigt te passeren, wordt de - * betreffende dir-variable omgeklapt, waardoor de richting van de bal omdraait. - */ - private void moveBol() - { xpos = xpos + xdir*xspeed; - if ( xpos <= 0 ) // kan als xdir = -1, bal loopt links weg - { xpos = 0; - xdir = 1; // change dir - } - if ( xpos >= SIZE-BOLSIZE ) // kan als xdir = 1, bal loopt rechts weg - { xpos = SIZE-BOLSIZE; - xdir = -1; // change dir - } - ypos = ypos + ydir*yspeed; - if ( ypos <= 0 ) // kan als ydir = -1, bal loopt boven weg - { ypos = 0; - ydir = 1; // change dir - } - if ( ypos >= SIZE-BOLSIZE ) // kan als xdir = 1, bal loopt onder weg - { ypos = SIZE-BOLSIZE; - ydir = -1; // change dir - } - } - -// ------- Gebruikersacties -------------------- - -/** - * Richting instellen: De hoek van de richting (in graden) wordt omgerekend - * in radialen. Daarna sin en cos gebruiken om de y- en x-component van een - * stap uit te rekenen - * - * @param ri De gekozen hoek uit de regelaar - */ - public void setRichting(int ri) - { if ( ri >= 0 && ri <= 90 ) - { double rad = (Math.PI/2)*( ((double)ri)/90); - xspeed = Math.cos(rad)*10; - yspeed = Math.sin(rad)*10; - } // else do nothing - } - -/** - * Snelheid instellen: hogere snelheid realiseren door de tijd bij sleep(int t) - * te verlagen. Dit wordt bereikt door 1000/snelheid als slaaptijd te nemen. - * - * @param s De gekozen snelheid uit de regelaar - */ - public void setSnelheid(int s) - { if ( s>=1 && s<=50 ) - { sleeptime = 1000/s; // hogere snelheid: kortere slaaptijd! - } // else do nothing - } - -/** - * Teken een stap: verplaats het balletje en teken opnieuw - */ - public void paintStep() // Regelpaneel: knop 'Stap' - { moveBol(); - repaint(); - } - -// ------- Painting and buffering -------------------- - -/** - * Teken het speelveld (wit vlak!) en het balletje - */ - public void paintComponent(Graphics g) - { // verplicht, zorgt voor witte achtergrond - super.paintComponent(g); - // Bol bestaat uit in kleur verlopende concentrische cirkels (blauw -> rood) - int ixpos = (int)Math.round(xpos); - int iypos = (int)Math.round(ypos); - for ( int k=0; k<=BOLSIZE/2; k++ ) - { g.setColor(new Color(COLORSTEP*k, 0, 255-COLORSTEP*k)); - g.fillOval(ixpos+k, iypos+k, BOLSIZE-2*k, BOLSIZE-2*k); - } - } -} +package bolanimatie; + +/** + * + */ + +import java.awt.*; +import java.awt.event.*; +import java.util.*; + +import javax.swing.*; + +class BolAnimatie extends JPanel implements Runnable { // Constants + public static final int SIZE = 350; // omvang Canvas: 350x350 + public static final int BOLSIZE = 20; // omvang vierkant: 20x20 + public static final int COLORSTEP = 255 / (BOLSIZE / 2); + public static final int STARTSNELHEID = 10; // sleeptime is 1000/snelheid + public static final int STARTRICHTING = 45; // schuin + + private double xpos = (SIZE - BOLSIZE) / 2; // zet balletje in het midden + private double ypos = (SIZE - BOLSIZE) / 2; // linksbovenhoek van bounding + // vierkant! + private double xspeed = 7; + private double yspeed = 7; + private int xdir = 1; // -1 of +1 + private int ydir = 1; + + private int sleeptime = 1000 / STARTSNELHEID; // sleeptime van de thread + + private boolean running; + private Thread tekenThread; + private AnimatieRegelaar animatieRegelaar; + + /** + * Hierdoor is het batje deel van de bolanimatie, nog beter is het om deze volledig los + * van het balletje te kunnen bedienen. Hiervoor heb je (nog) meer AWT-kennis nodig. + */ + private Paddle paddle = new Paddle(this); + + /** + * constructor + */ + public BolAnimatie() { // ----- uiterlijk + setBackground(Color.white); + setSize(SIZE, SIZE); + addMouseMotionListener(paddle); + } + + /** + * Balletje verplaatsen. NB: de x- en y-component in de stap zijn altijd + * positief. De variabelen xdir en ydir zijn -1 of 1 en bepalen de richting + * door vermenigvuldiging (bijvoorbeeld xdir*xspeed) Wanneer het balletje de + * rand van het speelveld dreigt te passeren, wordt de betreffende + * dir-variable omgeklapt, waardoor de richting van de bal omdraait. + */ + private void moveBol() { + xpos = xpos + xdir * xspeed; + if (xpos <= 0) // kan als xdir = -1, bal loopt links weg + { + xpos = 0; + xdir = 1; // change dir + } + if (xpos >= SIZE - BOLSIZE) // kan als xdir = 1, bal loopt rechts weg + { + xpos = SIZE - BOLSIZE; + xdir = -1; // change dir + } + + ypos = ypos + ydir * yspeed; + if (ypos <= 0) // kan als ydir = -1, bal loopt boven weg + { + ypos = 0; + ydir = 1; // change dir + } + if (collidesWithPaddle()) + { + ydir = -1; // change dir + } + } + + private boolean collidesWithPaddle() { + return paddle.collides(xpos, ypos); + } + + // ------- Gebruikersacties -------------------- + + /** + * Richting instellen: De hoek van de richting (in graden) wordt omgerekend + * in radialen. Daarna sin en cos gebruiken om de y- en x-component van een + * stap uit te rekenen + * + * @param ri + * De gekozen hoek uit de regelaar + */ + public void setRichting(int ri) { + if (ri >= 0 && ri <= 90) { + double rad = (Math.PI / 2) * (((double) ri) / 90); + xspeed = Math.cos(rad) * 10; + yspeed = Math.sin(rad) * 10; + } // else do nothing + } + + /** + * Snelheid instellen: hogere snelheid realiseren door de tijd bij sleep(int + * t) te verlagen. Dit wordt bereikt door 1000/snelheid als slaaptijd te + * nemen. + * + * @param s + * De gekozen snelheid uit de regelaar + */ + public void setSnelheid(int s) { + if (s >= 1 && s <= 50) { + sleeptime = 1000 / s; // hogere snelheid: kortere slaaptijd! + } // else do nothing + } + + /** + * Teken een stap: verplaats het balletje en teken opnieuw + */ + public void paintStep() // Regelpaneel: knop 'Stap' + { + moveBol(); + repaint(); + } + + // ------- Painting and buffering -------------------- + + /** + * Teken het speelveld (wit vlak!) en het balletje + */ + public void paintComponent(Graphics g) { // verplicht, zorgt voor witte + // achtergrond + super.paintComponent(g); + // Bol bestaat uit in kleur verlopende concentrische cirkels (blauw -> + // rood) + int ixpos = (int) Math.round(xpos); + int iypos = (int) Math.round(ypos); + for (int k = 0; k <= BOLSIZE / 2; k++) { + g.setColor(new Color(COLORSTEP * k, 0, 255 - COLORSTEP * k)); + g.fillOval(ixpos + k, iypos + k, BOLSIZE - 2 * k, BOLSIZE - 2 * k); + } + paddle.paint(g); + } + + public void start() { + toggleRunning(); + tekenThread = new Thread( this ); + tekenThread.start(); + animatieRegelaar.toggleUI(); + } + + public void stop() + { + toggleRunning(); + tekenThread = null; + } + + public void run() { + while(running) + { + paintStep(); + try { + Thread.sleep(sleeptime); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + } + animatieRegelaar.toggleUI(); + } + + public void setAnimatieRegelaar(AnimatieRegelaar animatieRegelaar) { + this.animatieRegelaar = animatieRegelaar; + } + + private void toggleRunning() { + running = !running; + } + +} diff --git a/exercises/bolanimatie/src/main/java/bolanimatie/BolAnimatieApplet.java b/exercises/bolanimatie/src/main/java/bolanimatie/BolAnimatieApplet.java old mode 100755 new mode 100644 index 6a81d1a..c827f30 --- a/exercises/bolanimatie/src/main/java/bolanimatie/BolAnimatieApplet.java +++ b/exercises/bolanimatie/src/main/java/bolanimatie/BolAnimatieApplet.java @@ -1,39 +1,39 @@ -package bolanimatie; - -/* - * Animatie met stuiterend balletje - * - * @author Paul Bergervoet - * - */ - -import java.awt.*; -import java.awt.event.*; -import java.applet.*; -import javax.swing.*; - -public class BolAnimatieApplet extends JApplet -{ // Componenten - BolAnimatie bolanim; - AnimatieRegelaar animreg; - - // initialize applet - public void init() - { - setSize(650, 400); - Container mypane = getContentPane(); - mypane.setLayout(null); - - bolanim = new BolAnimatie(); - bolanim.setLocation(25, 25); // grootte ster: 350x350 - mypane.add(bolanim); - - animreg = new AnimatieRegelaar(bolanim, new Color(255, 255, 204)); - animreg.setLocation(400, 0); // grootte regelaar: 250x400 - mypane.add(animreg); - - mypane.setBackground(new Color(255, 255, 51)); - setVisible(true); - } - -} +package bolanimatie; + +/* + * Animatie met stuiterend balletje + * + * @author Paul Bergervoet + * + */ + +import java.awt.*; +import javax.swing.*; + +public class BolAnimatieApplet extends JApplet +{ // Componenten + BolAnimatie bolanim; + AnimatieRegelaar animreg; + + // initialize applet + public void init() + { + setSize(650, 400); + Container mypane = getContentPane(); + mypane.setLayout(null); + + bolanim = new BolAnimatie(); + bolanim.setLocation(25, 25); // grootte ster: 350x350 + mypane.add(bolanim); + + animreg = new AnimatieRegelaar(bolanim, new Color(255, 255, 204)); + animreg.setLocation(400, 0); // grootte regelaar: 250x400 + mypane.add(animreg); + + bolanim.setAnimatieRegelaar(animreg); + + mypane.setBackground(new Color(255, 255, 51)); + setVisible(true); + } + +} diff --git a/exercises/bolanimatie/src/main/java/bolanimatie/Paddle.java b/exercises/bolanimatie/src/main/java/bolanimatie/Paddle.java new file mode 100644 index 0000000..029b2c6 --- /dev/null +++ b/exercises/bolanimatie/src/main/java/bolanimatie/Paddle.java @@ -0,0 +1,41 @@ +package bolanimatie; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseMotionListener; + +public class Paddle extends JPanel implements MouseMotionListener { + public static final int WIDTH = 50; + public static final int HEIGHT = 10; + public static final int MARGIN_FROM_BOTTOM = 30; + + private BolAnimatie bolAnimatie; + private int xPos; + private int yPos; + + public Paddle(BolAnimatie bolAnimatie){ + this.bolAnimatie = bolAnimatie; + this.yPos = bolAnimatie.SIZE - MARGIN_FROM_BOTTOM; + this.xPos = bolAnimatie.SIZE - WIDTH; + } + + public void paint(Graphics g) { + g.setColor(Color.black); + g.fillRect(xPos, yPos, WIDTH, HEIGHT); + } + + public void mouseDragged(MouseEvent e) {} + + public void mouseMoved(MouseEvent e) { + if (e.getX() >= 0 && e.getX() < bolAnimatie.SIZE - WIDTH) + this.xPos = e.getX(); + repaint(); + } + + + public boolean collides(double xPosBal, double yPosBal) { + Point centerOfBall = new Point((int)xPosBal+10, (int)yPosBal+10); + return centerOfBall.x >= xPos && centerOfBall.x <= xPos + WIDTH && Math.abs(centerOfBall.y-yPos) <= 15 ; + } +} diff --git a/exercises/cdi/README.md b/exercises/cdi/README.md new file mode 100644 index 0000000..de9b67c --- /dev/null +++ b/exercises/cdi/README.md @@ -0,0 +1,5 @@ +Build the project and run it using Tomcat. + +Visit http://localhost:8080/items to test the REST Service. + +Visit http://localhost:8080/viewItems to test the Servlet. \ No newline at end of file diff --git a/exercises/cdi/pom.xml b/exercises/cdi/pom.xml new file mode 100644 index 0000000..2ca4cef --- /dev/null +++ b/exercises/cdi/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + oose.dea + simpleorder + war + 1.0-SNAPSHOT + Simpleorder Webapp + + UTF-8 + 1.8 + 1.8 + + + + mysql + mysql-connector-java + 5.1.34 + + + javax + javaee-api + 7.0 + + + jstl + jstl + 1.2 + + + junit + junit + 4.8.2 + test + + + + simpleorder + + diff --git a/exercises/cdi/src/main/java/oose/dea/controller/ItemsView.java b/exercises/cdi/src/main/java/oose/dea/controller/ItemsView.java new file mode 100644 index 0000000..c0b6284 --- /dev/null +++ b/exercises/cdi/src/main/java/oose/dea/controller/ItemsView.java @@ -0,0 +1,32 @@ +package oose.dea.controller; + +import oose.dea.domain.Item; +import oose.dea.services.ItemService; +import oose.dea.services.local.LocalItemService; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +@Singleton +@WebServlet(urlPatterns = "/viewItems") +public class ItemsView extends HttpServlet { + @Inject + @Named("localItemService") // this can be removed when using @Default with @Alternative + private ItemService itemService; + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + List items = itemService.findAll(); + for(Item item:items) + { + response.getWriter().print(item.toString()); + } + } +} diff --git a/exercises/cdi/src/main/java/oose/dea/dao/FakeItemDAO.java b/exercises/cdi/src/main/java/oose/dea/dao/FakeItemDAO.java new file mode 100644 index 0000000..9014814 --- /dev/null +++ b/exercises/cdi/src/main/java/oose/dea/dao/FakeItemDAO.java @@ -0,0 +1,16 @@ +package oose.dea.dao; + +import oose.dea.domain.Item; + +import java.util.ArrayList; +import java.util.List; + +public class FakeItemDAO implements ItemDAO { + @Override + public List list() { + List items = new ArrayList(); + items.add(new Item("Frikandel", "Snacks", "Lekker wel!")); + items.add(new Item("Kroket", "Snacks", "Ook lekker in bed!")); + return items; + } +} diff --git a/exercises/cdi/src/main/java/oose/dea/dao/ItemDAO.java b/exercises/cdi/src/main/java/oose/dea/dao/ItemDAO.java new file mode 100644 index 0000000..d2d4c41 --- /dev/null +++ b/exercises/cdi/src/main/java/oose/dea/dao/ItemDAO.java @@ -0,0 +1,9 @@ +package oose.dea.dao; + +import oose.dea.domain.Item; + +import java.util.List; + +public interface ItemDAO { + List list(); +} diff --git a/exercises/cdi/src/main/java/oose/dea/domain/Item.java b/exercises/cdi/src/main/java/oose/dea/domain/Item.java new file mode 100644 index 0000000..4b40a0c --- /dev/null +++ b/exercises/cdi/src/main/java/oose/dea/domain/Item.java @@ -0,0 +1,48 @@ +package oose.dea.domain; + +public class Item { + private String sku; + private String category; + private String title; + + public Item(){} + + public Item(String sku, String category, String title) { + this.sku = sku; + this.category = category; + this.title = title; + } + + public String getSku() { + return sku; + } + + public void setSku(String sku) { + this.sku = sku; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + @Override + public String toString() { + return "Item{" + + "sku='" + sku + '\'' + + ", category='" + category + '\'' + + ", title='" + title + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/exercises/cdi/src/main/java/oose/dea/services/ItemService.java b/exercises/cdi/src/main/java/oose/dea/services/ItemService.java new file mode 100644 index 0000000..2ef9f6b --- /dev/null +++ b/exercises/cdi/src/main/java/oose/dea/services/ItemService.java @@ -0,0 +1,9 @@ +package oose.dea.services; + +import oose.dea.domain.Item; + +import java.util.List; + +public interface ItemService { + List findAll(); +} diff --git a/exercises/cdi/src/main/java/oose/dea/services/local/LocalItemService.java b/exercises/cdi/src/main/java/oose/dea/services/local/LocalItemService.java new file mode 100644 index 0000000..9f2ede8 --- /dev/null +++ b/exercises/cdi/src/main/java/oose/dea/services/local/LocalItemService.java @@ -0,0 +1,21 @@ +package oose.dea.services.local; + +import oose.dea.dao.ItemDAO; +import oose.dea.domain.Item; +import oose.dea.services.ItemService; + +import javax.inject.Inject; +import javax.inject.Named; +import java.util.List; + +@Named("localItemService") +// @Default +public class LocalItemService implements ItemService { + @Inject + private ItemDAO itemDAO; + + @Override + public List findAll() { + return itemDAO.list(); + } +} diff --git a/exercises/cdi/src/main/java/oose/dea/services/rest/ItemRestService.java b/exercises/cdi/src/main/java/oose/dea/services/rest/ItemRestService.java new file mode 100644 index 0000000..ac13fa6 --- /dev/null +++ b/exercises/cdi/src/main/java/oose/dea/services/rest/ItemRestService.java @@ -0,0 +1,28 @@ + +package oose.dea.services.rest; + +import oose.dea.dao.ItemDAO; +import oose.dea.domain.Item; +import oose.dea.services.ItemService; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import java.util.List; + +@Path("/items") +@Named("restItemService") +// @Alternative +public class ItemRestService implements ItemService { + @Inject + private ItemDAO itemDAO; + + @GET + @Produces(MediaType.APPLICATION_JSON) + public List findAll() { + return itemDAO.list(); + } +} diff --git a/exercises/cdi/src/main/resources/META-INF/beans.xml b/exercises/cdi/src/main/resources/META-INF/beans.xml new file mode 100644 index 0000000..5b013a0 --- /dev/null +++ b/exercises/cdi/src/main/resources/META-INF/beans.xml @@ -0,0 +1,3 @@ + + \ No newline at end of file diff --git a/exercises/cdi/src/main/webapp/WEB-INF/web.xml b/exercises/cdi/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..287a892 --- /dev/null +++ b/exercises/cdi/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,7 @@ + + \ No newline at end of file diff --git a/exercises/courseviewer/pom.xml b/exercises/courseviewer/pom.xml new file mode 100644 index 0000000..37da5a5 --- /dev/null +++ b/exercises/courseviewer/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + + nl.oose.dea + CourseViewer + 1.0-SNAPSHOT + + + + junit + junit + 4.11 + + + diff --git a/exercises/courseviewer/src/main/java/observer/CourseRecord.java b/exercises/courseviewer/src/main/java/observer/CourseRecord.java new file mode 100755 index 0000000..1b0f4d7 --- /dev/null +++ b/exercises/courseviewer/src/main/java/observer/CourseRecord.java @@ -0,0 +1,61 @@ +package observer; + +/** + * Represents the name of a course and the number of students taking it. + */ +public class CourseRecord { + /** + * Create a CourseRecord object + * + * @param courseName + * name of the course + * @param numOfStudents + * number of students taking the course + */ + public CourseRecord(String courseName, int numOfStudents) { + this.name = courseName; + this.numOfStudents = numOfStudents; + } + + /** + * Return the number of students taking course + * + * @return number of students taking course + */ + public int getNumOfStudents() { + return numOfStudents; + } + + /** + * Return the name of the course + * + * @return name of the course + */ + public String getName() { + return name; + } + + /** + * Set number of students on course + * + * @param numOfStudents + * number of students on course + */ + public void setNumOfStudents(int numOfStudents) { + this.numOfStudents = numOfStudents; + } + + /** + * Convert course to string representation + * + * @return course represented as a string + */ + public String toString() { + return "Course = " + this.name + ", Number of Students = " + + this.numOfStudents; + } + + private String name; + + private int numOfStudents; +} \ No newline at end of file diff --git a/exercises/courseviewer/src/main/java/observer/LayoutConstants.java b/exercises/courseviewer/src/main/java/observer/LayoutConstants.java new file mode 100755 index 0000000..b44a031 --- /dev/null +++ b/exercises/courseviewer/src/main/java/observer/LayoutConstants.java @@ -0,0 +1,42 @@ +package observer; + +import java.awt.Color; +import java.awt.Graphics; +import java.util.Vector; + +/** + Represents some constants for the drawing of graphs in this example. +*/ +public class LayoutConstants { + + public static final int xOffset = 350; + + public static final int yOffset = 30; + + public static final int graphHeight = 210; + + public static final int maxValue = 100; + + public static final int barHeight = 200; + + public static final int barWidth = 50; + + public static final int barSpacing = 20; + + public static final Color[] courseColours = { Color.BLUE, Color.RED, + Color.YELLOW, Color.GREEN, Color.BLACK, Color.CYAN, Color.MAGENTA, + Color.ORANGE, Color.PINK }; + + public static void paintBarChartOutline(Graphics g, int noOfBars) { + g.setColor(Color.black); + g.drawString("Num of Students", LayoutConstants.xOffset - 120, 150); + g.drawLine(LayoutConstants.xOffset, LayoutConstants.yOffset, + LayoutConstants.xOffset, LayoutConstants.graphHeight + + LayoutConstants.yOffset); + g.drawLine(LayoutConstants.xOffset, LayoutConstants.graphHeight + + LayoutConstants.yOffset, LayoutConstants.xOffset + + (LayoutConstants.barSpacing + LayoutConstants.barWidth) + * noOfBars, LayoutConstants.graphHeight + + LayoutConstants.yOffset); + } +} diff --git a/exercises/courseviewer/src/main/java/observer/nonpattern/CourseViewer.java b/exercises/courseviewer/src/main/java/observer/nonpattern/CourseViewer.java new file mode 100755 index 0000000..04a33c3 --- /dev/null +++ b/exercises/courseviewer/src/main/java/observer/nonpattern/CourseViewer.java @@ -0,0 +1,224 @@ +package observer.nonpattern; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Vector; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSlider; +import javax.swing.border.TitledBorder; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +import observer.CourseRecord; +import observer.LayoutConstants; + +/** + * Presents a barchart view of a set of courses and their marks. No pattern is + * used in this program. + */ +@SuppressWarnings("serial") +public class CourseViewer extends JFrame implements ActionListener, + ChangeListener { + + /** + * Create a CourseViewer object + */ + public CourseViewer() { + this.setTitle("Observer Pattern -- Non Pattern Version"); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + sliders = new Vector(); + sliderPanel = new JPanel(); + sliderPanel.setLayout(new GridBagLayout()); + sliderPanel.setBackground(Color.white); + this.getContentPane().setLayout(new GridBagLayout()); + coursePanel = new JPanel(); + coursePanel.setBorder(new TitledBorder("Courses")); + coursePanel.setLayout(new GridLayout(0, 1)); + GridBagConstraints constraints = new GridBagConstraints(); + constraints.fill = GridBagConstraints.BOTH; + + scrollPane = new JScrollPane(coursePanel, + JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, + JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + // Layout code + constraints.weightx = 0.0; + constraints.weighty = 1.0; + constraints.gridx = 0; + constraints.gridy = 0; + sliderPanel.add(scrollPane, constraints); + + button = new JButton("New Course"); + button.addActionListener(this); + + // Layout code + constraints.weightx = 0.0; + constraints.weighty = 0.0; + constraints.gridy = 1; + sliderPanel.add(button, constraints); + + // Layout code + constraints.weightx = 0.0; + constraints.weighty = 0.0; + constraints.gridx = 0; + constraints.gridy = 0; + this.getContentPane().add(sliderPanel, constraints); + + // Layout code + constraints.weightx = 1.0; + constraints.weighty = 1.0; + constraints.gridx = 1; + constraints.gridy = 0; + // the bar chart will be drawn over this panel + this.getContentPane().add(new JPanel(), constraints); + this.setVisible(true); + } + + /** + * Add a new Course object + * + * @param courseRecord the CourseRecord to be added + */ + public void addCourse(CourseRecord courseRecord) { + boolean alreadyExists = false; + for (int i = 0; i < sliders.size(); i++) { + JSlider slider = sliders.elementAt(i); + if (slider.getName().equals(courseRecord.getName())) { + alreadyExists = true; + JOptionPane + .showMessageDialog( + null, + "Warning: Attempt to add new course with an already existing name", + "alert", JOptionPane.ERROR_MESSAGE); + i = sliders.size(); // exit the loop + } + } + if (!alreadyExists) { // add the slider + JSlider slider = new JSlider(); + slider.setBackground(Color.white); + slider.setName(courseRecord.getName()); + slider.setValue(50); + slider.setMinimum(0); + slider.setMaximum(100); + slider.setMajorTickSpacing(25); + slider.setMinorTickSpacing(5); + slider.setPaintTicks(true); + slider.setPaintLabels(true); + slider.setBorder(new TitledBorder(courseRecord.getName())); + slider.addChangeListener(this); + coursePanel.add(slider); + coursePanel.revalidate(); + sliders.addElement(slider); + this.setSize(LayoutConstants.xOffset + 50 + this.sliders.size() + * (LayoutConstants.barWidth + LayoutConstants.barSpacing), + (sliders.size() + 1) * 100 + this.button.getHeight()); + this.sliderPanel.revalidate(); + this.coursePanel.revalidate(); + this.repaint(); + this.setVisible(true); + } + } + + public void paint(Graphics g) { + super.paint(g); + int sliderCount = sliders.size(); + LayoutConstants.paintBarChartOutline(g, sliderCount); + Integer[] pieChartData = new Integer[sliderCount]; + for (int i = 0; i < sliderCount; i++) { + JSlider record = sliders.elementAt(i); + g.setColor(LayoutConstants.courseColours[i]); + g.fillRect( + LayoutConstants.xOffset + (i + 1) + * LayoutConstants.barSpacing + i + * LayoutConstants.barWidth, LayoutConstants.yOffset + + LayoutConstants.graphHeight + - LayoutConstants.barHeight + 2 + * (LayoutConstants.maxValue - record.getValue()), + LayoutConstants.barWidth, 2 * record.getValue()); + g.setColor(Color.red); + g.drawString(record.getName(), + LayoutConstants.xOffset + (i + 1) + * LayoutConstants.barSpacing + i + * LayoutConstants.barWidth, LayoutConstants.yOffset + + LayoutConstants.graphHeight + 20); + pieChartData[i] = record.getValue(); + } + + paint(g, pieChartData); + } + + public void paint(Graphics g, Integer[] data) { + int radius = 100; + + //first compute the total number of students + double total = 0.0; + for (int i = 0; i < data.length; i++) { + total += data[i]; + } + //if total == 0 nothing to draw + if (total != 0) { + double startAngle = 0.0; + for (int i = 0; i < data.length; i++) { + double ratio = (data[i] / total) * 360.0; + //draw the arc + g.setColor(LayoutConstants.courseColours[i % LayoutConstants.courseColours.length]); + g.fillArc(LayoutConstants.xOffset, LayoutConstants.yOffset + 300, 2 * radius, 2 * radius, (int) startAngle, (int) ratio); + startAngle += ratio; + } + } + } + + /** + * Manages the creation of a new course. Called when "New Course" button is pressed. + * + * @param arg0 not used + */ + public void actionPerformed(ActionEvent arg0) { + String input = JOptionPane + .showInputDialog("Please enter the new course name:"); + if (input != null) + this.addCourse(new CourseRecord(input, 50)); + } + + /** + * Handles the changing of the marks for a course (changing of a JSlider) + * + * @param arg0 not used + */ + public void stateChanged(ChangeEvent arg0) { + this.repaint(); + } + + + /** + * Sets up an initial set of three courses + * + * @param args not used + */ + public static void main(String[] args) { + CourseViewer viewer = new CourseViewer(); + viewer.addCourse(new CourseRecord("Physics", 50)); + viewer.addCourse(new CourseRecord("Chemistry", 50)); + viewer.addCourse(new CourseRecord("Biology", 50)); + } + + // Frame contents + private JPanel sliderPanel; + + private JPanel coursePanel; + + private Vector sliders; + + private JScrollPane scrollPane; + + private JButton button; +} \ No newline at end of file diff --git a/exercises/courseviewer/src/main/java/observer/pattern/BarChartObserver.java b/exercises/courseviewer/src/main/java/observer/pattern/BarChartObserver.java new file mode 100755 index 0000000..52af2eb --- /dev/null +++ b/exercises/courseviewer/src/main/java/observer/pattern/BarChartObserver.java @@ -0,0 +1,87 @@ +package observer.pattern; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.util.Observable; +import java.util.Observer; +import java.util.Vector; + +import javax.swing.JPanel; + +import observer.CourseRecord; +import observer.LayoutConstants; + +/** + * This class represents a bar chart view of a vector of data. Uses the Observer + * pattern. + */ +@SuppressWarnings("serial") +public class BarChartObserver extends JPanel implements Observer { + /** + * Creates a BarChartObserver object + * + * @param data + * a CourseData object to observe + */ + public BarChartObserver(CourseData data) { + data.addObserver(this); + this.courseData = data.getUpdate(); + this.setPreferredSize(new Dimension(2 * LayoutConstants.xOffset + + (LayoutConstants.barSpacing + LayoutConstants.barWidth) + * this.courseData.size(), LayoutConstants.graphHeight + 2 + * LayoutConstants.yOffset)); + this.setBackground(Color.white); + } + + /** + * Paint method + * + * @param g + * a Graphics object on which to paint + */ + public void paint(Graphics g) { + super.paint(g); + LayoutConstants.paintBarChartOutline(g, this.courseData.size()); + for (int i = 0; i < courseData.size(); i++) { + CourseRecord record = (CourseRecord) courseData.elementAt(i); + g.setColor(Color.blue); + g.fillRect( + LayoutConstants.xOffset + (i + 1) + * LayoutConstants.barSpacing + i + * LayoutConstants.barWidth, LayoutConstants.yOffset + + LayoutConstants.graphHeight + - LayoutConstants.barHeight + + 2 + * (LayoutConstants.maxValue - record + .getNumOfStudents()), + LayoutConstants.barWidth, 2 * record.getNumOfStudents()); + g.setColor(Color.red); + g.drawString(record.getName(), + LayoutConstants.xOffset + (i + 1) + * LayoutConstants.barSpacing + i + * LayoutConstants.barWidth, LayoutConstants.yOffset + + LayoutConstants.graphHeight + 20); + } + } + + /** + * Informs this observer that the observed CourseData object has changed + * + * @param o + * the observed CourseData object that has changed + */ + public void update(Observable o, Object arg) { + CourseData data = (CourseData) o; + this.courseData = data.getUpdate(); + + this.setPreferredSize(new Dimension(2 * LayoutConstants.xOffset + + (LayoutConstants.barSpacing + LayoutConstants.barWidth) + * this.courseData.size(), LayoutConstants.graphHeight + 2 + * LayoutConstants.yOffset)); + this.revalidate(); + this.repaint(); + } + + private Vector courseData; +} \ No newline at end of file diff --git a/exercises/courseviewer/src/main/java/observer/pattern/CourseController.java b/exercises/courseviewer/src/main/java/observer/pattern/CourseController.java new file mode 100755 index 0000000..7f62a91 --- /dev/null +++ b/exercises/courseviewer/src/main/java/observer/pattern/CourseController.java @@ -0,0 +1,185 @@ +package observer.pattern; + +import java.awt.Color; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Observable; +import java.util.Observer; +import java.util.Vector; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSlider; +import javax.swing.border.TitledBorder; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +import observer.CourseRecord; + +/** + * Presents a given view of a set of courses and their marks. Uses the Observer + * pattern to be notified when a new course has been added. + */ +@SuppressWarnings("serial") +public class CourseController extends JPanel implements Observer, ChangeListener, ActionListener { + /** + * Constructs a CourseController object + * + * @param courses + * a set of courses and their marks + */ + public CourseController(CourseData courses) { + this.courseData = courses; + this.sliders = new Vector(); + this.setLayout(new GridBagLayout()); + this.setBackground(Color.white); + + coursePanel = new JPanel(); + coursePanel.setBorder(new TitledBorder("Courses")); + coursePanel.setLayout(new GridLayout(0, 1)); + + GridBagConstraints constraints = new GridBagConstraints(); + constraints.fill = GridBagConstraints.BOTH; + courses.addObserver(this); + Vector state = courses.getUpdate(); + + for (int i = 0; i < state.size(); i++) + this.addCourse(state.elementAt(i)); + + JScrollPane scrollPane = new JScrollPane(coursePanel, + JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, + JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + JButton button = new JButton("New Courses"); + button.addActionListener(this); + + constraints.weightx = 0.5; + constraints.weighty = 1.0; + constraints.gridx = 0; + constraints.gridy = 0; + this.add(scrollPane, constraints); + + constraints.weightx = 0.5; + constraints.weighty = 0; + constraints.gridy = 1; + this.add(button, constraints); + } + + /** + * Add a new course + * + * @param record + * the new course record to be added + */ + public void addCourse(CourseRecord record) { + JSlider slider = new JSlider(); + slider.setBackground(Color.white); + slider.setName(record.getName()); + slider.setValue(record.getNumOfStudents()); + slider.setMinimum(0); + slider.setMaximum(100); + slider.setMajorTickSpacing(25); + slider.setMinorTickSpacing(5); + slider.setPaintTicks(true); + slider.setPaintLabels(true); + slider.setBorder(new TitledBorder(record.getName())); + slider.addChangeListener(this); + coursePanel.add(slider); + coursePanel.revalidate(); + sliders.addElement(slider); + } + + /** + * Informs this CourseController that a new course has been added + * + * @param o + * the CourseData subject that has changed + */ + public void update(Observable o, Object arg) { + CourseData courses = (CourseData) o; + Vector newCourses = courses.getUpdate(); + for (int i = sliders.size(); i < newCourses.size(); i++) { + this.addCourse((CourseRecord) newCourses.elementAt(i)); + } + } + + /** + * Manages the creation of a new course. Called when the "New Course" button is pressed. + * + * @param arg0 + * not used + */ + public void actionPerformed(ActionEvent arg0) { + String input = JOptionPane.showInputDialog("Please enter new course name:"); + if (input != null){ + courseData.addCourseRecord(new CourseRecord(input, 50)); + // leave it up notify/update mechanism to invoke this.addCourse + } + } + + /** + * Handles the changing of the marks for a course (changing of a JSlider) + * + * @param arg0 + * the JSlider that has changed + */ + public void stateChanged(ChangeEvent arg0) { + JSlider slider = (JSlider) arg0.getSource(); + courseData.changeCourseRecord(slider.getName(), slider.getValue()); + } + + /** + * Sets up an initial set of three courses + * + * @param args + * not used + */ + public static void main(String[] args) { + CourseData data = new CourseData(); + data.addCourseRecord(new CourseRecord("Physics", 50)); + data.addCourseRecord(new CourseRecord("Chemistry", 50)); + data.addCourseRecord(new CourseRecord("Biology", 50)); + + CourseController controller = new CourseController(data); + + //BarChartObserver bar = new BarChartObserver(data); + + PieChartObserver pie = new PieChartObserver(data.getUpdate()); + data.addObserver(pie); + + JScrollPane scrollPane = new JScrollPane(pie, + JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, + JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + + JFrame frame = new JFrame("Observer Pattern"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.getContentPane().setLayout(new GridBagLayout()); + frame.setResizable(false); + + GridBagConstraints constraints = new GridBagConstraints(); + constraints.fill = GridBagConstraints.BOTH; + constraints.weightx = 0.25; + constraints.weighty = 1.0; + constraints.gridx = 0; + constraints.gridy = 0; + frame.getContentPane().add(controller, constraints); + constraints.weightx = 0.5; + constraints.weighty = 1.0; + constraints.gridx = 1; + constraints.gridy = 0; + frame.getContentPane().add(scrollPane, constraints); + frame.pack(); + frame.setVisible(true); + } + + private CourseData courseData; + + private Vector sliders; + + private JPanel coursePanel; +} \ No newline at end of file diff --git a/exercises/courseviewer/src/main/java/observer/pattern/CourseData.java b/exercises/courseviewer/src/main/java/observer/pattern/CourseData.java new file mode 100755 index 0000000..c4b2126 --- /dev/null +++ b/exercises/courseviewer/src/main/java/observer/pattern/CourseData.java @@ -0,0 +1,85 @@ +package observer.pattern; + +import java.util.Observable; +import java.util.Vector; + +import javax.swing.JOptionPane; + +import observer.CourseRecord; + +/** + * Represents a vector of CourseRecords. + */ +public class CourseData extends Observable { + + /** + * Constructs a CourseData object + */ + public CourseData() { + this.courseData = new Vector(); + } + + /** + * Add a new CourseRecord object + * + * @param courseRecord + * the CourseRecord to be added + */ + public void addCourseRecord(CourseRecord courseRecord) { + boolean alreadyExists = false; + for (int i = 0; i < courseData.size(); i++) { + CourseRecord record = courseData.elementAt(i); + if (record.getName().equals(courseRecord.getName())) { + alreadyExists = true; + JOptionPane + .showMessageDialog( + null, + "Warning: Attempt to add new course with an already existing name", + "alert", JOptionPane.ERROR_MESSAGE); + i = courseData.size(); // exit the loop + } + } + if (!alreadyExists) + this.courseData.addElement(courseRecord); + //this.notifyObservers(courseData.clone()); + this.setChanged(); + this.notifyObservers(courseRecord);// instead of 1.3 only send changed records + } + + /** + * Update an existing CourseRecord object + * + * @param subjectName + * the name CourseRecord to be updated + * @param numOfStudents + * the new number of students for this course + */ + public void changeCourseRecord(String subjectName, int numOfStudents) { + CourseRecord record = null; + for (int i = 0; i < courseData.size(); i++) { + record = courseData.elementAt(i); + if (record.getName().equals(subjectName)) { + record.setNumOfStudents(numOfStudents); + i = courseData.size(); + } + } + //this.notifyObservers(courseData.clone()); + if (record != null) + { + this.setChanged(); + this.notifyObservers(record); // instead of 1.3 only send changed records + } + } + + /** + * Return a copy of the vector of course data. Used by Observers to pull + * data. + * + * @return vector of course data + */ + public Vector getUpdate() { + return (Vector) courseData.clone(); + } + + private Vector courseData; +} \ No newline at end of file diff --git a/exercises/courseviewer/src/main/java/observer/pattern/PieChartObserver.java b/exercises/courseviewer/src/main/java/observer/pattern/PieChartObserver.java new file mode 100755 index 0000000..d241825 --- /dev/null +++ b/exercises/courseviewer/src/main/java/observer/pattern/PieChartObserver.java @@ -0,0 +1,97 @@ +package observer.pattern; + +import observer.CourseRecord; +import observer.LayoutConstants; + +import javax.swing.*; +import java.awt.*; +import java.util.Observable; +import java.util.Observer; +import java.util.Vector; + +/** + * This class represents a pie chart view of a vector of data. Uses the Observer + * pattern. + */ +@SuppressWarnings("serial") +public class PieChartObserver extends JPanel implements Observer { + /** + * Creates a BarChartObserver object + * + * @param courseData + */ + public PieChartObserver(Vector courseData) { + this.courseData = courseData; + this.setPreferredSize(new Dimension(2 * LayoutConstants.xOffset + + (LayoutConstants.barSpacing + LayoutConstants.barWidth) + * this.courseData.size(), LayoutConstants.graphHeight + 2 + * LayoutConstants.yOffset)); + this.setBackground(Color.white); + } + + /** + * Paint method + * + * @param g + * a Graphics object on which to paint + */ + public void paint(Graphics g) { + super.paint(g); + double startAngle = 0.0; + double total = getTotalNumberOfStudents(courseData); + for (int i = 0; i < courseData.size(); i++) { + int radius = 100; + CourseRecord record = courseData.elementAt(i); + double ratio = (record.getNumOfStudents() / total) * 360.0; + g.setColor(LayoutConstants.courseColours[i % LayoutConstants.courseColours.length]); + g.fillArc(LayoutConstants.xOffset, LayoutConstants.yOffset, 2 * radius, 2 * radius, (int) startAngle, (int) ratio); + startAngle += ratio; + } + } + + private double getTotalNumberOfStudents(Vector courseDataList) { + double total = 0; + for(CourseRecord courseData:courseDataList) + { + total += courseData.getNumOfStudents(); + } + return total; + } + + /** + * Informs this observer that the observed CourseData object has changed + * + * @param o + * the observed CourseData object that has changed + */ + public void update(Observable o, Object arg) { + CourseRecord courseRecord = (CourseRecord) arg; + + updateRecordWhenFoundOrElseAddRecord(courseRecord); + + // this.courseData = (Vector) arg; + + this.setPreferredSize(new Dimension(2 * LayoutConstants.xOffset + + (LayoutConstants.barSpacing + LayoutConstants.barWidth) + * this.courseData.size(), LayoutConstants.graphHeight + 2 + * LayoutConstants.yOffset)); + this.revalidate(); + this.repaint(); + } + + private void updateRecordWhenFoundOrElseAddRecord(CourseRecord courseRecord) { + boolean found = false; + for(int i=0;i< courseData.size();i++) + { + CourseRecord cr = courseData.elementAt(i); + if (cr.getName().equals(courseRecord.getName())) + { + courseData.set(i, courseRecord); + found = true; + } + } + if (!found) courseData.add(courseRecord); + } + + private Vector courseData; +} \ No newline at end of file diff --git a/exercises/guice/javaee/README.md b/exercises/guice/javaee/README.md new file mode 100644 index 0000000..403e139 --- /dev/null +++ b/exercises/guice/javaee/README.md @@ -0,0 +1,5 @@ +Build the project and run it using Tomcat. + +Visit http://localhost:8080/rest/items to test the REST Service. + +Visit http://localhost:8080/viewItems to test the Servlet. \ No newline at end of file diff --git a/exercises/guice/javaee/pom.xml b/exercises/guice/javaee/pom.xml new file mode 100644 index 0000000..8c14c9b --- /dev/null +++ b/exercises/guice/javaee/pom.xml @@ -0,0 +1,87 @@ + + 4.0.0 + oose.dea + simpleorder + war + 1.0-SNAPSHOT + simpleorder Jersey Webapp + + simpleorder + + + org.apache.maven.plugins + maven-compiler-plugin + true + + 1.6 + 1.6 + + + + + + + org.glassfish.jersey.containers + jersey-container-servlet-core + ${jersey.version} + + + org.glassfish.jersey.containers + jersey-container-servlet + ${jersey.version} + + + + + org.glassfish.hk2 + guice-bridge + 2.4.0-b25 + + + com.google.inject.extensions + guice-servlet + ${guice.version} + + + com.google.inject + guice + ${guice.version} + + + + + com.fasterxml.jackson.jaxrs + jackson-jaxrs-json-provider + 2.2.2 + + + + mysql + mysql-connector-java + 5.1.34 + + + javax + javaee-api + 7.0 + + + jstl + jstl + 1.2 + + + + junit + junit + 4.8.2 + test + + + + 4.0 + 2.17 + UTF-8 + + diff --git a/exercises/guice/javaee/src/main/java/oose/dea/controller/ItemsView.java b/exercises/guice/javaee/src/main/java/oose/dea/controller/ItemsView.java new file mode 100644 index 0000000..427868c --- /dev/null +++ b/exercises/guice/javaee/src/main/java/oose/dea/controller/ItemsView.java @@ -0,0 +1,29 @@ +package oose.dea.controller; + +import oose.dea.domain.Item; +import oose.dea.services.ItemService; + +import javax.inject.Inject; +import javax.inject.Singleton; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +@Singleton +@WebServlet(urlPatterns = "/viewItems") +public class ItemsView extends HttpServlet { + @Inject + private ItemService itemService; + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + List items = itemService.findAll(); + for(Item item:items) + { + response.getWriter().print(item.toString()); + } + } +} diff --git a/exercises/guice/javaee/src/main/java/oose/dea/dao/FakeItemDAO.java b/exercises/guice/javaee/src/main/java/oose/dea/dao/FakeItemDAO.java new file mode 100644 index 0000000..9014814 --- /dev/null +++ b/exercises/guice/javaee/src/main/java/oose/dea/dao/FakeItemDAO.java @@ -0,0 +1,16 @@ +package oose.dea.dao; + +import oose.dea.domain.Item; + +import java.util.ArrayList; +import java.util.List; + +public class FakeItemDAO implements ItemDAO { + @Override + public List list() { + List items = new ArrayList(); + items.add(new Item("Frikandel", "Snacks", "Lekker wel!")); + items.add(new Item("Kroket", "Snacks", "Ook lekker in bed!")); + return items; + } +} diff --git a/exercises/guice/javaee/src/main/java/oose/dea/dao/ItemDAO.java b/exercises/guice/javaee/src/main/java/oose/dea/dao/ItemDAO.java new file mode 100644 index 0000000..d2d4c41 --- /dev/null +++ b/exercises/guice/javaee/src/main/java/oose/dea/dao/ItemDAO.java @@ -0,0 +1,9 @@ +package oose.dea.dao; + +import oose.dea.domain.Item; + +import java.util.List; + +public interface ItemDAO { + List list(); +} diff --git a/exercises/guice/javaee/src/main/java/oose/dea/domain/Item.java b/exercises/guice/javaee/src/main/java/oose/dea/domain/Item.java new file mode 100644 index 0000000..4b40a0c --- /dev/null +++ b/exercises/guice/javaee/src/main/java/oose/dea/domain/Item.java @@ -0,0 +1,48 @@ +package oose.dea.domain; + +public class Item { + private String sku; + private String category; + private String title; + + public Item(){} + + public Item(String sku, String category, String title) { + this.sku = sku; + this.category = category; + this.title = title; + } + + public String getSku() { + return sku; + } + + public void setSku(String sku) { + this.sku = sku; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + @Override + public String toString() { + return "Item{" + + "sku='" + sku + '\'' + + ", category='" + category + '\'' + + ", title='" + title + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/exercises/guice/javaee/src/main/java/oose/dea/guice/AppBinding.java b/exercises/guice/javaee/src/main/java/oose/dea/guice/AppBinding.java new file mode 100644 index 0000000..7238f53 --- /dev/null +++ b/exercises/guice/javaee/src/main/java/oose/dea/guice/AppBinding.java @@ -0,0 +1,18 @@ +package oose.dea.guice; + +import com.google.inject.servlet.ServletModule; +import oose.dea.controller.ItemsView; +import oose.dea.dao.FakeItemDAO; +import oose.dea.dao.ItemDAO; +import oose.dea.services.ItemService; +import oose.dea.services.local.LocalItemService; + +public class AppBinding extends ServletModule { + @Override + protected void configureServlets() { + super.configureServlets(); + serve("/viewItems").with(ItemsView.class); + bind(ItemService.class).to(LocalItemService.class); + bind(ItemDAO.class).to(FakeItemDAO.class); + } +} \ No newline at end of file diff --git a/exercises/guice/javaee/src/main/java/oose/dea/guice/GuiceServletConfig.java b/exercises/guice/javaee/src/main/java/oose/dea/guice/GuiceServletConfig.java new file mode 100644 index 0000000..745a0a3 --- /dev/null +++ b/exercises/guice/javaee/src/main/java/oose/dea/guice/GuiceServletConfig.java @@ -0,0 +1,15 @@ +package oose.dea.guice; + +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.servlet.GuiceServletContextListener; + +import javax.servlet.annotation.WebListener; + +@WebListener +public class GuiceServletConfig extends GuiceServletContextListener { + @Override + protected Injector getInjector() { + return Guice.createInjector(new AppBinding()); + } +} \ No newline at end of file diff --git a/exercises/guice/javaee/src/main/java/oose/dea/guice/GuiceWebFilter.java b/exercises/guice/javaee/src/main/java/oose/dea/guice/GuiceWebFilter.java new file mode 100644 index 0000000..264531b --- /dev/null +++ b/exercises/guice/javaee/src/main/java/oose/dea/guice/GuiceWebFilter.java @@ -0,0 +1,18 @@ +package oose.dea.guice; + +import com.google.inject.servlet.GuiceFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.annotation.WebFilter; +import java.io.IOException; + +@WebFilter("/*") +public class GuiceWebFilter extends GuiceFilter { + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + super.doFilter(servletRequest, servletResponse, filterChain); + } +} diff --git a/exercises/guice/javaee/src/main/java/oose/dea/services/ItemService.java b/exercises/guice/javaee/src/main/java/oose/dea/services/ItemService.java new file mode 100644 index 0000000..2ef9f6b --- /dev/null +++ b/exercises/guice/javaee/src/main/java/oose/dea/services/ItemService.java @@ -0,0 +1,9 @@ +package oose.dea.services; + +import oose.dea.domain.Item; + +import java.util.List; + +public interface ItemService { + List findAll(); +} diff --git a/exercises/guice/javaee/src/main/java/oose/dea/services/local/LocalItemService.java b/exercises/guice/javaee/src/main/java/oose/dea/services/local/LocalItemService.java new file mode 100644 index 0000000..ef98acf --- /dev/null +++ b/exercises/guice/javaee/src/main/java/oose/dea/services/local/LocalItemService.java @@ -0,0 +1,18 @@ +package oose.dea.services.local; + +import oose.dea.dao.ItemDAO; +import oose.dea.domain.Item; +import oose.dea.services.ItemService; + +import javax.inject.Inject; +import java.util.List; + +public class LocalItemService implements ItemService { + @Inject + private ItemDAO itemDAO; + + @Override + public List findAll() { + return itemDAO.list(); + } +} diff --git a/exercises/guice/javaee/src/main/java/oose/dea/services/rest/ItemRestService.java b/exercises/guice/javaee/src/main/java/oose/dea/services/rest/ItemRestService.java new file mode 100644 index 0000000..81ea864 --- /dev/null +++ b/exercises/guice/javaee/src/main/java/oose/dea/services/rest/ItemRestService.java @@ -0,0 +1,26 @@ + +package oose.dea.services.rest; + +import oose.dea.dao.ItemDAO; +import oose.dea.domain.Item; +import oose.dea.services.ItemService; + +import javax.inject.Inject; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import java.util.List; + +@Path("/items") +public class ItemRestService implements ItemService { + + @Inject + private ItemDAO itemDAO; + + @GET + @Produces(MediaType.APPLICATION_JSON) + public List findAll() { + return itemDAO.list(); + } +} diff --git a/exercises/guice/javaee/src/main/java/oose/dea/services/rest/RestResourceConfig.java b/exercises/guice/javaee/src/main/java/oose/dea/services/rest/RestResourceConfig.java new file mode 100644 index 0000000..a2b7437 --- /dev/null +++ b/exercises/guice/javaee/src/main/java/oose/dea/services/rest/RestResourceConfig.java @@ -0,0 +1,26 @@ +package oose.dea.services.rest; + +import com.google.inject.Guice; +import oose.dea.guice.AppBinding; +import org.glassfish.hk2.api.ServiceLocator; +import org.glassfish.jersey.server.ResourceConfig; +import org.jvnet.hk2.guice.bridge.api.GuiceBridge; +import org.jvnet.hk2.guice.bridge.api.GuiceIntoHK2Bridge; + +import javax.inject.Inject; +import javax.ws.rs.ApplicationPath; + +@ApplicationPath("/rest") +class RestResourceConfig extends ResourceConfig { + public static final String JSON_SERIALIZER = "jersey.config.server.provider.packages"; + public static final String JACKSON_JSON_SERIALIZER = "com.fasterxml.jackson.jaxrs.json;service"; + + @Inject + public RestResourceConfig(ServiceLocator serviceLocator) { + packages(true, "oose.dea.services.rest"); + property(JSON_SERIALIZER, JACKSON_JSON_SERIALIZER); + GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator); + GuiceIntoHK2Bridge guiceBridge = serviceLocator.getService(GuiceIntoHK2Bridge.class); + guiceBridge.bridgeGuiceInjector(Guice.createInjector(new AppBinding())); + } +} \ No newline at end of file diff --git a/exercises/guice/javaee/src/main/webapp/WEB-INF/web.xml b/exercises/guice/javaee/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..287a892 --- /dev/null +++ b/exercises/guice/javaee/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,7 @@ + + \ No newline at end of file diff --git a/exercises/guice/simple/README.md b/exercises/guice/simple/README.md new file mode 100644 index 0000000..448f124 --- /dev/null +++ b/exercises/guice/simple/README.md @@ -0,0 +1 @@ +Run the main-method of OrderService and see that stuff works. Check whether the unit tests still pass (they're supposed to). diff --git a/exercises/guice/simple/pom.xml b/exercises/guice/simple/pom.xml new file mode 100644 index 0000000..12e0166 --- /dev/null +++ b/exercises/guice/simple/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + + nl.oose.dea + DIP-Example + 1.0-SNAPSHOT + + + + junit + junit + 4.11 + + + javax.mail + mail + 1.4 + + + org.mockito + mockito-all + 1.9.5 + + + com.google.inject + guice + 4.0 + + + \ No newline at end of file diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/CafetariaReservationService.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/CafetariaReservationService.java new file mode 100644 index 0000000..90b806f --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/CafetariaReservationService.java @@ -0,0 +1,21 @@ +package nl.oose.dea.orderservice.withdip; + +public class CafetariaReservationService implements ReservationService { + private InventorySystem inventorySystem = new InventorySystem(); + + public void reserveInventory(Cart cart) { + for(Item item : cart.getItems()) + { + try { + inventorySystem.reserve(item.sku, item.quantity); + } catch(InsufficientInventoryException insufficientInventoryException) + { + throw new OrderException("Insufficient inventory for item " + item.sku, insufficientInventoryException); + } + } + } + + public boolean isOnStock(String product, int amount) { + return inventorySystem.isOnStock(product, amount); + } +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/Cart.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/Cart.java new file mode 100644 index 0000000..25d03a3 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/Cart.java @@ -0,0 +1,31 @@ +package nl.oose.dea.orderservice.withdip; + +public class Cart { + private Item[] items; + private String customerName; + private int amount; + private String customerEmail; + + public Cart(String customerName, String customerEmail, Item[] items, int amount){ + this.customerName = customerName; + this.customerEmail = customerEmail; + this.items = items; + this.amount = amount; + } + + public Item[] getItems() { + return items; + } + + public String getCustomerName() { + return customerName; + } + + public int getBillingTotal() { + return amount; + } + + public String getCustomerEmail() { + return customerEmail; + } +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/CartProvider.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/CartProvider.java new file mode 100644 index 0000000..a192c96 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/CartProvider.java @@ -0,0 +1,11 @@ +package nl.oose.dea.orderservice.withdip; + +import com.google.inject.Provider; +import com.google.inject.Provides; + +public class CartProvider implements Provider{ + @Provides + public Cart get() { + return new Cart("OOSE", "oose@gmail.com", new Item[] { new Item("Frikandel", 10)}, 100); + } +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/FakeMailClient.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/FakeMailClient.java new file mode 100644 index 0000000..2f4ca6a --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/FakeMailClient.java @@ -0,0 +1,13 @@ +package nl.oose.dea.orderservice.withdip; + +import javax.mail.MessagingException; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class FakeMailClient implements MailClient { + private Logger logger = Logger.getLogger(getClass().getName()); + + public void send(String message, String customerEmail) throws MessagingException { + logger.log(Level.INFO, message + " sent to " + customerEmail); + } +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/GMailClient.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/GMailClient.java new file mode 100644 index 0000000..e93657b --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/GMailClient.java @@ -0,0 +1,42 @@ +package nl.oose.dea.orderservice.withdip; + +import javax.mail.*; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeMessage; +import java.util.Properties; + +public class GMailClient implements MailClient { + private final static String USERNAME = ""; + private final static String PASSWORD = ""; + + public void send(String message, String customerEmail) throws MessagingException { + Transport.send(prepareMessage(message, customerEmail)); + } + + private Message prepareMessage(String messageBody, String customerEmail) throws MessagingException { + Message message = new MimeMessage(setGoogleSession(prepareSMTPProperties())); + message.setFrom(new InternetAddress(USERNAME)); + message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(customerEmail)); + message.setSubject(messageBody); + message.setText(messageBody); + return message; + } + + private Properties prepareSMTPProperties() { + Properties props = new Properties(); + props.put("mail.smtp.auth", "true"); + props.put("mail.smtp.starttls.enable", "true"); + props.put("mail.smtp.host", "smtp.gmail.com"); + props.put("mail.smtp.port", "587"); + return props; + } + + private Session setGoogleSession(Properties props) { + return Session.getInstance(props, + new Authenticator() { + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(USERNAME, PASSWORD); + } + }); + } +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/InsufficientInventoryException.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/InsufficientInventoryException.java new file mode 100644 index 0000000..37e8970 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/InsufficientInventoryException.java @@ -0,0 +1,4 @@ +package nl.oose.dea.orderservice.withdip; + +public class InsufficientInventoryException extends Exception{ +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/InventorySystem.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/InventorySystem.java new file mode 100644 index 0000000..204cb72 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/InventorySystem.java @@ -0,0 +1,26 @@ +package nl.oose.dea.orderservice.withdip; + +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Logger; + +public class InventorySystem { + private Logger logger = Logger.getLogger(getClass().getName()); + + private Map inventory = new HashMap() {{ + put("Frikandel", 20); + put("Bamihap", 25); + put("Mexicano", 50); + }}; + + public void reserve(String sku, int quantity) throws InsufficientInventoryException { + if (isOnStock(sku, quantity)) + inventory.put(sku, inventory.get(sku) - quantity); + else throw new InsufficientInventoryException(); + logger.info("There is still " + inventory.get(sku) + " of " + sku + " left in inventory"); + } + + public boolean isOnStock(String sku, int quantity) { + return inventory.get(sku) >= quantity; + } +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/Item.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/Item.java new file mode 100644 index 0000000..87343d8 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/Item.java @@ -0,0 +1,12 @@ +package nl.oose.dea.orderservice.withdip; + +public class Item { + public String sku; + public int quantity; + + public Item(String sku, int quantity) + { + this.sku = sku; + this.quantity = quantity; + } +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/LoggingPaymentProcessor.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/LoggingPaymentProcessor.java new file mode 100644 index 0000000..5f92f3a --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/LoggingPaymentProcessor.java @@ -0,0 +1,9 @@ +package nl.oose.dea.orderservice.withdip; + +public class LoggingPaymentProcessor implements PaymentProcessor { + private PaymentGateway paymentGateway = new PaymentGateway(); + + public boolean chargeCard(PaymentDetails paymentDetails, Cart cart) { + return paymentGateway.charge(cart.getBillingTotal(), cart.getCustomerName(), paymentDetails.cardNumber); + } +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/MailClient.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/MailClient.java new file mode 100644 index 0000000..4786c7b --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/MailClient.java @@ -0,0 +1,7 @@ +package nl.oose.dea.orderservice.withdip; + +import javax.mail.MessagingException; + +public interface MailClient { + void send(String message, String customerEmail) throws MessagingException; +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/MailNotificationService.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/MailNotificationService.java new file mode 100644 index 0000000..1f5ad67 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/MailNotificationService.java @@ -0,0 +1,25 @@ +package nl.oose.dea.orderservice.withdip; + +import javax.inject.Inject; +import javax.mail.MessagingException; +import java.util.logging.Logger; + +public class MailNotificationService implements NotificationService { + private Logger logger = Logger.getLogger(getClass().getName()); + private MailClient mailClient; + + @Inject + public MailNotificationService(MailClient mailClient) + { + this.mailClient = mailClient; + } + + public void notifyCustomer(Cart cart) { + try { + mailClient.send("Your order is processed.", cart.getCustomerEmail()); + } catch (MessagingException e) { + logger.severe(e.getMessage()); + throw new OrderException("Cannot send mail to " + cart.getCustomerEmail(), e); + } + } +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/NotificationService.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/NotificationService.java new file mode 100644 index 0000000..643e1cd --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/NotificationService.java @@ -0,0 +1,5 @@ +package nl.oose.dea.orderservice.withdip; + +public interface NotificationService { + void notifyCustomer(Cart cart); +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/OnlineOrder.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/OnlineOrder.java new file mode 100644 index 0000000..bcea172 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/OnlineOrder.java @@ -0,0 +1,28 @@ +package nl.oose.dea.orderservice.withdip; + +import javax.inject.Inject; + +public class OnlineOrder extends Order { + private final PaymentDetails paymentDetails; + private final PaymentProcessor paymentProcessor; + private final NotificationService notificationService; + private final ReservationService reservationService; + + @Inject + public OnlineOrder(Cart cart, PaymentDetails paymentDetails, PaymentProcessor paymentProcessor, NotificationService notificationService, ReservationService reservationService) { + super(cart); + this.paymentDetails = paymentDetails; + this.paymentProcessor = paymentProcessor; + this.notificationService = notificationService; + this.reservationService = reservationService; + } + + public void checkout() { + if (paymentProcessor.chargeCard(paymentDetails, cart)) { + reservationService.reserveInventory(cart); + notificationService.notifyCustomer(cart); + } + super.checkout(); + } + +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/Order.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/Order.java new file mode 100644 index 0000000..fb17d99 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/Order.java @@ -0,0 +1,12 @@ +package nl.oose.dea.orderservice.withdip; + +public abstract class Order { + protected Cart cart; + + public Order(Cart cart) + { + this.cart = cart; + } + + public void checkout() {} +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/OrderException.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/OrderException.java new file mode 100644 index 0000000..e076758 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/OrderException.java @@ -0,0 +1,7 @@ +package nl.oose.dea.orderservice.withdip; + +public class OrderException extends RuntimeException { + public OrderException(String message, Exception originalException) { + super(message, originalException); + } +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/OrderService.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/OrderService.java new file mode 100644 index 0000000..6e71259 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/OrderService.java @@ -0,0 +1,22 @@ +package nl.oose.dea.orderservice.withdip; + +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Module; + +public class OrderService { + public static void main(String[] args) { + Module module = new AbstractModule() { + @Override + protected void configure() { + bind(NotificationService.class).to(MailNotificationService.class); + bind(PaymentProcessor.class).to(LoggingPaymentProcessor.class); + bind(ReservationService.class).to(CafetariaReservationService.class); + bind(Cart.class).toProvider(CartProvider.class); + bind(MailClient.class).to(FakeMailClient.class); + } + }; + OnlineOrder onlineOrder = Guice.createInjector(module).getInstance(OnlineOrder.class); + onlineOrder.checkout(); + } +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/POSCashOrder.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/POSCashOrder.java new file mode 100644 index 0000000..b1f08a6 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/POSCashOrder.java @@ -0,0 +1,7 @@ +package nl.oose.dea.orderservice.withdip; + +public class POSCashOrder extends Order { + public POSCashOrder(Cart cart) { + super(cart); + } +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/POSCreditOrder.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/POSCreditOrder.java new file mode 100644 index 0000000..04b7d04 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/POSCreditOrder.java @@ -0,0 +1,18 @@ +package nl.oose.dea.orderservice.withdip; + +public class POSCreditOrder extends Order { + private final PaymentDetails paymentDetails; + private final PaymentProcessor paymentProcessor; + + public POSCreditOrder(Cart cart, PaymentDetails paymentDetails, PaymentProcessor paymentProcessor) { + super(cart); + this.paymentDetails = paymentDetails; + this.paymentProcessor = paymentProcessor; + } + + public void checkout() { + paymentProcessor.chargeCard(paymentDetails, cart); + super.checkout(); + } + +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/PaymentDetails.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/PaymentDetails.java new file mode 100644 index 0000000..abf4471 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/PaymentDetails.java @@ -0,0 +1,6 @@ +package nl.oose.dea.orderservice.withdip; + +public class PaymentDetails { + public PaymentMethod paymentMethod; + public int cardNumber; +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/PaymentDetailsFactory.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/PaymentDetailsFactory.java new file mode 100644 index 0000000..c36e0d2 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/PaymentDetailsFactory.java @@ -0,0 +1,10 @@ +package nl.oose.dea.orderservice.withdip; + +public class PaymentDetailsFactory { + public PaymentDetails create() { + PaymentDetails paymentDetails = new PaymentDetails(); + paymentDetails.paymentMethod = PaymentMethod.CreditCard; + paymentDetails.cardNumber = 1234; + return paymentDetails; + } +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/PaymentGateway.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/PaymentGateway.java new file mode 100644 index 0000000..41f8fb9 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/PaymentGateway.java @@ -0,0 +1,13 @@ +package nl.oose.dea.orderservice.withdip; + +import java.util.logging.Level; +import java.util.logging.Logger; + +public class PaymentGateway { + private Logger logger = Logger.getLogger(getClass().getName()); + + public boolean charge(int amount, String customerName, int cardNumber) { + logger.log(Level.INFO, "Charged " + customerName + " EUR " + amount + " on card: " + cardNumber); + return true; + } +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/PaymentMethod.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/PaymentMethod.java new file mode 100644 index 0000000..404d6a2 --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/PaymentMethod.java @@ -0,0 +1,5 @@ +package nl.oose.dea.orderservice.withdip; + +public enum PaymentMethod { + CreditCard +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/PaymentProcessor.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/PaymentProcessor.java new file mode 100644 index 0000000..e725f0d --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/PaymentProcessor.java @@ -0,0 +1,5 @@ +package nl.oose.dea.orderservice.withdip; + +public interface PaymentProcessor { + boolean chargeCard(PaymentDetails paymentDetails, Cart cart); +} diff --git a/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/ReservationService.java b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/ReservationService.java new file mode 100644 index 0000000..cd0c1aa --- /dev/null +++ b/exercises/guice/simple/src/main/java/nl/oose/dea/orderservice/withdip/ReservationService.java @@ -0,0 +1,7 @@ +package nl.oose.dea.orderservice.withdip; + +public interface ReservationService { + void reserveInventory(Cart cart); + + boolean isOnStock(String product, int amount); +} diff --git a/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/NotificationServiceTest.java b/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/NotificationServiceTest.java new file mode 100644 index 0000000..5614a6b --- /dev/null +++ b/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/NotificationServiceTest.java @@ -0,0 +1,16 @@ +package nl.oose.dea.orderservice.withdip; + +import org.junit.Test; + +public class NotificationServiceTest { + + @Test(expected = OrderException.class) + public void youCannotSendAMailUsingGmailWithAnEmptyUsernameAndPass() throws Exception { + NotificationService notificationService = new MailNotificationService(new GMailClient()); + notificationService.notifyCustomer(createCart()); + } + + private Cart createCart() { + return new CartProvider().get(); + } +} \ No newline at end of file diff --git a/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/OnlineOrderTest.java b/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/OnlineOrderTest.java new file mode 100644 index 0000000..672fa28 --- /dev/null +++ b/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/OnlineOrderTest.java @@ -0,0 +1,53 @@ +package nl.oose.dea.orderservice.withdip; + +import org.junit.Test; +import org.mockito.InOrder; + +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.*; + +public class OnlineOrderTest { + private PaymentProcessor paymentProcessor = mock(PaymentProcessor.class); + private NotificationService notificationService = mock(NotificationService.class); + private ReservationService reservationService = mock(ReservationService.class); + + @Test + public void checkoutOnlineOrder() + { + // Create an order and pass all its dependencies. For unit tesing purposes we inject mock objects for the dependencies + Cart cart = createCart(); + PaymentDetails paymentDetails = createPaymentDetails(); + Order order = new OnlineOrder(cart, paymentDetails, setupPaymentProcessor(), setupNotificationService(), setupReservationService()); + order.checkout(); + + InOrder inOrder = inOrder(paymentProcessor, reservationService, notificationService); + inOrder.verify(paymentProcessor, times(1)).chargeCard(paymentDetails, cart); + inOrder.verify(reservationService, times(1)).reserveInventory(cart); + inOrder.verify(reservationService, never()).isOnStock(anyString(), anyInt()); + inOrder.verify(notificationService, times(1)).notifyCustomer(cart); + } + + private ReservationService setupReservationService() { + return reservationService; + } + + private NotificationService setupNotificationService() { + return notificationService; + } + + private PaymentProcessor setupPaymentProcessor() { + // always return true, enough for now + when(paymentProcessor.chargeCard(any(PaymentDetails.class), any(Cart.class))).thenReturn(true); + return paymentProcessor; + } + + + private Cart createCart() { + return new CartProvider().get(); + } + + private PaymentDetails createPaymentDetails() + { + return new PaymentDetailsFactory().create(); + } +} diff --git a/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/POSCashOrderTest.java b/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/POSCashOrderTest.java new file mode 100644 index 0000000..952c7e0 --- /dev/null +++ b/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/POSCashOrderTest.java @@ -0,0 +1,17 @@ +package nl.oose.dea.orderservice.withdip; + +import org.junit.Test; + +public class POSCashOrderTest { + @Test + public void checkoutOnlineOrder() + { + // Hah, still works, POSCashOrder has no other dependencies + Order order = new POSCashOrder(createCart()); + order.checkout(); + } + + private Cart createCart() { + return new CartProvider().get(); + } +} diff --git a/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/POSCreditOrderTest.java b/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/POSCreditOrderTest.java new file mode 100644 index 0000000..a270202 --- /dev/null +++ b/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/POSCreditOrderTest.java @@ -0,0 +1,36 @@ +package nl.oose.dea.orderservice.withdip; + +import org.junit.Test; + +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.*; + +public class POSCreditOrderTest { + + private PaymentProcessor paymentProcessor = mock(PaymentProcessor.class); + + @Test + public void checkoutOnlineOrder() + { + // Create an order and pass all its dependencies. For unit tesing purposes we inject mock objects for the dependencies + Order order = new POSCreditOrder(createCart(), createPaymentDetails(), setupPaymentProcessor()); + order.checkout(); + + verify(paymentProcessor, times(1)).chargeCard(any(PaymentDetails.class), any(Cart.class)); + } + + private PaymentProcessor setupPaymentProcessor() { + // always return true, enough for now + when(paymentProcessor.chargeCard(any(PaymentDetails.class), any(Cart.class))).thenReturn(true); + return paymentProcessor; + } + + private Cart createCart() { + return new CartProvider().get(); + } + + private PaymentDetails createPaymentDetails() + { + return new PaymentDetailsFactory().create(); + } +} diff --git a/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/PaymentProcessorTest.java b/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/PaymentProcessorTest.java new file mode 100644 index 0000000..3e1072d --- /dev/null +++ b/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/PaymentProcessorTest.java @@ -0,0 +1,23 @@ +package nl.oose.dea.orderservice.withdip; + +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +public class PaymentProcessorTest { + + @Test + public void testCharge() throws Exception { + PaymentProcessor paymentProcessor = new LoggingPaymentProcessor(); + assertTrue(paymentProcessor.chargeCard(createPaymentDetails(),createCart())); + } + + private Cart createCart() { + return new CartProvider().get(); + } + + private PaymentDetails createPaymentDetails() + { + return new PaymentDetailsFactory().create(); + } +} \ No newline at end of file diff --git a/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/ReservationServiceTest.java b/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/ReservationServiceTest.java new file mode 100644 index 0000000..ed5388e --- /dev/null +++ b/exercises/guice/simple/src/test/java/nl/oose/dea/orderservice/withdip/ReservationServiceTest.java @@ -0,0 +1,35 @@ +package nl.oose.dea.orderservice.withdip; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +public class ReservationServiceTest { + private ReservationService reservationService; + + @Before + public void setUp() + { + reservationService = new CafetariaReservationService(); + } + + @Test + public void buyAllFrikandellen() throws Exception { + reservationService.reserveInventory(createCartWithSufficientInventory()); + assertTrue(reservationService.isOnStock("Frikandel", 0)); + } + + private Cart createCartWithSufficientInventory() { + return new Cart("OOSE","oose@gmail.com", new Item[] { new Item("Frikandel", 20) }, 50); + } + + private Cart createCartWithInsufficientInventory() { + return new Cart("OOSE","oose@gmail.com", new Item[] { new Item("Frikandel", 21) }, 50); + } + + @Test(expected = OrderException.class) + public void youCannotBuyMoreThanAvailableInTheInventory() throws Exception { + reservationService.reserveInventory(createCartWithInsufficientInventory()); + } +} \ No newline at end of file diff --git a/exercises/jaxrs-rest/README.md b/exercises/jaxrs-rest/README.md new file mode 100644 index 0000000..b41e07a --- /dev/null +++ b/exercises/jaxrs-rest/README.md @@ -0,0 +1,2 @@ +* Build the project and run it using TomEE +* Visit http://localhost:8080/items \ No newline at end of file diff --git a/exercises/jaxrs-rest/pom.xml b/exercises/jaxrs-rest/pom.xml new file mode 100644 index 0000000..4c52455 --- /dev/null +++ b/exercises/jaxrs-rest/pom.xml @@ -0,0 +1,39 @@ + + 4.0.0 + oose.dea + simple-jaxrs-rest + war + 1.0-SNAPSHOT + Simple JAX-RS Webapp + + Simple + + + org.apache.maven.plugins + maven-compiler-plugin + true + + 1.8 + 1.8 + + + + + + + javax + javaee-api + 7.0 + + + junit + junit + 4.8.2 + test + + + + UTF-8 + + diff --git a/exercises/jaxrs-rest/src/main/java/oose/dea/services/rest/Item.java b/exercises/jaxrs-rest/src/main/java/oose/dea/services/rest/Item.java new file mode 100644 index 0000000..a691059 --- /dev/null +++ b/exercises/jaxrs-rest/src/main/java/oose/dea/services/rest/Item.java @@ -0,0 +1,39 @@ +package oose.dea.services.rest; + +public class Item { + private String sku; + private String category; + private String title; + + public Item(){} + + public Item(String sku, String category, String title) { + this.sku = sku; + this.category = category; + this.title = title; + } + + public String getSku() { + return sku; + } + + public void setSku(String sku) { + this.sku = sku; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } +} diff --git a/exercises/jaxrs-rest/src/main/java/oose/dea/services/rest/ItemRestService.java b/exercises/jaxrs-rest/src/main/java/oose/dea/services/rest/ItemRestService.java new file mode 100644 index 0000000..baa3bf6 --- /dev/null +++ b/exercises/jaxrs-rest/src/main/java/oose/dea/services/rest/ItemRestService.java @@ -0,0 +1,53 @@ +package oose.dea.services.rest; + +import javax.inject.Singleton; +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.ArrayList; +import java.util.List; + +@Path("/items") +@Singleton +public class ItemRestService { + private List items = new ArrayList(); + + public ItemRestService() + { + items.add(new Item("Bread", "Breakfast", "Delicious!")); + items.add(new Item("Butter", "Breakfast", "Use it with bread")); + } + + @GET + @Produces(MediaType.TEXT_PLAIN) + public String getTextItems() + { + return "bread, butter"; + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + public List getJsonItems() { + return items; + } + + @GET + @Path("/{sku}") + @Produces(MediaType.APPLICATION_JSON) + public Item getJsonItem(@PathParam("sku") final String sku) { + return items.stream().filter((item) -> item.getSku().equals(sku)).findAny().get(); + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + public void addItem(Item item) + { + items.add(item); + } + + @DELETE + @Path("/{sku}") + public void deleteItem(@PathParam("sku") final String sku) + { + items.removeIf(item -> item.getSku().equals(sku)); + } +} diff --git a/exercises/jaxrs-rest/src/main/webapp/WEB-INF/web.xml b/exercises/jaxrs-rest/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..287a892 --- /dev/null +++ b/exercises/jaxrs-rest/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,7 @@ + + \ No newline at end of file diff --git a/exercises/jdbc/README.md b/exercises/jdbc/README.md new file mode 100644 index 0000000..58990ab --- /dev/null +++ b/exercises/jdbc/README.md @@ -0,0 +1 @@ +Run the main-method in JdbcApp. \ No newline at end of file diff --git a/exercises/jdbc/pom.xml b/exercises/jdbc/pom.xml new file mode 100644 index 0000000..4a9fa51 --- /dev/null +++ b/exercises/jdbc/pom.xml @@ -0,0 +1,45 @@ + + 4.0.0 + oose.dea + simple-jdbc-app + war + 1.0-SNAPSHOT + Simple JDBC App + + simple-jdbc-app + + + org.apache.maven.plugins + maven-compiler-plugin + true + + 1.8 + 1.8 + + + + + + + mysql + mysql-connector-java + 5.1.34 + + + com.h2database + h2 + 1.4.187 + test + + + junit + junit + 4.8.2 + test + + + + UTF-8 + + diff --git a/exercises/jdbc/src/main/java/oose/dea/JdbcApp.java b/exercises/jdbc/src/main/java/oose/dea/JdbcApp.java new file mode 100644 index 0000000..ff727f9 --- /dev/null +++ b/exercises/jdbc/src/main/java/oose/dea/JdbcApp.java @@ -0,0 +1,17 @@ +package oose.dea; + +import oose.dea.datasource.ItemDao; +import oose.dea.datasource.util.DatabaseProperties; +import oose.dea.domain.Item; + +import java.io.IOException; +import java.util.List; + +public class JdbcApp { + public static void main(String[] args) throws IOException { + ItemDao itemDao = new ItemDao(new DatabaseProperties()); + List items = itemDao.findAll(); + for(Item item:items) + System.out.println(item); + } +} diff --git a/exercises/jdbc/src/main/java/oose/dea/datasource/ItemDao.java b/exercises/jdbc/src/main/java/oose/dea/datasource/ItemDao.java new file mode 100644 index 0000000..ba5fc88 --- /dev/null +++ b/exercises/jdbc/src/main/java/oose/dea/datasource/ItemDao.java @@ -0,0 +1,63 @@ +package oose.dea.datasource; + +import oose.dea.datasource.util.DatabaseProperties; +import oose.dea.domain.Item; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class ItemDao { + private Logger logger = Logger.getLogger(getClass().getName()); + + private DatabaseProperties databaseProperties; + + public ItemDao(DatabaseProperties databaseProperties) + { + this.databaseProperties = databaseProperties; + tryLoadJdbcDriver(databaseProperties); + } + + public List findAll() { + List items = new ArrayList<>(); + tryFindAll(items); + return items; + } + + private void tryLoadJdbcDriver(DatabaseProperties databaseProperties) { + try { + Class.forName(databaseProperties.driver()); + } catch (ClassNotFoundException e) { + logger.log(Level.SEVERE, "Can't load JDBC Driver " + databaseProperties.driver(), e); + } + } + + private void tryFindAll(List items) { + try { + Connection connection = DriverManager.getConnection(databaseProperties.connectionString()); + PreparedStatement statement = connection.prepareStatement("SELECT * from items"); + addNewItemsFromDatabase(items, statement); + statement.close(); + connection.close(); + } catch (SQLException e) { + logger.log(Level.SEVERE, "Error communicating with database " + databaseProperties.connectionString(), e); + } + } + + private void addNewItemsFromDatabase(List items, PreparedStatement statement) throws SQLException { + ResultSet resultSet = statement.executeQuery(); + while (resultSet.next()) + { + addNewItemFromResultSet(items, resultSet); + } + } + + private void addNewItemFromResultSet(List items, ResultSet resultSet) throws SQLException { + Item item = new Item( + resultSet.getString("sku"), resultSet.getString("category"), resultSet.getString("title") + ); + items.add(item); + } +} diff --git a/exercises/jdbc/src/main/java/oose/dea/datasource/util/DatabaseProperties.java b/exercises/jdbc/src/main/java/oose/dea/datasource/util/DatabaseProperties.java new file mode 100644 index 0000000..a5a84ba --- /dev/null +++ b/exercises/jdbc/src/main/java/oose/dea/datasource/util/DatabaseProperties.java @@ -0,0 +1,31 @@ +package oose.dea.datasource.util; + +import java.io.IOException; +import java.util.Properties; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class DatabaseProperties { + private Logger logger = Logger.getLogger(getClass().getName()); + private Properties properties; + + public DatabaseProperties() { + properties = new Properties(); + try { + properties.load(getClass().getClassLoader().getResourceAsStream("database.properties")); + } catch (IOException e) { + logger.log(Level.SEVERE, "Can't access property file database.properties", e); + } + } + + public String driver() + { + return properties.getProperty("driver"); + } + + public String connectionString() + { + return properties.getProperty("connectionString"); + } + +} diff --git a/exercises/jdbc/src/main/java/oose/dea/domain/Item.java b/exercises/jdbc/src/main/java/oose/dea/domain/Item.java new file mode 100644 index 0000000..c384e5c --- /dev/null +++ b/exercises/jdbc/src/main/java/oose/dea/domain/Item.java @@ -0,0 +1,48 @@ +package oose.dea.domain; + +public class Item { + private String sku; + private String category; + private String title; + + public Item(){} + + public Item(String sku, String category, String title) { + this.sku = sku; + this.category = category; + this.title = title; + } + + public String getSku() { + return sku; + } + + public void setSku(String sku) { + this.sku = sku; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + @Override + public String toString() { + return "Item{" + + "sku='" + sku + '\'' + + ", category='" + category + '\'' + + ", title='" + title + '\'' + + '}'; + } +} diff --git a/exercises/jdbc/src/main/resources/database.properties b/exercises/jdbc/src/main/resources/database.properties new file mode 100644 index 0000000..3352e67 --- /dev/null +++ b/exercises/jdbc/src/main/resources/database.properties @@ -0,0 +1,2 @@ +driver=com.mysql.jdbc.Driver +connectionString=jdbc:mysql://localhost/items?user=YOUR_USER&password=YOUR_PASSWORD \ No newline at end of file diff --git a/exercises/jdbc/src/test/java/oose/dea/datasource/ItemDaoTest.java b/exercises/jdbc/src/test/java/oose/dea/datasource/ItemDaoTest.java new file mode 100644 index 0000000..e830d6c --- /dev/null +++ b/exercises/jdbc/src/test/java/oose/dea/datasource/ItemDaoTest.java @@ -0,0 +1,35 @@ +package oose.dea.datasource; + +import oose.dea.datasource.util.DatabaseProperties; +import oose.dea.datasource.util.ScriptRunner; +import org.junit.Before; +import org.junit.Test; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +import static org.junit.Assert.assertEquals; + +public class ItemDaoTest { + private ItemDao itemDao; + + @Before + public void setup() throws SQLException, IOException { + DatabaseProperties databaseProperties = new DatabaseProperties(); + Connection connection = DriverManager.getConnection(databaseProperties.connectionString()); + ScriptRunner scriptRunner = new ScriptRunner(connection, true, true); + scriptRunner.runScript(new InputStreamReader(ClassLoader.getSystemResourceAsStream("import.sql"))); + connection.close(); + + itemDao = new ItemDao(databaseProperties); + } + + @Test + public void findAllShouldReturnOneItem() + { + assertEquals(1, itemDao.findAll().size()); + } +} diff --git a/exercises/jdbc/src/test/java/oose/dea/datasource/util/ScriptRunner.java b/exercises/jdbc/src/test/java/oose/dea/datasource/util/ScriptRunner.java new file mode 100644 index 0000000..ab3d004 --- /dev/null +++ b/exercises/jdbc/src/test/java/oose/dea/datasource/util/ScriptRunner.java @@ -0,0 +1,248 @@ +package oose.dea.datasource.util; + +/* + * Slightly modified version of the com.ibatis.common.jdbc.ScriptRunner class + * from the iBATIS Apache project. Only removed dependency on Resource class + * and a constructor + */ +/* + * Copyright 2004 Clinton Begin + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import java.io.IOException; +import java.io.LineNumberReader; +import java.io.PrintWriter; +import java.io.Reader; +import java.sql.*; + +/** + * Tool to run database scripts + */ +public class ScriptRunner { + + private static final String DEFAULT_DELIMITER = ";"; + + private Connection connection; + + private boolean stopOnError; + private boolean autoCommit; + + private PrintWriter logWriter = new PrintWriter(System.out); + private PrintWriter errorLogWriter = new PrintWriter(System.err); + + private String delimiter = DEFAULT_DELIMITER; + private boolean fullLineDelimiter = false; + + /** + * Default constructor + */ + public ScriptRunner(Connection connection, boolean autoCommit, + boolean stopOnError) { + this.connection = connection; + this.autoCommit = autoCommit; + this.stopOnError = stopOnError; + } + + public void setDelimiter(String delimiter, boolean fullLineDelimiter) { + this.delimiter = delimiter; + this.fullLineDelimiter = fullLineDelimiter; + } + + /** + * Setter for logWriter property + * + * @param logWriter + * - the new value of the logWriter property + */ + public void setLogWriter(PrintWriter logWriter) { + this.logWriter = logWriter; + } + + /** + * Setter for errorLogWriter property + * + * @param errorLogWriter + * - the new value of the errorLogWriter property + */ + public void setErrorLogWriter(PrintWriter errorLogWriter) { + this.errorLogWriter = errorLogWriter; + } + + /** + * Runs an SQL script (read in using the Reader parameter) + * + * @param reader + * - the source of the script + */ + public void runScript(Reader reader) throws IOException, SQLException { + try { + boolean originalAutoCommit = connection.getAutoCommit(); + try { + if (originalAutoCommit != this.autoCommit) { + connection.setAutoCommit(this.autoCommit); + } + runScript(connection, reader); + } finally { + connection.setAutoCommit(originalAutoCommit); + } + } catch (IOException e) { + throw e; + } catch (SQLException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException("Error running script. Cause: " + e, e); + } + } + + /** + * Runs an SQL script (read in using the Reader parameter) using the + * connection passed in + * + * @param conn + * - the connection to use for the script + * @param reader + * - the source of the script + * @throws SQLException + * if any SQL errors occur + * @throws IOException + * if there is an error reading from the Reader + */ + private void runScript(Connection conn, Reader reader) throws IOException, + SQLException { + StringBuffer command = null; + try { + LineNumberReader lineReader = new LineNumberReader(reader); + String line = null; + while ((line = lineReader.readLine()) != null) { + if (command == null) { + command = new StringBuffer(); + } + String trimmedLine = line.trim(); + if (trimmedLine.startsWith("--")) { + println(trimmedLine); + } else if (trimmedLine.length() < 1 + || trimmedLine.startsWith("//")) { + // Do nothing + } else if (trimmedLine.length() < 1 + || trimmedLine.startsWith("--")) { + // Do nothing + } else if (!fullLineDelimiter + && trimmedLine.endsWith(getDelimiter()) + || fullLineDelimiter + && trimmedLine.equals(getDelimiter())) { + command.append(line.substring(0, line + .lastIndexOf(getDelimiter()))); + command.append(" "); + Statement statement = conn.createStatement(); + + println(command); + + boolean hasResults = false; + if (stopOnError) { + hasResults = statement.execute(command.toString()); + } else { + try { + statement.execute(command.toString()); + } catch (SQLException e) { + e.fillInStackTrace(); + printlnError("Error executing: " + command); + printlnError(e); + } + } + + if (autoCommit && !conn.getAutoCommit()) { + conn.commit(); + } + + ResultSet rs = statement.getResultSet(); + if (hasResults && rs != null) { + ResultSetMetaData md = rs.getMetaData(); + int cols = md.getColumnCount(); + for (int i = 0; i < cols; i++) { + String name = md.getColumnLabel(i); + print(name + "\t"); + } + println(""); + while (rs.next()) { + for (int i = 0; i < cols; i++) { + String value = rs.getString(i); + print(value + "\t"); + } + println(""); + } + } + + command = null; + try { + statement.close(); + } catch (Exception e) { + // Ignore to workaround a bug in Jakarta DBCP + } + Thread.yield(); + } else { + command.append(line); + command.append(" "); + } + } + if (!autoCommit) { + conn.commit(); + } + } catch (SQLException e) { + e.fillInStackTrace(); + printlnError("Error executing: " + command); + printlnError(e); + throw e; + } catch (IOException e) { + e.fillInStackTrace(); + printlnError("Error executing: " + command); + printlnError(e); + throw e; + } finally { + conn.rollback(); + flush(); + } + } + + private String getDelimiter() { + return delimiter; + } + + private void print(Object o) { + if (logWriter != null) { + System.out.print(o); + } + } + + private void println(Object o) { + if (logWriter != null) { + logWriter.println(o); + } + } + + private void printlnError(Object o) { + if (errorLogWriter != null) { + errorLogWriter.println(o); + } + } + + private void flush() { + if (logWriter != null) { + logWriter.flush(); + } + if (errorLogWriter != null) { + errorLogWriter.flush(); + } + } +} \ No newline at end of file diff --git a/exercises/jdbc/src/test/resources/database.properties b/exercises/jdbc/src/test/resources/database.properties new file mode 100644 index 0000000..b9dcdd6 --- /dev/null +++ b/exercises/jdbc/src/test/resources/database.properties @@ -0,0 +1,2 @@ +driver=org.h2.Driver +connectionString=jdbc:h2:mem:simpleorder;DB_CLOSE_DELAY=-1 \ No newline at end of file diff --git a/exercises/jdbc/src/test/resources/import.sql b/exercises/jdbc/src/test/resources/import.sql new file mode 100644 index 0000000..3c60a67 --- /dev/null +++ b/exercises/jdbc/src/test/resources/import.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `items` ( + `id` INT(11) NOT NULL, + `category` VARCHAR(255) DEFAULT NULL, + `sku` VARCHAR(255) DEFAULT NULL, + `title` VARCHAR(255) DEFAULT NULL +); + +INSERT INTO `items` (`id`, `category`, `sku`, `title`) VALUES (1, 'Snacks', 'Bamibal', 'Ook vegetarisch verkrijgbaar'); \ No newline at end of file diff --git a/exercises/jersey-rest/README.md b/exercises/jersey-rest/README.md new file mode 100644 index 0000000..f830d15 --- /dev/null +++ b/exercises/jersey-rest/README.md @@ -0,0 +1,2 @@ +* Build the project and run it using Tomcat +* Visit http://localhost:8080/rest/items \ No newline at end of file diff --git a/exercises/jersey-rest/pom.xml b/exercises/jersey-rest/pom.xml new file mode 100644 index 0000000..32af6f4 --- /dev/null +++ b/exercises/jersey-rest/pom.xml @@ -0,0 +1,63 @@ + + 4.0.0 + oose.dea + simple-jersey-rest + war + 1.0-SNAPSHOT + Simple Jersey Webapp + + Simple + + + org.apache.maven.plugins + maven-compiler-plugin + true + + 1.8 + 1.8 + + + + + + + org.glassfish.jersey.containers + jersey-container-servlet-core + ${jersey.version} + + + org.glassfish.jersey.containers + jersey-container-servlet + ${jersey.version} + + + + + com.fasterxml.jackson.jaxrs + jackson-jaxrs-json-provider + 2.3.2 + + + + com.fasterxml.jackson.module + jackson-module-jaxb-annotations + 2.3.2 + + + javax + javaee-api + 7.0 + + + junit + junit + 4.8.2 + test + + + + 2.17 + UTF-8 + + diff --git a/exercises/jersey-rest/src/main/java/oose/dea/services/rest/Item.java b/exercises/jersey-rest/src/main/java/oose/dea/services/rest/Item.java new file mode 100644 index 0000000..a691059 --- /dev/null +++ b/exercises/jersey-rest/src/main/java/oose/dea/services/rest/Item.java @@ -0,0 +1,39 @@ +package oose.dea.services.rest; + +public class Item { + private String sku; + private String category; + private String title; + + public Item(){} + + public Item(String sku, String category, String title) { + this.sku = sku; + this.category = category; + this.title = title; + } + + public String getSku() { + return sku; + } + + public void setSku(String sku) { + this.sku = sku; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } +} diff --git a/exercises/jersey-rest/src/main/java/oose/dea/services/rest/ItemRestService.java b/exercises/jersey-rest/src/main/java/oose/dea/services/rest/ItemRestService.java new file mode 100644 index 0000000..baa3bf6 --- /dev/null +++ b/exercises/jersey-rest/src/main/java/oose/dea/services/rest/ItemRestService.java @@ -0,0 +1,53 @@ +package oose.dea.services.rest; + +import javax.inject.Singleton; +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.ArrayList; +import java.util.List; + +@Path("/items") +@Singleton +public class ItemRestService { + private List items = new ArrayList(); + + public ItemRestService() + { + items.add(new Item("Bread", "Breakfast", "Delicious!")); + items.add(new Item("Butter", "Breakfast", "Use it with bread")); + } + + @GET + @Produces(MediaType.TEXT_PLAIN) + public String getTextItems() + { + return "bread, butter"; + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + public List getJsonItems() { + return items; + } + + @GET + @Path("/{sku}") + @Produces(MediaType.APPLICATION_JSON) + public Item getJsonItem(@PathParam("sku") final String sku) { + return items.stream().filter((item) -> item.getSku().equals(sku)).findAny().get(); + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + public void addItem(Item item) + { + items.add(item); + } + + @DELETE + @Path("/{sku}") + public void deleteItem(@PathParam("sku") final String sku) + { + items.removeIf(item -> item.getSku().equals(sku)); + } +} diff --git a/exercises/jersey-rest/src/main/java/oose/dea/services/rest/RestResourceConfig.java b/exercises/jersey-rest/src/main/java/oose/dea/services/rest/RestResourceConfig.java new file mode 100644 index 0000000..c892933 --- /dev/null +++ b/exercises/jersey-rest/src/main/java/oose/dea/services/rest/RestResourceConfig.java @@ -0,0 +1,16 @@ +package oose.dea.services.rest; + +import org.glassfish.jersey.server.ResourceConfig; + +import javax.ws.rs.ApplicationPath; + +@ApplicationPath("/rest") +class RestResourceConfig extends ResourceConfig { + public static final String JSON_SERIALIZER = "jersey.config.server.provider.packages"; + public static final String JACKSON_JSON_SERIALIZER = "com.fasterxml.jackson.jaxrs.json;service"; + + public RestResourceConfig() { + packages(true, "oose.dea.services.rest"); + property(JSON_SERIALIZER, JACKSON_JSON_SERIALIZER); + } +} \ No newline at end of file diff --git a/exercises/jersey-rest/src/main/webapp/WEB-INF/web.xml b/exercises/jersey-rest/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..287a892 --- /dev/null +++ b/exercises/jersey-rest/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,7 @@ + + \ No newline at end of file diff --git a/exercises/jpa/README.md b/exercises/jpa/README.md new file mode 100644 index 0000000..b062aae --- /dev/null +++ b/exercises/jpa/README.md @@ -0,0 +1 @@ +Before running JpaMain's main method make sure the database exists and you have a valid user and password. diff --git a/exercises/jpa/pom.xml b/exercises/jpa/pom.xml new file mode 100644 index 0000000..1775a52 --- /dev/null +++ b/exercises/jpa/pom.xml @@ -0,0 +1,77 @@ + + 4.0.0 + oose.dea + jpa-exercise + war + 1.0-SNAPSHOT + Simple JPA App + + jpa-exercise + + + org.apache.maven.plugins + maven-compiler-plugin + true + + 1.8 + 1.8 + + + + + + + mysql + mysql-connector-java + 5.1.34 + + + javax + javaee-api + 7.0 + + + + org.hibernate + hibernate-core + ${hibernate.version} + + + org.hibernate.javax.persistence + hibernate-jpa-2.1-api + 1.0.0.Final + + + org.hibernate + hibernate-entitymanager + ${hibernate.version} + + + org.hibernate + hibernate-c3p0 + ${hibernate.version} + + + org.slf4j + slf4j-simple + 1.6.2 + + + javassist + javassist + 3.12.1.GA + + + + junit + junit + 4.8.2 + test + + + + UTF-8 + 4.3.10.Final + + diff --git a/exercises/jpa/src/main/java/JpaMain.java b/exercises/jpa/src/main/java/JpaMain.java new file mode 100644 index 0000000..70f02d2 --- /dev/null +++ b/exercises/jpa/src/main/java/JpaMain.java @@ -0,0 +1,53 @@ +import oose.dea.dataaccess.Item; +import oose.dea.dataaccess.ItemJpaDAO; + +import java.util.List; + +public class JpaMain { + public static void main(String[] args) { + ItemJpaDAO itemJpaDAO = new ItemJpaDAO(); + + listAll(itemJpaDAO); + addNew(itemJpaDAO); + listAll(itemJpaDAO); + updateLastAdded(itemJpaDAO); + listAll(itemJpaDAO); + removeLatest(itemJpaDAO, getLastAdded(itemJpaDAO)); + listAll(itemJpaDAO); + } + + private static void updateLastAdded(ItemJpaDAO itemJpaDAO) { + Item it = getLastAdded(itemJpaDAO); + it.setSku("Bamihapje"); + itemJpaDAO.update(it); + } + + private static Item getLastAdded(ItemJpaDAO itemJpaDAO) { + List list = itemJpaDAO.list(); + return list.stream().max((it1, it2) -> Integer.compare(it1.getId(), it2.getId())).get(); + } + + private static void removeLatest(ItemJpaDAO itemJpaDAO, Item item) { + itemJpaDAO.remove(item); + } + + private static void addNew(ItemJpaDAO itemJpaDAO) { + itemJpaDAO.add(createItem()); + } + + private static Item createItem() { + Item item = new Item(); + item.setSku("Bamibal"); + item.setCategory("Snacks"); + item.setTitle("Ook vegetarisch verkrijgbaar"); + return item; + } + + private static void listAll(ItemJpaDAO itemJpaDAO) { + List list = itemJpaDAO.list(); + for(Item item: list) + { + System.out.println(item); + } + } +} diff --git a/exercises/jpa/src/main/java/oose/dea/dataaccess/DAO.java b/exercises/jpa/src/main/java/oose/dea/dataaccess/DAO.java new file mode 100644 index 0000000..b021c85 --- /dev/null +++ b/exercises/jpa/src/main/java/oose/dea/dataaccess/DAO.java @@ -0,0 +1,15 @@ +package oose.dea.dataaccess; + +import java.util.List; + +public interface DAO { + void add(T entity); + + void update(T updatedEntity); + + void remove(T entity); + + List list(); + + T find(int id); +} diff --git a/exercises/jpa/src/main/java/oose/dea/dataaccess/Item.java b/exercises/jpa/src/main/java/oose/dea/dataaccess/Item.java new file mode 100644 index 0000000..a84e9fe --- /dev/null +++ b/exercises/jpa/src/main/java/oose/dea/dataaccess/Item.java @@ -0,0 +1,59 @@ +package oose.dea.dataaccess; + +import javax.persistence.*; + +@Entity +@Table(name = "items") +public class Item { + @Id + @GeneratedValue(strategy= GenerationType.IDENTITY) + private Integer id; + private String sku; + private String category; + private String title; + + public Item() { + } + + public String getSku() { + return sku; + } + + public void setSku(String sku) { + this.sku = sku; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + @Override + public String toString() { + return "Item{" + + "id=" + id + + ", sku='" + sku + '\'' + + ", category='" + category + '\'' + + ", title='" + title + '\'' + + '}'; + } +} diff --git a/exercises/jpa/src/main/java/oose/dea/dataaccess/ItemJpaDAO.java b/exercises/jpa/src/main/java/oose/dea/dataaccess/ItemJpaDAO.java new file mode 100644 index 0000000..cd2dfc9 --- /dev/null +++ b/exercises/jpa/src/main/java/oose/dea/dataaccess/ItemJpaDAO.java @@ -0,0 +1,48 @@ +package oose.dea.dataaccess; + +import javax.persistence.*; +import java.util.List; + +public class ItemJpaDAO implements DAO { + private EntityManager em; + + public ItemJpaDAO() + { + EntityManagerFactory emf = Persistence.createEntityManagerFactory("simpleorder"); + this.em = emf.createEntityManager(); + } + + public void add(Item entity) { + em.getTransaction().begin(); + em.persist(entity); + em.flush(); + em.getTransaction().commit(); + } + + public void update(Item updatedEntity) { + if(em.find(Item.class, updatedEntity.getId()) == null){ + throw new IllegalArgumentException("Unknown Item"); + } + em.getTransaction().begin(); + em.merge(updatedEntity); + em.getTransaction().commit(); + } + + public void remove(Item entityToRemove) { + if(em.find(Item.class, entityToRemove.getId()) == null){ + throw new IllegalArgumentException("Unknown Item"); + } + em.getTransaction().begin(); + em.remove(entityToRemove); + em.getTransaction().commit(); + } + + public List list() { + Query query = em.createQuery("SELECT e FROM Item e"); + return (List) query.getResultList(); + } + + public Item find(int id) { + return em.find(Item.class, id); + } +} diff --git a/exercises/jpa/src/main/resources/META-INF/persistence.xml b/exercises/jpa/src/main/resources/META-INF/persistence.xml new file mode 100644 index 0000000..7f5c2ea --- /dev/null +++ b/exercises/jpa/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,30 @@ + + + org.hibernate.jpa.HibernatePersistenceProvider + + oose.dea.dataaccess.Item + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/exercises/jsp-servlet/README.md b/exercises/jsp-servlet/README.md new file mode 100644 index 0000000..17f2fb4 --- /dev/null +++ b/exercises/jsp-servlet/README.md @@ -0,0 +1,4 @@ +Build the project and run it using Tomcat. + +Visit http://localhost:8080/. + diff --git a/exercises/jsp-servlet/pom.xml b/exercises/jsp-servlet/pom.xml new file mode 100644 index 0000000..acacceb --- /dev/null +++ b/exercises/jsp-servlet/pom.xml @@ -0,0 +1,44 @@ + + 4.0.0 + oose.dea + jsp-servlet-example + war + 1.0-SNAPSHOT + JSP Servlet Example + + jsp-servlet-example + + + org.apache.maven.plugins + maven-compiler-plugin + true + + 1.6 + 1.6 + + + + + + + javax + javaee-api + 7.0 + + + jstl + jstl + 1.2 + + + junit + junit + 4.8.2 + test + + + + UTF-8 + + diff --git a/exercises/jsp-servlet/src/main/java/oose/dea/items/Item.java b/exercises/jsp-servlet/src/main/java/oose/dea/items/Item.java new file mode 100644 index 0000000..d880fd7 --- /dev/null +++ b/exercises/jsp-servlet/src/main/java/oose/dea/items/Item.java @@ -0,0 +1,37 @@ +package oose.dea.items; + +public class Item { + private String sku; + private String category; + private String title; + + public Item(String sku, String category, String title) { + this.sku = sku; + this.category = category; + this.title = title; + } + + public String getSku() { + return sku; + } + + public void setSku(String sku) { + this.sku = sku; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } +} diff --git a/exercises/jsp-servlet/src/main/java/oose/dea/items/ItemService.java b/exercises/jsp-servlet/src/main/java/oose/dea/items/ItemService.java new file mode 100644 index 0000000..43ab7c4 --- /dev/null +++ b/exercises/jsp-servlet/src/main/java/oose/dea/items/ItemService.java @@ -0,0 +1,13 @@ +package oose.dea.items; + +import java.util.ArrayList; +import java.util.List; + +public class ItemService { + public List findAll() { + List items = new ArrayList(); + items.add(new Item("Frikandel", "Snacks", "Restafval, maar wel lekker")); + items.add(new Item("Bradwurst", "Snacks", "Restafval, maar dan op zijn Duits")); + return items; + } +} diff --git a/exercises/jsp-servlet/src/main/java/oose/dea/items/ViewItemsPageController.java b/exercises/jsp-servlet/src/main/java/oose/dea/items/ViewItemsPageController.java new file mode 100644 index 0000000..5d332ca --- /dev/null +++ b/exercises/jsp-servlet/src/main/java/oose/dea/items/ViewItemsPageController.java @@ -0,0 +1,20 @@ +package oose.dea.items; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +@WebServlet(urlPatterns = "/viewItems") +public class ViewItemsPageController extends HttpServlet { + private ItemService itemService = new ItemService(); + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + List items = itemService.findAll(); + request.setAttribute("all", items); + request.getRequestDispatcher("viewItems.jsp").forward(request, response); + } +} diff --git a/exercises/jsp-servlet/src/main/webapp/WEB-INF/web.xml b/exercises/jsp-servlet/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..287a892 --- /dev/null +++ b/exercises/jsp-servlet/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,7 @@ + + \ No newline at end of file diff --git a/exercises/jsp-servlet/src/main/webapp/index.jsp b/exercises/jsp-servlet/src/main/webapp/index.jsp new file mode 100644 index 0000000..4973063 --- /dev/null +++ b/exercises/jsp-servlet/src/main/webapp/index.jsp @@ -0,0 +1,6 @@ + + +

Items

+View all items + + diff --git a/exercises/jsp-servlet/src/main/webapp/viewItems.jsp b/exercises/jsp-servlet/src/main/webapp/viewItems.jsp new file mode 100644 index 0000000..a372849 --- /dev/null +++ b/exercises/jsp-servlet/src/main/webapp/viewItems.jsp @@ -0,0 +1,32 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + + + + + + + + + + + + + + + + + + + +
SKUCategoryTitle
+ + + + + +
+ + diff --git a/exercises/kleurenmenger/kleurapplet/src/main/java/HSBInvoerPaneel.java b/exercises/kleurenmenger/kleurapplet/src/main/java/HSBInvoerPaneel.java deleted file mode 100755 index cf338e4..0000000 --- a/exercises/kleurenmenger/kleurapplet/src/main/java/HSBInvoerPaneel.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * HSBInvoerPaneel.java 13 maart 2003, Paul Bergervoet - * - */ - -package kleurapplet; - -import java.awt.*; -import java.awt.event.*; -import kleurapplet.grnuminput.*; - -class HSBInvoerPaneel extends Panel -{ // Variables - private NumberSlider hue; - private NumberSlider sat; - private NumberSlider bright; - - public HSBInvoerPaneel(KleurCanvas k) - { // NB: mwt klassieke awt, niet met behulp van Swing-componenten. - setBackground(new Color(204, 204, 204)); - GridLayout g = new GridLayout(3, 1); - g.setHgap(10); - setLayout(g); - - hue = new NumberSlider(0, 1, 0.5, 2, "Tint", ""); - hue.addNumberListener(k); - add(hue); - - sat = new NumberSlider(0, 1, 0.5, 2, "Verzadiging", ""); - sat.addNumberListener(k); - add(sat); - - bright = new NumberSlider(0, 1, 0.5, 2, "Helderheid", ""); - bright.addNumberListener(k); - add(bright); - } - - public void setSliders(float h, float s, float b) - { hue.setValue(h); - sat.setValue(s); - bright.setValue(b); - } -} diff --git a/exercises/kleurenmenger/kleurapplet/src/main/java/KleurApplet.jar b/exercises/kleurenmenger/kleurapplet/src/main/java/KleurApplet.jar deleted file mode 100755 index 76857e0..0000000 Binary files a/exercises/kleurenmenger/kleurapplet/src/main/java/KleurApplet.jar and /dev/null differ diff --git a/exercises/kleurenmenger/kleurapplet/src/main/java/RGBInvoerPaneel.java b/exercises/kleurenmenger/kleurapplet/src/main/java/RGBInvoerPaneel.java deleted file mode 100755 index 4c4df52..0000000 --- a/exercises/kleurenmenger/kleurapplet/src/main/java/RGBInvoerPaneel.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * RGBInvoerPaneel.java 13 maart 2003, Paul Bergervoet - * - */ - -package kleurapplet; - -import java.awt.*; -import java.awt.event.*; -import kleurapplet.grnuminput.*; - -class RGBInvoerPaneel extends Panel -{ // Variables - private NumberSlider rood; - private NumberSlider groen; - private NumberSlider blauw; - - public RGBInvoerPaneel(KleurCanvas k) - { // NB: mwt klassieke awt, niet met behulp van Swing-componenten. - setBackground(new Color(204, 204, 204)); - GridLayout g = new GridLayout(3, 1); - g.setHgap(10); - setLayout(g); - - rood = new NumberSlider(0, 255, 127, 0, "Rood", ""); - rood.addNumberListener(k); - add(rood); - - groen = new NumberSlider(0, 255, 127, 0, "Groen", ""); - groen.addNumberListener(k); - add(groen); - - blauw = new NumberSlider(0, 255, 127, 0, "Blauw", ""); - blauw.addNumberListener(k); - add(blauw); - } - - public void setSliders(int r, int g, int b) - { rood.setValue(r); - groen.setValue(g); - blauw.setValue(b); - } -} diff --git a/exercises/kleurenmenger/kleurapplet/src/main/java/example1.html b/exercises/kleurenmenger/kleurapplet/src/main/java/example1.html deleted file mode 100755 index c9b4d94..0000000 --- a/exercises/kleurenmenger/kleurapplet/src/main/java/example1.html +++ /dev/null @@ -1,10 +0,0 @@ - - -Simple Applet Example - - - -Your browser does not support Java, so nothing is displayed. - - - diff --git a/exercises/kleurenmenger/src/main/java/kleurapplet/HSBInvoerPaneel.java b/exercises/kleurenmenger/src/main/java/kleurapplet/HSBInvoerPaneel.java new file mode 100644 index 0000000..000a519 --- /dev/null +++ b/exercises/kleurenmenger/src/main/java/kleurapplet/HSBInvoerPaneel.java @@ -0,0 +1,64 @@ +/* + * HSBInvoerPaneel.java 13 maart 2003, Paul Bergervoet + * + */ + +package kleurapplet; + +import kleurapplet.grnuminput.NumberListener; +import kleurapplet.grnuminput.NumberSlider; + +import java.awt.*; +import java.util.Observable; +import java.util.Observer; + +class HSBInvoerPaneel extends Panel implements Observer +{ // Variables + private NumberSlider hue; + private NumberSlider sat; + private NumberSlider bright; + + /** + * Was: KleurCanvas, maar alleen de interface is hier nodig. Bij de aanroep kan dus gerust Kleur meegegeven worden. + * @param numberListener + */ + public HSBInvoerPaneel(NumberListener numberListener) + { // NB: mwt klassieke awt, niet met behulp van Swing-componenten. + setBackground(new Color(204, 204, 204)); + GridLayout g = new GridLayout(3, 1); + g.setHgap(10); + setLayout(g); + + hue = new NumberSlider(0, 1, 0.5, 2, "Tint", ""); + hue.addNumberListener(numberListener); + add(hue); + + sat = new NumberSlider(0, 1, 0.5, 2, "Verzadiging", ""); + sat.addNumberListener(numberListener); + add(sat); + + bright = new NumberSlider(0, 1, 0.5, 2, "Helderheid", ""); + bright.addNumberListener(numberListener); + add(bright); + } + + /** + * Was eerst public + * @param h + * @param s + * @param b + */ + private void setSliders(float h, float s, float b) + { hue.setValue(h); + sat.setValue(s); + bright.setValue(b); + } + + @Override + public void update(Observable o, Object arg) { + if (arg instanceof Kleur.KleurUpdate) { + Kleur.KleurUpdate kleurUpdate = (Kleur.KleurUpdate) arg; + setSliders(kleurUpdate.hue, kleurUpdate.saturation, kleurUpdate.brightness); + } + } +} diff --git a/exercises/kleurenmenger/src/main/java/kleurapplet/Kleur.java b/exercises/kleurenmenger/src/main/java/kleurapplet/Kleur.java new file mode 100644 index 0000000..1b88488 --- /dev/null +++ b/exercises/kleurenmenger/src/main/java/kleurapplet/Kleur.java @@ -0,0 +1,103 @@ +package kleurapplet; + +import kleurapplet.grnuminput.NumberListener; + +import java.awt.*; +import java.util.Observable; + +public class Kleur extends Observable implements NumberListener { + private int roodval; + private int groenval; + private int blauwval; + private float[] hsbvalues; + + public Kleur() { + this.roodval = 127; + this.groenval = 127; + this.blauwval = 127; + } + + public void numberChanged(String naam, double v) { + if (naam.equals("Rood")) { + roodval = (int) v; // harde cast!! v loopt van 0 tot 255 met 0 decimalen! + adjustHSBValues(); + } else if (naam.equals("Groen")) { + groenval = (int) v; + adjustHSBValues(); + } else if (naam.equals("Blauw")) { + blauwval = (int) v; + adjustHSBValues(); + } else if (naam.equals("Tint")) { + hsbvalues[0] = (float) v; // harde cast!! v loopt van 0 tot 1 met 3 decimalen! + adjustRGBValues(); + } else if (naam.equals("Verzadiging")) { + hsbvalues[1] = (float) v; + adjustRGBValues(); + } else // must be "Helderheid" + { + hsbvalues[2] = (float) v; + adjustRGBValues(); + } + + setChanged(); + notifyObservers(dataObject()); + } + + public KleurUpdate dataObject() { + adjustHSBValues(); + return new KleurUpdate(roodval, groenval, blauwval, hsbvalues[0], hsbvalues[1], hsbvalues[2]); + } + + /** + * Met deze extra class geven we alleen de essentiele data weg aan de observers en + * houden we bij ons wat van ons is, zoals de numberChanged en de conversie RGB->HSB. + * + * Hiermee verlagen we de koppeling, maar ook helaas de cohesie. + * Alternatief is het Kleur object aan alle Observers mee te geven, dit is een een hogere koppeling maar ook hogere cohesie. + */ + class KleurUpdate { + public int rood; + public int groen; + public int blauw; + public float hue; + public float saturation; + public float brightness; + + /** + * Alleen Kleur en KleurUpdate mogen deze constructor aanroepen. + * @param rood + * @param groen + * @param blauw + * @param hue + * @param saturation + * @param brightness + */ + private KleurUpdate(int rood, int groen, int blauw, float hue, float saturation, float brightness) + { + this.rood = rood; + this.groen = groen; + this.blauw = blauw; + this.hue = hue; + this.saturation = saturation; + this.brightness = brightness; + } + } + + /** + * Bij verandering van RGB moet HSB worden aangepast + */ + private void adjustHSBValues() { + hsbvalues = Color.RGBtoHSB(roodval, groenval, blauwval, hsbvalues); + } + + /** + * Bij verandering van HSB moet RGB worden aangepast + */ + private void adjustRGBValues() { + Color c = Color.getHSBColor(hsbvalues[0], hsbvalues[1], hsbvalues[2]); + roodval = c.getRed(); + groenval = c.getGreen(); + blauwval = c.getBlue(); + } + +} diff --git a/exercises/kleurenmenger/kleurapplet/src/main/java/KleurApplet.java b/exercises/kleurenmenger/src/main/java/kleurapplet/KleurApplet.java old mode 100755 new mode 100644 similarity index 62% rename from exercises/kleurenmenger/kleurapplet/src/main/java/KleurApplet.java rename to exercises/kleurenmenger/src/main/java/kleurapplet/KleurApplet.java index b1fa1a9..0b14d7a --- a/exercises/kleurenmenger/kleurapplet/src/main/java/KleurApplet.java +++ b/exercises/kleurenmenger/src/main/java/kleurapplet/KleurApplet.java @@ -15,16 +15,21 @@ public class KleurApplet extends Applet HSBInvoerPaneel hsbip; public void init() - { // NB: mwt klassieke awt, niet met behulp van Swing-componenten. + { setLayout(new BorderLayout()); - kc = new KleurCanvas(); + Kleur kleur = new Kleur(); + kc = new KleurCanvas(kleur.dataObject()); add(kc, "Center"); - rgbip = new RGBInvoerPaneel(kc); + rgbip = new RGBInvoerPaneel(kleur); add(rgbip, "East"); - hsbip = new HSBInvoerPaneel(kc); + hsbip = new HSBInvoerPaneel(kleur); add(hsbip, "West"); setSize(600,340); setVisible(true); + + kleur.addObserver(kc); + kleur.addObserver(rgbip); + kleur.addObserver(hsbip); } } diff --git a/exercises/kleurenmenger/kleurapplet/src/main/java/KleurCanvas.java b/exercises/kleurenmenger/src/main/java/kleurapplet/KleurCanvas.java old mode 100755 new mode 100644 similarity index 64% rename from exercises/kleurenmenger/kleurapplet/src/main/java/KleurCanvas.java rename to exercises/kleurenmenger/src/main/java/kleurapplet/KleurCanvas.java index 50a0045..bce6cb1 --- a/exercises/kleurenmenger/kleurapplet/src/main/java/KleurCanvas.java +++ b/exercises/kleurenmenger/src/main/java/kleurapplet/KleurCanvas.java @@ -6,21 +6,19 @@ package kleurapplet; import java.awt.*; -import kleurapplet.grnuminput.*; +import java.util.Observable; +import java.util.Observer; -class KleurCanvas extends Canvas - implements NumberListener +import kleurapplet.Kleur.KleurUpdate; + +class KleurCanvas extends Canvas implements Observer { // Variables for double buffering Dimension dd; private Image bufferTekening; // Image tbv offline painting private Graphics bufferGraphics; // Graphics object van bufferTekening private Dimension bufferGrootte = new Dimension(0, 0); // Size of Image, check with Frame size - // Variables - private int roodval; - private int groenval; - private int blauwval; - private float[] hsbvalues; + private KleurUpdate kleur; // Constants private static Color echtRood = new Color(255, 0, 0); @@ -31,12 +29,16 @@ class KleurCanvas extends Canvas // Panels RGBInvoerPaneel rgbip; HSBInvoerPaneel hsbip; - - public KleurCanvas() - { roodval = 127; - groenval = 127; - blauwval = 127; - hsbvalues = Color.RGBtoHSB(roodval, groenval, blauwval, hsbvalues); + + /** + * Alleen voor initiele vulling van het canvas. + * De update-methode zorgt telkens voor een nieuwe instantie van kleurUpdate. + * + * @param kleurUpdate + */ + public KleurCanvas(KleurUpdate kleurUpdate) + { + this.kleur = kleurUpdate; setBackground(Color.white); setSize(360, 340); } @@ -82,27 +84,27 @@ public void paint(Graphics g) { g.setFont(displayfont); Color c; // --- tint ---- - c = Color.getHSBColor(hsbvalues[0], 1, 1); // helderheid, verzadiging vol + c = Color.getHSBColor(kleur.hue, 1, 1); // helderheid, verzadiging vol paintKleurComponent("Tint", c, null, 30, 20, g); // --- verzadiging ---- - c = Color.getHSBColor(hsbvalues[0], hsbvalues[1], 1); // helderheid vol + c = Color.getHSBColor(kleur.hue, kleur.saturation, 1); // helderheid vol paintKleurComponent("Verzadiging", c, null, 30, 100, g); // --- helderheid ---- - c = Color.getHSBColor(hsbvalues[0], 0, hsbvalues[2]); // verzadiging 0: grijs dus + c = Color.getHSBColor(kleur.hue, 0, kleur.brightness); // verzadiging 0: grijs dus paintKleurComponent("Helderheid", c, null, 30, 180, g); // --- rood ---- - c = new Color(roodval, 0, 0); + c = new Color(kleur.rood, 0, 0); paintKleurComponent("Rood", c, echtRood, 270, 20, g); // --- groen ---- - c = new Color(0, groenval, 0); + c = new Color(0, kleur.groen, 0); paintKleurComponent("Groen", c, echtGroen, 270, 100, g); // --- blauw ---- - c = new Color(0, 0, blauwval); + c = new Color(0, 0, kleur.blauw); paintKleurComponent("Blauw", c, echtBlauw, 270, 180, g); // --- menging ---- - g.setColor(new Color(roodval, groenval, blauwval)); + g.setColor(new Color(kleur.rood, kleur.groen, kleur.blauw)); g.fillRoundRect(120, 40, 120, 280, 5, 5); g.setColor(Color.black); g.drawString("De kleur", 120, 35); @@ -112,54 +114,15 @@ public void paint(Graphics g) g.setColor(Color.black); g.drawString("Hex. RGB:", 270, 300); String hrgb = "#"; - hrgb = hrgb.concat(hexValue(roodval)); - hrgb = hrgb.concat(hexValue(groenval)); - hrgb = hrgb.concat(hexValue(blauwval)); + hrgb = hrgb.concat(hexValue(kleur.rood)); + hrgb = hrgb.concat(hexValue(kleur.groen)); + hrgb = hrgb.concat(hexValue(kleur.blauw)); g.drawString(hrgb, 270, 315); } // Event handler -/** - * Bij verandering van RGB moet HSB worden aangepast - */ - private void adjustHSBValues() - { hsbvalues = Color.RGBtoHSB(roodval, groenval, blauwval, hsbvalues); - } -/** - * Bij verandering van HSB moet RGB worden aangepast - */ - private void adjustRGBValues() - { Color c = Color.getHSBColor(hsbvalues[0], hsbvalues[1], hsbvalues[2]); - roodval = c.getRed(); - groenval = c.getGreen(); - blauwval = c.getBlue(); - } - - public void numberChanged(String naam, double v) - { if ( naam.equals("Rood") ) - { roodval = (int)v; // harde cast!! v loopt van 0 tot 255 met 0 decimalen! - adjustHSBValues(); - } else if ( naam.equals("Groen") ) - { groenval = (int)v; - adjustHSBValues(); - } else if ( naam.equals("Blauw") ) - { blauwval = (int)v; - adjustHSBValues(); - } else if ( naam.equals("Tint") ) - { hsbvalues[0] = (float)v; // harde cast!! v loopt van 0 tot 1 met 3 decimalen! - adjustRGBValues(); - } else if ( naam.equals("Verzadiging") ) - { hsbvalues[1] = (float)v; - adjustRGBValues(); - } else // must be "Helderheid" - { hsbvalues[2] = (float)v; - adjustRGBValues(); - } - repaint(); - } - // ----- tbv double buffering public void update(Graphics g) { dd = getSize(); // check eventuele resize... @@ -178,4 +141,11 @@ public void update(Graphics g) g.drawImage(bufferTekening, 0, 0, null); // zet Image op Canvas.... } + @Override + public void update(Observable o, Object arg) { + if (arg instanceof KleurUpdate) { + this.kleur = (KleurUpdate) arg; + repaint(); + } + } } diff --git a/exercises/kleurenmenger/src/main/java/kleurapplet/RGBInvoerPaneel.java b/exercises/kleurenmenger/src/main/java/kleurapplet/RGBInvoerPaneel.java new file mode 100644 index 0000000..cc29f8f --- /dev/null +++ b/exercises/kleurenmenger/src/main/java/kleurapplet/RGBInvoerPaneel.java @@ -0,0 +1,64 @@ +/* + * RGBInvoerPaneel.java 13 maart 2003, Paul Bergervoet + * + */ + +package kleurapplet; + +import java.awt.*; +import java.awt.event.*; +import java.util.Observable; +import java.util.Observer; + +import kleurapplet.grnuminput.*; + +class RGBInvoerPaneel extends Panel implements Observer +{ // Variables + private NumberSlider rood; + private NumberSlider groen; + private NumberSlider blauw; + + /** + * Was: KleurCanvas, maar alleen de interface is hier nodig. Bij de aanroep kan dus gerust Kleur meegegeven worden. + * @param numberListener + */ + public RGBInvoerPaneel(NumberListener numberListener) + { // NB: mwt klassieke awt, niet met behulp van Swing-componenten. + setBackground(new Color(204, 204, 204)); + GridLayout g = new GridLayout(3, 1); + g.setHgap(10); + setLayout(g); + + rood = new NumberSlider(0, 255, 127, 0, "Rood", ""); + rood.addNumberListener(numberListener); + add(rood); + + groen = new NumberSlider(0, 255, 127, 0, "Groen", ""); + groen.addNumberListener(numberListener); + add(groen); + + blauw = new NumberSlider(0, 255, 127, 0, "Blauw", ""); + blauw.addNumberListener(numberListener); + add(blauw); + } + + /** + * Was eerst public + * @param r + * @param g + * @param b + */ + private void setSliders(int r, int g, int b) + { rood.setValue(r); + groen.setValue(g); + blauw.setValue(b); + } + + @Override + public void update(Observable o, Object arg) { + if (arg instanceof Kleur.KleurUpdate) { + Kleur.KleurUpdate kleurUpdate = (Kleur.KleurUpdate) arg; + setSliders(kleurUpdate.rood, kleurUpdate.groen, kleurUpdate.blauw); + } + } +} diff --git a/exercises/kleurenmenger/kleurapplet/src/main/java/grnuminput/NumOnlyField.java b/exercises/kleurenmenger/src/main/java/kleurapplet/grnuminput/NumOnlyField.java similarity index 100% rename from exercises/kleurenmenger/kleurapplet/src/main/java/grnuminput/NumOnlyField.java rename to exercises/kleurenmenger/src/main/java/kleurapplet/grnuminput/NumOnlyField.java diff --git a/exercises/kleurenmenger/kleurapplet/src/main/java/grnuminput/NumberArrow.java b/exercises/kleurenmenger/src/main/java/kleurapplet/grnuminput/NumberArrow.java similarity index 100% rename from exercises/kleurenmenger/kleurapplet/src/main/java/grnuminput/NumberArrow.java rename to exercises/kleurenmenger/src/main/java/kleurapplet/grnuminput/NumberArrow.java diff --git a/exercises/kleurenmenger/kleurapplet/src/main/java/grnuminput/NumberListener.java b/exercises/kleurenmenger/src/main/java/kleurapplet/grnuminput/NumberListener.java similarity index 100% rename from exercises/kleurenmenger/kleurapplet/src/main/java/grnuminput/NumberListener.java rename to exercises/kleurenmenger/src/main/java/kleurapplet/grnuminput/NumberListener.java diff --git a/exercises/kleurenmenger/kleurapplet/src/main/java/grnuminput/NumberSlider.java b/exercises/kleurenmenger/src/main/java/kleurapplet/grnuminput/NumberSlider.java similarity index 100% rename from exercises/kleurenmenger/kleurapplet/src/main/java/grnuminput/NumberSlider.java rename to exercises/kleurenmenger/src/main/java/kleurapplet/grnuminput/NumberSlider.java diff --git a/exercises/koenenkramers/KoenenKramers.png b/exercises/koenenkramers/KoenenKramers.png new file mode 100644 index 0000000..9910a51 Binary files /dev/null and b/exercises/koenenkramers/KoenenKramers.png differ diff --git a/exercises/koenenkramers/pom.xml b/exercises/koenenkramers/pom.xml new file mode 100644 index 0000000..9a0518d --- /dev/null +++ b/exercises/koenenkramers/pom.xml @@ -0,0 +1,29 @@ + + + 4.0.0 + + nl.oose.dea.workshop + KoenenKramers + 1.0-SNAPSHOT + + + + nl.oose.dea.koenenkramers + dictionaries + 1.0 + + + + + + github-rody + https://raw.githubusercontent.com/ddoa/workshop-koenen-kramers/master/ + + true + always + + + + diff --git a/exercises/koenenkramers/src/main/java/DictionaryAdapter.java b/exercises/koenenkramers/src/main/java/DictionaryAdapter.java new file mode 100755 index 0000000..61d95ac --- /dev/null +++ b/exercises/koenenkramers/src/main/java/DictionaryAdapter.java @@ -0,0 +1,6 @@ +public interface DictionaryAdapter +{ + public String getName(); + + public String translate(String input); +} diff --git a/exercises/koenenkramers/src/main/java/DictionaryAdapterFactory.java b/exercises/koenenkramers/src/main/java/DictionaryAdapterFactory.java new file mode 100644 index 0000000..3e00329 --- /dev/null +++ b/exercises/koenenkramers/src/main/java/DictionaryAdapterFactory.java @@ -0,0 +1,24 @@ +public class DictionaryAdapterFactory +{ + private static DictionaryAdapterFactory instance; + + private DictionaryAdapterFactory() + { + } + + public static DictionaryAdapterFactory getInstance() + { + if(instance == null) + instance = new DictionaryAdapterFactory(); + return instance; + } + + public DictionaryAdapter create(String name) + { + if("Koenen".equals(name)) + return new KoenenDictionaryAdapter(); + else if("Kramers".equals(name)) + return new KramersDictionaryAdapter(); + return null; + } +} diff --git a/exercises/koenenkramers/src/main/java/KoenenDictionary.java b/exercises/koenenkramers/src/main/java/KoenenDictionary.java deleted file mode 100755 index ffa3bcc..0000000 --- a/exercises/koenenkramers/src/main/java/KoenenDictionary.java +++ /dev/null @@ -1,86 +0,0 @@ -import java.util.Hashtable; - -public class KoenenDictionary { - private Hashtable words; - - /** - * Creates an empty dictionary - */ - public KoenenDictionary() { - words = new Hashtable(); - } - - /** - * Adds English-Dutch word pairs to dictionary - */ - public void openEnglishDutch() { - words.put("aeroplane", "vliegtuig"); - words.put("bicycle", "fiets"); - words.put("bird", "vogel"); - words.put("boat", "boot"); - words.put("car", "auto"); - words.put("cat", "kat"); - words.put("chicken", "kip"); - words.put("cow", "koe"); - words.put("dog", "hond"); - words.put("donkey", "ezel"); - words.put("elephant", "olifant"); - words.put("fish", "vis"); - words.put("fly", "vlieg"); - words.put("fox", "vos"); - words.put("horse", "paard"); - words.put("lion", "leeuw"); - words.put("rabbit", "konijn"); - words.put("monkey", "aap"); - words.put("mouse", "muis"); - words.put("pig", "varken"); - words.put("shark", "haai"); - words.put("sheep", "schaap"); - words.put("snake", "slang"); - words.put("tiger", "tijger"); - words.put("train", "trein"); - words.put("whale", "walvis"); - } - - /** - * Adds Dutch-English word pairs to dictionary - */ - public void openDutchEnglish() { - words.put("aap", "monkey"); - words.put("auto", "car"); - words.put("boot", "boat"); - words.put("ezel", "donkey"); - words.put("fiets", "bicycle"); - words.put("haai", "shark"); - words.put("hond", "dog"); - words.put("kat", "cat"); - words.put("kip", "chicken"); - words.put("koe", "cow"); - words.put("konijn", "rabbit"); - words.put("leeuw", "lion"); - words.put("muis", "mouse"); - words.put("olifant", "elephant"); - words.put("paard", "horse"); - words.put("schaap", "sheep"); - words.put("slang", "snake"); - words.put("tijger", "tiger"); - words.put("trein", "train"); - words.put("varken", "pig"); - words.put("vis", "fish"); - words.put("vlieg", "fly"); - words.put("vliegtuig", "aeroplane"); - words.put("vogel", "bird"); - words.put("vos", "fox"); - words.put("walvis", "whale"); - } - - /** - * Looks the word up in the dictionary and returns its translation - * - * @param word the word that will be searched in the dictionary - * @return the translation of the word or null if the word is not found - */ - public String lookUp(String word) { - return (String)(words.get(word)); - } -} diff --git a/exercises/koenenkramers/src/main/java/KoenenDictionaryAdapter.java b/exercises/koenenkramers/src/main/java/KoenenDictionaryAdapter.java new file mode 100644 index 0000000..ab750ce --- /dev/null +++ b/exercises/koenenkramers/src/main/java/KoenenDictionaryAdapter.java @@ -0,0 +1,19 @@ +public class KoenenDictionaryAdapter implements DictionaryAdapter { + + private KoenenDictionary kd; + + public KoenenDictionaryAdapter(){ + kd = new KoenenDictionary(); + kd.openEnglishDutch(); + kd.openDutchEnglish(); + } + + public String getName() { + return "Koenen"; + } + + public String translate(String word) { + return kd.lookUp(word); + } + +} diff --git a/exercises/koenenkramers/src/main/java/KramersDictionary.java b/exercises/koenenkramers/src/main/java/KramersDictionary.java deleted file mode 100755 index 9f4790a..0000000 --- a/exercises/koenenkramers/src/main/java/KramersDictionary.java +++ /dev/null @@ -1,29 +0,0 @@ -public class KramersDictionary { - private String[][] list= - {{"aeroplane", "vliegtuig"}, {"bicycle", "fiets"}, {"bird", "vogel"}, {"boat", "boot"}, - {"car", "auto"}, {"cat", "kat"}, {"chicken", "kip"}, {"cow", "koe"}, {"dog", "hond"}, - {"donkey", "ezel"}, {"elephant", "olifant"}, {"fish", "vis"}, {"fly", "vlieg"}, {"fox", "vos"}, - {"goat", "geit"}, {"horse", "paard"}, {"lion", "leeuw"}, {"rabbit", "konijn"}, - {"monkey", "aap"}, {"mouse", "muis"}, {"pig", "varken"}, {"sheep", "schaap"}, - {"snake", "slang"}, {"submarine", "onderzeeboot"}, {"tiger", "tijger"}, {"train", "trein"}}; - - /** - * Creates and opens the English-Dutch dictionary - */ - public KramersDictionary() { - } - /** - * Looks the English word up in the dictionary and returns its Dutch translation - * - * @param english the English word that will be searched in the dictionary - * @return the Dutch translation of the word or null if the word is not found - */ - public String find(String english) { - for (int i=0; i - 4.0.0 - - oose.dea.solid - SOLID-SRP - 1.0-SNAPSHOT - jar - - SOLID-SRP - - - UTF-8 - - - - - junit - junit - 4.11 - test - - - diff --git a/exercises/solid/1-SOLID-SRP/src/main/java/oose/dea/solid/Program.java b/exercises/solid/1-SOLID-SRP/src/main/java/oose/dea/solid/Program.java deleted file mode 100644 index 1368ac4..0000000 --- a/exercises/solid/1-SOLID-SRP/src/main/java/oose/dea/solid/Program.java +++ /dev/null @@ -1,16 +0,0 @@ -package oose.dea.solid; - -import java.io.IOException; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class Program { - public static void main(String[] args) throws IOException { - Report report = new Report(); - report.print(); - System.out.println("Program ended, press a key to continue"); - System.in.read(); - } -} diff --git a/exercises/solid/1-SOLID-SRP/src/main/java/oose/dea/solid/Report.java b/exercises/solid/1-SOLID-SRP/src/main/java/oose/dea/solid/Report.java deleted file mode 100644 index 4331278..0000000 --- a/exercises/solid/1-SOLID-SRP/src/main/java/oose/dea/solid/Report.java +++ /dev/null @@ -1,26 +0,0 @@ -package oose.dea.solid; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class Report { - public void print() { - getData(); - formatReport(); - System.out.println("Printing report"); - } - - private void formatReport() { - System.out.println("Formatting report..."); - } - - private List getData() { - List dataElements = new ArrayList(); - dataElements.add(new ReportDataElement("Rody")); - return dataElements; - } -} diff --git a/exercises/solid/1-SOLID-SRP/src/main/java/oose/dea/solid/ReportDataElement.java b/exercises/solid/1-SOLID-SRP/src/main/java/oose/dea/solid/ReportDataElement.java deleted file mode 100644 index 7e3a917..0000000 --- a/exercises/solid/1-SOLID-SRP/src/main/java/oose/dea/solid/ReportDataElement.java +++ /dev/null @@ -1,13 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class ReportDataElement { - private String customerName; - - public ReportDataElement(String customerName) { - this.customerName = customerName; - } -} diff --git a/exercises/solid/1.SRP/README.md b/exercises/solid/1.SRP/README.md new file mode 100644 index 0000000..8f6c02a --- /dev/null +++ b/exercises/solid/1.SRP/README.md @@ -0,0 +1,14 @@ +This project contains an implementation of an OrderService with two packages: +* nl.oose.dea.orderservice.withoutsrp contains classes and test cases without the SRP principle applied +* nl.oose.dea.orderservice.withsrp contains some classes and test cases that guide you to apply the SRP + +First read the sourcecode without SRP and run the test cases (comment the testcases with SRP applied to compile and run these testcases). +Second, read the test cases with SRP and (re)create the correct classes and interfaces so the unit tests all pass. + +Refactor the code in the following order: +* PaymentProcessor +* ReservationService +* NotificationService +* POSCashOrder +* POSCreditOrder +* OnlineOrder \ No newline at end of file diff --git a/exercises/solid/1.SRP/SRP-Example.iml b/exercises/solid/1.SRP/SRP-Example.iml new file mode 100644 index 0000000..c3fe000 --- /dev/null +++ b/exercises/solid/1.SRP/SRP-Example.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/exercises/solid/1.SRP/SRP.iml b/exercises/solid/1.SRP/SRP.iml new file mode 100644 index 0000000..c3fe000 --- /dev/null +++ b/exercises/solid/1.SRP/SRP.iml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/exercises/solid/1.SRP/pom.xml b/exercises/solid/1.SRP/pom.xml new file mode 100644 index 0000000..10097e9 --- /dev/null +++ b/exercises/solid/1.SRP/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + nl.oose.dea + SRP-Example + 1.0-SNAPSHOT + + + + junit + junit + 4.11 + + + javax.mail + mail + 1.4 + + + \ No newline at end of file diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/Cart.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/Cart.java new file mode 100644 index 0000000..d5b7c1b --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/Cart.java @@ -0,0 +1,31 @@ +package nl.oose.dea.orderservice.withoutsrp; + +public class Cart { + private Item[] items; + private String customerName; + private int amount; + private String customerEmail; + + public Cart(String customerName, String customerEmail, Item[] items, int amount){ + this.customerName = customerName; + this.customerEmail = customerEmail; + this.items = items; + this.amount = amount; + } + + public Item[] getItems() { + return items; + } + + public String getCustomerName() { + return customerName; + } + + public int getBillingTotal() { + return amount; + } + + public String getCustomerEmail() { + return customerEmail; + } +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/InsufficientInventoryException.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/InsufficientInventoryException.java new file mode 100644 index 0000000..aa7b59b --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/InsufficientInventoryException.java @@ -0,0 +1,4 @@ +package nl.oose.dea.orderservice.withoutsrp; + +public class InsufficientInventoryException extends Exception{ +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/InventorySystem.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/InventorySystem.java new file mode 100644 index 0000000..6fa7fb9 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/InventorySystem.java @@ -0,0 +1,26 @@ +package nl.oose.dea.orderservice.withoutsrp; + +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Logger; + +public class InventorySystem { + private Logger logger = Logger.getLogger(getClass().getName()); + + private Map inventory = new HashMap() {{ + put("Frikandel", 20); + put("Bamihap", 25); + put("Mexicano", 50); + }}; + + public void reserve(String sku, int quantity) throws InsufficientInventoryException { + if (isOnStock(sku, quantity)) + inventory.put(sku, inventory.get(sku) - quantity); + else throw new InsufficientInventoryException(); + logger.info("There is still " + inventory.get(sku) + " of " + sku + " left in inventory"); + } + + public boolean isOnStock(String sku, int quantity) { + return inventory.get(sku) >= quantity; + } +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/Item.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/Item.java new file mode 100644 index 0000000..732e0b6 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/Item.java @@ -0,0 +1,12 @@ +package nl.oose.dea.orderservice.withoutsrp; + +public class Item { + public String sku; + public int quantity; + + public Item(String sku, int quantity) + { + this.sku = sku; + this.quantity = quantity; + } +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/Order.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/Order.java new file mode 100644 index 0000000..8790450 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/Order.java @@ -0,0 +1,44 @@ +package nl.oose.dea.orderservice.withoutsrp; + +import javax.mail.MessagingException; +import java.util.logging.Logger; + +public class Order { + private Logger logger = Logger.getLogger(getClass().getName()); + + public void checkout(Cart cart, PaymentDetails paymentDetails, boolean notifyCustomer) + { + if (paymentDetails.paymentMethod == PaymentMethod.CreditCard) chargeCard(paymentDetails, cart); + reserveInventory(cart); + if (notifyCustomer) notifyCustomer(cart); + } + + private void notifyCustomer(Cart cart) { + MailClient mailClient = new MailClient(); + try { + mailClient.send("Your order is processed.", cart.getCustomerEmail()); + } catch (MessagingException e) { + logger.severe(e.getMessage()); + throw new OrderException("Cannot send mail to " + cart.getCustomerEmail(), e); + } + + } + + private void reserveInventory(Cart cart) { + for(Item item : cart.getItems()) + { + try { + InventorySystem inventorySystem = new InventorySystem(); + inventorySystem.reserve(item.sku, item.quantity); + } catch(InsufficientInventoryException insufficientInventoryException) + { + throw new OrderException("Insufficient inventory for item " + item.sku, insufficientInventoryException); + } + } + } + + private void chargeCard(PaymentDetails paymentDetails, Cart cart) { + PaymentGateway paymentGateway = new PaymentGateway(); + paymentGateway.charge(cart.getBillingTotal(), cart.getCustomerName(), paymentDetails.cardNumber); + } +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/OrderException.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/OrderException.java new file mode 100644 index 0000000..fdbfc3b --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/OrderException.java @@ -0,0 +1,7 @@ +package nl.oose.dea.orderservice.withoutsrp; + +public class OrderException extends RuntimeException { + public OrderException(String message, Exception originalException) { + super(message, originalException); + } +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/PaymentDetails.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/PaymentDetails.java new file mode 100644 index 0000000..c0ddb2c --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/PaymentDetails.java @@ -0,0 +1,6 @@ +package nl.oose.dea.orderservice.withoutsrp; + +public class PaymentDetails { + public PaymentMethod paymentMethod; + public int cardNumber; +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/PaymentMethod.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/PaymentMethod.java new file mode 100644 index 0000000..7eb6282 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withoutsrp/PaymentMethod.java @@ -0,0 +1,5 @@ +package nl.oose.dea.orderservice.withoutsrp; + +public enum PaymentMethod { + CreditCard +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/CafetariaReservationService.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/CafetariaReservationService.java new file mode 100644 index 0000000..8f630b6 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/CafetariaReservationService.java @@ -0,0 +1,23 @@ +package nl.oose.dea.orderservice.withsrp; + +public class CafetariaReservationService implements ReservationService { + private InventorySystem inventorySystem = new InventorySystem(); + + @Override + public void reserveInventory(Cart cart) { + for(Item item : cart.getItems()) + { + try { + inventorySystem.reserve(item.sku, item.quantity); + } catch(InsufficientInventoryException insufficientInventoryException) + { + throw new OrderException("Insufficient inventory for item " + item.sku, insufficientInventoryException); + } + } + } + + @Override + public boolean isOnStock(String product, int amount) { + return inventorySystem.isOnStock(product, amount); + } +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/Cart.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/Cart.java new file mode 100644 index 0000000..ba82ef0 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/Cart.java @@ -0,0 +1,31 @@ +package nl.oose.dea.orderservice.withsrp; + +public class Cart { + private Item[] items; + private String customerName; + private int amount; + private String customerEmail; + + public Cart(String customerName, String customerEmail, Item[] items, int amount){ + this.customerName = customerName; + this.customerEmail = customerEmail; + this.items = items; + this.amount = amount; + } + + public Item[] getItems() { + return items; + } + + public String getCustomerName() { + return customerName; + } + + public int getBillingTotal() { + return amount; + } + + public String getCustomerEmail() { + return customerEmail; + } +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/InsufficientInventoryException.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/InsufficientInventoryException.java new file mode 100644 index 0000000..bb882f2 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/InsufficientInventoryException.java @@ -0,0 +1,4 @@ +package nl.oose.dea.orderservice.withsrp; + +public class InsufficientInventoryException extends Exception{ +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/InventorySystem.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/InventorySystem.java new file mode 100644 index 0000000..5d8ce87 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/InventorySystem.java @@ -0,0 +1,26 @@ +package nl.oose.dea.orderservice.withsrp; + +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Logger; + +public class InventorySystem { + private Logger logger = Logger.getLogger(getClass().getName()); + + private Map inventory = new HashMap() {{ + put("Frikandel", 20); + put("Bamihap", 25); + put("Mexicano", 50); + }}; + + public void reserve(String sku, int quantity) throws InsufficientInventoryException { + if (isOnStock(sku, quantity)) + inventory.put(sku, inventory.get(sku) - quantity); + else throw new InsufficientInventoryException(); + logger.info("There is still " + inventory.get(sku) + " of " + sku + " left in inventory"); + } + + public boolean isOnStock(String sku, int quantity) { + return inventory.get(sku) >= quantity; + } +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/Item.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/Item.java new file mode 100644 index 0000000..eeb6081 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/Item.java @@ -0,0 +1,12 @@ +package nl.oose.dea.orderservice.withsrp; + +public class Item { + public String sku; + public int quantity; + + public Item(String sku, int quantity) + { + this.sku = sku; + this.quantity = quantity; + } +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/LoggingPaymentProcessor.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/LoggingPaymentProcessor.java new file mode 100644 index 0000000..990efbc --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/LoggingPaymentProcessor.java @@ -0,0 +1,12 @@ +package nl.oose.dea.orderservice.withsrp; + +import nl.oose.dea.orderservice.withoutsrp.PaymentGateway; + +public class LoggingPaymentProcessor implements PaymentProcessor { + private PaymentGateway paymentGateway = new PaymentGateway(); + + @Override + public boolean chargeCard(PaymentDetails paymentDetails, Cart cart) { + return paymentGateway.charge(cart.getBillingTotal(), cart.getCustomerName(), paymentDetails.cardNumber); + } +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/MailNotificationService.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/MailNotificationService.java new file mode 100644 index 0000000..c8c3866 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/MailNotificationService.java @@ -0,0 +1,21 @@ +package nl.oose.dea.orderservice.withsrp; + +import nl.oose.dea.orderservice.withoutsrp.*; + +import javax.mail.MessagingException; +import java.util.logging.Logger; + +public class MailNotificationService implements NotificationService { + private Logger logger = Logger.getLogger(getClass().getName()); + + @Override + public void notifyCustomer(Cart cart) { + MailClient mailClient = new MailClient(); + try { + mailClient.send("Your order is processed.", cart.getCustomerEmail()); + } catch (MessagingException e) { + logger.severe(e.getMessage()); + throw new OrderException("Cannot send mail to " + cart.getCustomerEmail(), e); + } + } +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/NotificationService.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/NotificationService.java new file mode 100644 index 0000000..51f7c8b --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/NotificationService.java @@ -0,0 +1,5 @@ +package nl.oose.dea.orderservice.withsrp; + +public interface NotificationService { + void notifyCustomer(Cart cart); +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/OnlineOrder.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/OnlineOrder.java new file mode 100644 index 0000000..8f1b941 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/OnlineOrder.java @@ -0,0 +1,22 @@ +package nl.oose.dea.orderservice.withsrp; + +public class OnlineOrder extends Order { + private final PaymentDetails paymentDetails; + + private PaymentProcessor paymentProcessor = new LoggingPaymentProcessor(); + private NotificationService notificationService = new MailNotificationService(); + private ReservationService reservationService = new CafetariaReservationService(); + + public OnlineOrder(Cart cart, PaymentDetails paymentDetails) { + super(cart); + this.paymentDetails = paymentDetails; + } + + @Override + public void checkout() { + paymentProcessor.chargeCard(paymentDetails, cart); + reservationService.reserveInventory(cart); + notificationService.notifyCustomer(cart); + super.checkout(); + } +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/Order.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/Order.java new file mode 100644 index 0000000..121079f --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/Order.java @@ -0,0 +1,12 @@ +package nl.oose.dea.orderservice.withsrp; + +public abstract class Order { + protected Cart cart; + + public Order(Cart cart) + { + this.cart = cart; + } + + public void checkout() {} +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/OrderException.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/OrderException.java new file mode 100644 index 0000000..3aeaf70 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/OrderException.java @@ -0,0 +1,7 @@ +package nl.oose.dea.orderservice.withsrp; + +public class OrderException extends RuntimeException { + public OrderException(String message, Exception originalException) { + super(message, originalException); + } +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/POSCashOrder.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/POSCashOrder.java new file mode 100644 index 0000000..b8c6669 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/POSCashOrder.java @@ -0,0 +1,7 @@ +package nl.oose.dea.orderservice.withsrp; + +public class POSCashOrder extends Order { + public POSCashOrder(Cart cart) { + super(cart); + } +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/POSCreditOrder.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/POSCreditOrder.java new file mode 100644 index 0000000..94c9124 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/POSCreditOrder.java @@ -0,0 +1,17 @@ +package nl.oose.dea.orderservice.withsrp; + +public class POSCreditOrder extends Order { + private final PaymentDetails paymentDetails; + private PaymentProcessor paymentProcessor = new LoggingPaymentProcessor(); + + public POSCreditOrder(Cart cart, PaymentDetails paymentDetails) { + super(cart); + this.paymentDetails = paymentDetails; + } + + @Override + public void checkout() { + paymentProcessor.chargeCard(paymentDetails, cart); + super.checkout(); + } +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/PaymentDetails.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/PaymentDetails.java new file mode 100644 index 0000000..eda805a --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/PaymentDetails.java @@ -0,0 +1,6 @@ +package nl.oose.dea.orderservice.withsrp; + +public class PaymentDetails { + public PaymentMethod paymentMethod; + public int cardNumber; +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/PaymentMethod.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/PaymentMethod.java new file mode 100644 index 0000000..d1d82a1 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/PaymentMethod.java @@ -0,0 +1,5 @@ +package nl.oose.dea.orderservice.withsrp; + +public enum PaymentMethod { + CreditCard +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/PaymentProcessor.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/PaymentProcessor.java new file mode 100644 index 0000000..80cd392 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/PaymentProcessor.java @@ -0,0 +1,5 @@ +package nl.oose.dea.orderservice.withsrp; + +public interface PaymentProcessor { + boolean chargeCard(PaymentDetails paymentDetails, Cart cart); +} diff --git a/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/ReservationService.java b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/ReservationService.java new file mode 100644 index 0000000..befd634 --- /dev/null +++ b/exercises/solid/1.SRP/src/main/java/nl/oose/dea/orderservice/withsrp/ReservationService.java @@ -0,0 +1,7 @@ +package nl.oose.dea.orderservice.withsrp; + +public interface ReservationService { + void reserveInventory(Cart cart); + + boolean isOnStock(String product, int amount); +} diff --git a/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withoutsrp/InventorySystemTest.java b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withoutsrp/InventorySystemTest.java new file mode 100644 index 0000000..9a30dd0 --- /dev/null +++ b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withoutsrp/InventorySystemTest.java @@ -0,0 +1,27 @@ +package nl.oose.dea.orderservice.withoutsrp; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +public class InventorySystemTest { + private InventorySystem inventorySystem; + + @Before + public void setUp() + { + inventorySystem = new InventorySystem(); + } + + @Test + public void buyAllFrikandellen() throws Exception { + inventorySystem.reserve("Frikandel", 20); + assertTrue(inventorySystem.isOnStock("Frikandel", 0)); + } + + @Test(expected = InsufficientInventoryException.class) + public void youCannotBuyMoreThanAvailableInTheInventory() throws Exception { + inventorySystem.reserve("Frikandel", 21); + } +} \ No newline at end of file diff --git a/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withoutsrp/MailClientTest.java b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withoutsrp/MailClientTest.java new file mode 100644 index 0000000..62e7a5a --- /dev/null +++ b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withoutsrp/MailClientTest.java @@ -0,0 +1,16 @@ +package nl.oose.dea.orderservice.withoutsrp; + +import org.junit.Test; + +import javax.mail.MessagingException; + +import static org.junit.Assert.*; + +public class MailClientTest { + + @Test(expected = MessagingException.class) + public void youCannotSendAMailUsingGmailWithAnEmptyUsernameAndPass() throws Exception { + MailClient mailClient = new MailClient(); + mailClient.send("Test", "oose@gmail.com"); + } +} \ No newline at end of file diff --git a/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withoutsrp/OrderTest.java b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withoutsrp/OrderTest.java new file mode 100644 index 0000000..20c87c3 --- /dev/null +++ b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withoutsrp/OrderTest.java @@ -0,0 +1,58 @@ +package nl.oose.dea.orderservice.withoutsrp; + +import org.junit.Before; +import org.junit.Test; + +/** + * You might have been missing an assertEquals-statement in this unit test, this is due to the fact that + * we don't apply the Dependency Inversion Principle (DIP from SOLID) yet. + */ +public class OrderTest { + private Order order; + + @Before + public void setUp() throws Exception { + order = new Order(); + } + + @Test + public void checkoutProductsWithoutNotification() throws Exception { + // notification is always false when order created by a retail PoS + order.checkout(createCartWithSufficientInventory(), createPaymentDetails(), false); + } + + @Test(expected = OrderException.class) + public void checkoutProductsWhenInsufficientInventoryWithoutNotification() throws Exception { + // notification is always false when order created by a retail PoS + order.checkout(createCartWithInsufficientInventory(), createPaymentDetails(), false); + } + + @Test(expected = OrderException.class) // an exception is thrown because of the missing username/password + public void checkoutProductsWithNotification() throws Exception { + // notification is always true when order created by the web site + order.checkout(createCartWithSufficientInventory(), createPaymentDetails(), true); + } + + private PaymentDetails createPaymentDetails() { + PaymentDetails paymentDetails = new PaymentDetails(); + paymentDetails.cardNumber = 1234; + paymentDetails.paymentMethod = PaymentMethod.CreditCard; + return paymentDetails; + } + + private Cart createCartWithSufficientInventory() { + Cart cart = new Cart("OOSE", "oose@gmail.com", + new Item[]{ + new Item("Frikandel", 10), + new Item("Bamihap", 5) }, 20); + return cart; + } + + private Cart createCartWithInsufficientInventory() { + Cart cart = new Cart("OOSE", "oose@gmail.com", + new Item[]{ + new Item("Frikandel", 100), + new Item("Bamihap", 5) }, 200); + return cart; + } +} \ No newline at end of file diff --git a/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withoutsrp/PaymentGatewayTest.java b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withoutsrp/PaymentGatewayTest.java new file mode 100644 index 0000000..c9dd3dc --- /dev/null +++ b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withoutsrp/PaymentGatewayTest.java @@ -0,0 +1,14 @@ +package nl.oose.dea.orderservice.withoutsrp; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class PaymentGatewayTest { + + @Test + public void testCharge() throws Exception { + PaymentGateway paymentGateway = new PaymentGateway(); + assertTrue(paymentGateway.charge(20,"OOSE", 1234)); + } +} \ No newline at end of file diff --git a/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/NotificationServiceTest.java b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/NotificationServiceTest.java new file mode 100644 index 0000000..b763ad4 --- /dev/null +++ b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/NotificationServiceTest.java @@ -0,0 +1,23 @@ +package nl.oose.dea.orderservice.withsrp; + +import org.junit.Test; + +import javax.mail.MessagingException; + +public class NotificationServiceTest { + + @Test(expected = OrderException.class) + public void youCannotSendAMailUsingGmailWithAnEmptyUsernameAndPass() throws Exception { + /** + * TIP: + * - create a new class MailNotificationService that implements a new interface NotificationService + * - implement a notifyCustomer method using the code from the 'old' Order class. + */ + NotificationService notificationService = new MailNotificationService(); + notificationService.notifyCustomer(createCart()); + } + + private Cart createCart() { + return new Cart("Test", "oose@gmail.com", new Item[]{}, 0); + } +} \ No newline at end of file diff --git a/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/OnlineOrderTest.java b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/OnlineOrderTest.java new file mode 100644 index 0000000..ec7c980 --- /dev/null +++ b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/OnlineOrderTest.java @@ -0,0 +1,34 @@ +package nl.oose.dea.orderservice.withsrp; + +import org.junit.Test; + +public class OnlineOrderTest { + @Test(expected = OrderException.class) + public void checkoutOnlineOrder() + { + /** + * TIP: Re-create Order as an abstract base class which can hold the cart and defines an parameterless + * method called checkout with an empty body. Instead of passing parameters to the method, pass required + * parameters to the constructor. + * + * An OnlineOrder depends on three interfaces: + * - NotificationService + * - ReservationService + * - PaymentProcessor + */ + Order order = new OnlineOrder(createCart(), createPaymentDetails()); + order.checkout(); + } + + private Cart createCart() { + return new Cart("Test", "oose@gmail.com", new Item[]{ new Item("Frikandel", 20)}, 100); + } + + private PaymentDetails createPaymentDetails() + { + PaymentDetails paymentDetails = new PaymentDetails(); + paymentDetails.paymentMethod = PaymentMethod.CreditCard; + paymentDetails.cardNumber = 1234; + return paymentDetails; + } +} diff --git a/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/POSCashOrderTest.java b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/POSCashOrderTest.java new file mode 100644 index 0000000..5931f4c --- /dev/null +++ b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/POSCashOrderTest.java @@ -0,0 +1,25 @@ +package nl.oose.dea.orderservice.withsrp; + +import org.junit.Test; + +public class POSCashOrderTest { + @Test + public void checkoutOnlineOrder() + { + /** + * TIP: Re-create Order as an abstract base class which can hold the cart and defines an parameterless + * method called checkout with an empty body. Instead of passing parameters to the method, pass required + * parameters to the constructor. + * + * An POSCashOrder depends on none of the given interfaces. It does not depend on the ReservationService because we can get the items right out of the shop, we don't + * have to access our inventory, and we get paid cash. + + */ + Order order = new POSCashOrder(createCart()); + order.checkout(); + } + + private Cart createCart() { + return new Cart("Test", "oose@gmail.com", new Item[]{ new Item("Frikandel", 20)}, 100); + } +} diff --git a/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/POSCreditOrderTest.java b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/POSCreditOrderTest.java new file mode 100644 index 0000000..76254e9 --- /dev/null +++ b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/POSCreditOrderTest.java @@ -0,0 +1,35 @@ +package nl.oose.dea.orderservice.withsrp; + +import org.junit.Test; + +public class POSCreditOrderTest { + @Test + public void checkoutOnlineOrder() + { + /** + * TIP: Re-create Order as an abstract base class which can hold the cart and defines an parameterless + * method called checkout with an empty body. Instead of passing parameters to the method, pass required + * parameters to the constructor. + * + * An POSCreditOrder depends on one interface: + * - PaymentProcessor + * + * It does not depend on the InventorySystem because we can get the items right out of the shop, we don't + * have to access our inventory + */ + Order order = new POSCreditOrder(createCart(), createPaymentDetails()); + order.checkout(); + } + + private Cart createCart() { + return new Cart("Test", "oose@gmail.com", new Item[]{ new Item("Frikandel", 20)}, 100); + } + + private PaymentDetails createPaymentDetails() + { + PaymentDetails paymentDetails = new PaymentDetails(); + paymentDetails.paymentMethod = PaymentMethod.CreditCard; + paymentDetails.cardNumber = 1234; + return paymentDetails; + } +} diff --git a/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/PaymentProcessorTest.java b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/PaymentProcessorTest.java new file mode 100644 index 0000000..cef8108 --- /dev/null +++ b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/PaymentProcessorTest.java @@ -0,0 +1,30 @@ +package nl.oose.dea.orderservice.withsrp; + +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +public class PaymentProcessorTest { + + @Test + public void testCharge() throws Exception { + /** + * TIP: + * - create a new class LoggingPaymentProcessor that implements a new interface PaymentProcessor + * - implement a chargeCard method using the code from the 'old' Order class. + */ + PaymentProcessor paymentProcessor = new LoggingPaymentProcessor(); + assertTrue(paymentProcessor.chargeCard(createPaymentDetails(),createCart())); + } + + private Cart createCart() { + return new Cart("OOSE", "oose@gmail.com", new Item[]{}, 0); + } + + private PaymentDetails createPaymentDetails() { + PaymentDetails paymentDetails = new PaymentDetails(); + paymentDetails.cardNumber = 1234; + paymentDetails.paymentMethod = PaymentMethod.CreditCard; + return paymentDetails; + } +} \ No newline at end of file diff --git a/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/ReservationServiceTest.java b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/ReservationServiceTest.java new file mode 100644 index 0000000..b97f24d --- /dev/null +++ b/exercises/solid/1.SRP/src/test/java/nl/oose/dea/orderservice/withsrp/ReservationServiceTest.java @@ -0,0 +1,40 @@ +package nl.oose.dea.orderservice.withsrp; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +public class ReservationServiceTest { + private ReservationService reservationService; + + @Before + public void setUp() + { + /** + * TIP: + * - create a new class CafetariaReservationService that implements a new interface ReservationService + * - implement a reserveInventory method using the code from the 'old' Order class. + */ + reservationService = new CafetariaReservationService(); + } + + @Test + public void buyAllFrikandellen() throws Exception { + reservationService.reserveInventory(createCartWithSufficientInventory()); + assertTrue(reservationService.isOnStock("Frikandel", 0)); + } + + private Cart createCartWithSufficientInventory() { + return new Cart("OOSE","oose@gmail.com", new Item[] { new Item("Frikandel", 20) }, 50); + } + + private Cart createCartWithInsufficientInventory() { + return new Cart("OOSE","oose@gmail.com", new Item[] { new Item("Frikandel", 21) }, 50); + } + + @Test(expected = OrderException.class) + public void youCannotBuyMoreThanAvailableInTheInventory() throws Exception { + reservationService.reserveInventory(createCartWithInsufficientInventory()); + } +} \ No newline at end of file diff --git a/exercises/solid/2-SOLID-OCP/.idea/.name b/exercises/solid/2-SOLID-OCP/.idea/.name deleted file mode 100644 index 934d594..0000000 --- a/exercises/solid/2-SOLID-OCP/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -SOLID-OCP \ No newline at end of file diff --git a/exercises/solid/2-SOLID-OCP/.idea/misc.xml b/exercises/solid/2-SOLID-OCP/.idea/misc.xml deleted file mode 100644 index da56fbd..0000000 --- a/exercises/solid/2-SOLID-OCP/.idea/misc.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - diff --git a/exercises/solid/2-SOLID-OCP/.idea/uiDesigner.xml b/exercises/solid/2-SOLID-OCP/.idea/uiDesigner.xml deleted file mode 100644 index 3b00020..0000000 --- a/exercises/solid/2-SOLID-OCP/.idea/uiDesigner.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/exercises/solid/2-SOLID-OCP/pom.xml b/exercises/solid/2-SOLID-OCP/pom.xml deleted file mode 100644 index f2bb4ff..0000000 --- a/exercises/solid/2-SOLID-OCP/pom.xml +++ /dev/null @@ -1,24 +0,0 @@ - - 4.0.0 - - oose.dea.solid - SOLID-OCP - 1.0-SNAPSHOT - jar - - SOLID-OCP - - - UTF-8 - - - - - junit - junit - 4.11 - test - - - diff --git a/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/DataAccess.java b/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/DataAccess.java deleted file mode 100644 index 92d0080..0000000 --- a/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/DataAccess.java +++ /dev/null @@ -1,12 +0,0 @@ -package oose.dea.solid; - -import java.util.ArrayList; -import java.util.List; - -public class DataAccess { - public List getData() { - List dataElements = new ArrayList(); - dataElements.add(new ReportDataElement("Rody")); - return dataElements; - } -} \ No newline at end of file diff --git a/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/Program.java b/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/Program.java deleted file mode 100644 index 755c6e0..0000000 --- a/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/Program.java +++ /dev/null @@ -1,16 +0,0 @@ -package oose.dea.solid; - -import java.io.IOException; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class Program { - public static void main(String[] args) throws IOException { - Report report = new Report(); - report.print(); - System.out.println("Program ended, press a key to continue"); - System.in.read(); - } -} diff --git a/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/Report.java b/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/Report.java deleted file mode 100644 index 6672ba3..0000000 --- a/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/Report.java +++ /dev/null @@ -1,13 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class Report { - private final ReportPrinter reportPrinter = new ReportPrinter(); - - public void print() { - reportPrinter.print(); - } -} diff --git a/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/ReportDataElement.java b/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/ReportDataElement.java deleted file mode 100644 index 7e3a917..0000000 --- a/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/ReportDataElement.java +++ /dev/null @@ -1,13 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class ReportDataElement { - private String customerName; - - public ReportDataElement(String customerName) { - this.customerName = customerName; - } -} diff --git a/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/ReportFormatter.java b/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/ReportFormatter.java deleted file mode 100644 index ed6dbcb..0000000 --- a/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/ReportFormatter.java +++ /dev/null @@ -1,10 +0,0 @@ -package oose.dea.solid; - -public class ReportFormatter { - public ReportFormatter() { - } - - public void formatReport() { - System.out.println("Formatting report for 8-1/2x11 ..."); - } -} \ No newline at end of file diff --git a/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/ReportPrinter.java b/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/ReportPrinter.java deleted file mode 100644 index 069a1f7..0000000 --- a/exercises/solid/2-SOLID-OCP/src/main/java/oose/dea/solid/ReportPrinter.java +++ /dev/null @@ -1,15 +0,0 @@ -package oose.dea.solid; - -public class ReportPrinter { - private final DataAccess dataAccess = new DataAccess(); - private final ReportFormatter reportFormatter = new ReportFormatter(); - - public ReportPrinter() { - } - - public void print() { - dataAccess.getData(); - reportFormatter.formatReport(); - System.out.println("Printing report to laser printer"); - } -} \ No newline at end of file diff --git a/exercises/solid/2.OCP/OCP.iml b/exercises/solid/2.OCP/OCP.iml new file mode 100644 index 0000000..e04193a --- /dev/null +++ b/exercises/solid/2.OCP/OCP.iml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/exercises/solid/2.OCP/README.md b/exercises/solid/2.OCP/README.md new file mode 100644 index 0000000..9a32a9f --- /dev/null +++ b/exercises/solid/2.OCP/README.md @@ -0,0 +1,13 @@ +This project contains an implementation of an OrderService with two packages: +* nl.oose.dea.orderservice.withoutocp contains classes and test cases without the OCP principle applied +* nl.oose.dea.orderservice.withocp contains some classes and test cases that guide you to apply the OCP + +First read the sourcecode without OCP and run the test cases (comment the testcases with OCP applied to compile and run these testcases). +Second, read the test cases with OCP and (re)create the correct classes and interfaces so the unit tests all pass. + +Refactor the code in the following order: +* EachPriceRule +* PerGramPriceRule +* SpecialPriceRule +* PricingCalculator and IPricingCalculator +* Cart \ No newline at end of file diff --git a/exercises/solid/2.OCP/pom.xml b/exercises/solid/2.OCP/pom.xml new file mode 100644 index 0000000..5e0245f --- /dev/null +++ b/exercises/solid/2.OCP/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + nl.oose.dea + OCP-Example + 1.0-SNAPSHOT + + + junit + junit + 4.11 + + + \ No newline at end of file diff --git a/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/Cart.java b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/Cart.java new file mode 100644 index 0000000..d9a1946 --- /dev/null +++ b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/Cart.java @@ -0,0 +1,27 @@ +package nl.oose.dea.orderservice.withocp; + +import java.util.ArrayList; +import java.util.List; + +public class Cart { + private IPricingCalculator pricingCalculator; + private List items; + + public Cart(IPricingCalculator pricingCalculator) { + this.pricingCalculator = pricingCalculator; + this.items = new ArrayList(); + } + + public void addItem(Item item) + { + items.add(item); + } + + public double totalAmount() { + double total = 0; + for(Item item: items) { + total += pricingCalculator.calculatePrice(item); + } + return total; + } +} diff --git a/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/EachPriceRule.java b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/EachPriceRule.java new file mode 100644 index 0000000..b6feb13 --- /dev/null +++ b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/EachPriceRule.java @@ -0,0 +1,13 @@ +package nl.oose.dea.orderservice.withocp; + +public class EachPriceRule implements PriceRule { + @Override + public boolean isMatch(Item eachItem) { + return eachItem.sku.startsWith("EACH"); + } + + @Override + public double calculatePrice(Item eachItem) { + return 5.0 * eachItem.quantity; + } +} diff --git a/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/IPricingCalculator.java b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/IPricingCalculator.java new file mode 100644 index 0000000..c3bc86c --- /dev/null +++ b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/IPricingCalculator.java @@ -0,0 +1,5 @@ +package nl.oose.dea.orderservice.withocp; + +public interface IPricingCalculator { + double calculatePrice(Item item); +} diff --git a/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/Item.java b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/Item.java new file mode 100644 index 0000000..64ac299 --- /dev/null +++ b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/Item.java @@ -0,0 +1,14 @@ +package nl.oose.dea.orderservice.withocp; + +public class Item { + // SKU' A store's or catalog's product and service identification code, often portrayed as a + // machine-readable bar code that helps the item to be tracked for inventory. + public String sku; + public int quantity; + + public Item(String sku, int quantity) + { + this.sku = sku; + this.quantity = quantity; + } +} diff --git a/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/PerGramPriceRule.java b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/PerGramPriceRule.java new file mode 100644 index 0000000..b6ef4c9 --- /dev/null +++ b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/PerGramPriceRule.java @@ -0,0 +1,13 @@ +package nl.oose.dea.orderservice.withocp; + +public class PerGramPriceRule implements PriceRule { + @Override + public boolean isMatch(Item item) { + return item.sku.startsWith("WEIGHT"); + } + + @Override + public double calculatePrice(Item item) { + return (item.quantity * 4.0) / 1000; + } +} diff --git a/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/PriceRule.java b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/PriceRule.java new file mode 100644 index 0000000..e2a07b1 --- /dev/null +++ b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/PriceRule.java @@ -0,0 +1,7 @@ +package nl.oose.dea.orderservice.withocp; + +public interface PriceRule { + boolean isMatch(Item eachItem); + + double calculatePrice(Item eachItem); +} diff --git a/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/PricingCalculator.java b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/PricingCalculator.java new file mode 100644 index 0000000..86e34ea --- /dev/null +++ b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/PricingCalculator.java @@ -0,0 +1,25 @@ +package nl.oose.dea.orderservice.withocp; + +import java.util.ArrayList; +import java.util.List; + +public class PricingCalculator implements IPricingCalculator { + private List rules; + + public PricingCalculator() { + rules = new ArrayList() {{ + add(new EachPriceRule()); + add(new PerGramPriceRule()); + add(new SpecialPriceRule()); + }}; + } + + public double calculatePrice(Item item) { + for(PriceRule rule : rules) + { + if (rule.isMatch(item)) + return rule.calculatePrice(item); + } + return 0; + } +} diff --git a/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/SpecialPriceRule.java b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/SpecialPriceRule.java new file mode 100644 index 0000000..6d437de --- /dev/null +++ b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withocp/SpecialPriceRule.java @@ -0,0 +1,16 @@ +package nl.oose.dea.orderservice.withocp; + +public class SpecialPriceRule implements PriceRule { + @Override + public boolean isMatch(Item item) { + return item.sku.startsWith("SPECIAL"); + } + + @Override + public double calculatePrice(Item item) { + double price = item.quantity * 0.4; + int setsOfThree = item.quantity / 3; + price -= setsOfThree * 0.2; + return price; + } +} diff --git a/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withoutocp/Cart.java b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withoutocp/Cart.java new file mode 100644 index 0000000..33d01bc --- /dev/null +++ b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withoutocp/Cart.java @@ -0,0 +1,40 @@ +package nl.oose.dea.orderservice.withoutocp; + +import java.util.ArrayList; +import java.util.List; + +public class Cart { + private List items = new ArrayList(); + + public void addItem(Item item) { + items.add(item); + } + + /** + * We need to modify this code when adding new rules. This method does not + * comply to the OCP! + * @return + */ + public double totalAmount() + { + double total = 0; + for(Item item: items) + { + if (item.sku.startsWith("EACH")) + { + total += item.quantity * 5.0; + } + else if(item.sku.startsWith("WEIGHT")) + { + total += (item.quantity * 4.0) / 1000; + } + else if(item.sku.startsWith("SPECIAL")) + { + total += item.quantity * 0.4; + int setsOfThree = item.quantity / 3; + total -= setsOfThree * 0.2; + } + } + return total; + } +} diff --git a/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withoutocp/Item.java b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withoutocp/Item.java new file mode 100644 index 0000000..90a6112 --- /dev/null +++ b/exercises/solid/2.OCP/src/main/java/nl/oose/dea/orderservice/withoutocp/Item.java @@ -0,0 +1,14 @@ +package nl.oose.dea.orderservice.withoutocp; + +public class Item { + // SKU' A store's or catalog's product and service identification code, often portrayed as a + // machine-readable bar code that helps the item to be tracked for inventory. + public String sku; + public int quantity; + + public Item(String sku, int quantity) + { + this.sku = sku; + this.quantity = quantity; + } +} diff --git a/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withocp/CartTest.java b/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withocp/CartTest.java new file mode 100644 index 0000000..8a2b8f9 --- /dev/null +++ b/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withocp/CartTest.java @@ -0,0 +1,47 @@ +package nl.oose.dea.orderservice.withocp; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class CartTest { + private Cart cart; + + @Before + public void setUp() throws Exception { + cart = new Cart(new PricingCalculator()); + } + + @Test + public void totalIsZeroWhenCartIsEmpty() { + assertEquals(0, cart.totalAmount(), 0); + } + + @Test + public void totalIsFiveWhenCartHasOneEachItem() { + cart.addItem(new Item("EACH_Frikandel", 1)); + assertEquals(5.0, cart.totalAmount(), 0); + } + + @Test + public void totalIsTwoWhenCartHasOnePoundOfFrenchFries() { + cart.addItem(new Item("WEIGHT_Frietjes", 200)); // small size bag + cart.addItem(new Item("WEIGHT_Frietjes", 300)); // medium size bag + + assertEquals(2.0, cart.totalAmount(), 0.1); + } + + @Test + public void totalIsEightyCentsWhenCartHasTwoSpecialItems() { + cart.addItem(new Item("SPECIAL_Fritessaus", 2)); + assertEquals(0.8, cart.totalAmount(), 0.01); + } + + @Test + public void totalIsTwoWhenCartHasSixSpecialItems() { + cart.addItem(new Item("SPECIAL_Fritessaus", 3)); + cart.addItem(new Item("SPECIAL_Fritessaus", 3)); + assertEquals(2, cart.totalAmount(), 0.01); + } +} \ No newline at end of file diff --git a/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withocp/EachPriceRuleTest.java b/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withocp/EachPriceRuleTest.java new file mode 100644 index 0000000..eb794b2 --- /dev/null +++ b/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withocp/EachPriceRuleTest.java @@ -0,0 +1,38 @@ +package nl.oose.dea.orderservice.withocp; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class EachPriceRuleTest { + private PriceRule eachPriceRule; + + @Before + public void setUp() + { + eachPriceRule = new EachPriceRule(); + } + + @Test + public void ruleOnlyAppliesToSKUStartingWithTheWordEach() + { + assertTrue(eachPriceRule.isMatch(createEachItem())); + assertFalse(eachPriceRule.isMatch(createItem("WEIGHT"))); + } + + @Test + public void ruleCalculatesPriceAmountTimesFive() + { + assertEquals(5.0, eachPriceRule.calculatePrice(createEachItem()),0); + } + + private Item createEachItem() + { + return createItem("EACH"); + } + + private Item createItem(String prefix) { + return new Item(prefix + "_Frikandel", 1); + } +} diff --git a/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withocp/PerGramPriceRuleTest.java b/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withocp/PerGramPriceRuleTest.java new file mode 100644 index 0000000..c468a2c --- /dev/null +++ b/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withocp/PerGramPriceRuleTest.java @@ -0,0 +1,38 @@ +package nl.oose.dea.orderservice.withocp; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class PerGramPriceRuleTest { + private PriceRule eachPriceRule; + + @Before + public void setUp() + { + eachPriceRule = new PerGramPriceRule(); + } + + @Test + public void ruleOnlyAppliesToSKUStartingWithTheWordEach() + { + assertTrue(eachPriceRule.isMatch(createPerGramItem())); + assertFalse(eachPriceRule.isMatch(createItem("EACH"))); + } + + @Test + public void ruleCalculatesPriceAmountTimesFive() + { + assertEquals(2.0, eachPriceRule.calculatePrice(createPerGramItem()),0); + } + + private Item createPerGramItem() + { + return createItem("WEIGHT"); + } + + private Item createItem(String prefix) { + return new Item(prefix + "_Frietjes", 500); + } +} diff --git a/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withocp/PricingCalculatorTest.java b/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withocp/PricingCalculatorTest.java new file mode 100644 index 0000000..45d6e0d --- /dev/null +++ b/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withocp/PricingCalculatorTest.java @@ -0,0 +1,46 @@ +package nl.oose.dea.orderservice.withocp; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class PricingCalculatorTest { + private IPricingCalculator pricingCalculator; + + @Before + public void setUp() throws Exception { + pricingCalculator = new PricingCalculator(); + } + + @Test + public void totalIsZeroWhenCartIsEmpty() { + assertEquals(0, pricingCalculator.calculatePrice(new Item("EACH_Frikandel", 0)), 0); + } + + @Test + public void totalIsFiveWhenCartHasOneEachItem() { + assertEquals(5.0, pricingCalculator.calculatePrice(new Item("EACH_Frikandel", 1)), 0); + } + + @Test + public void totalIsTwoWhenCartHasOnePoundOfFrenchFries() { + assertEquals(2.0, pricingCalculator.calculatePrice(new Item("WEIGHT_Frietjes", 500)), 0); + } + + @Test + public void totalIsEightyCentsWhenCartHasTwoSpecialItems() { + assertEquals(0.8, pricingCalculator.calculatePrice(new Item("SPECIAL_Fritessaus", 2)), 0.01); + } + + @Test + public void totalIsTwoWhenCartHasSixSpecialItems() { + assertEquals(2, pricingCalculator.calculatePrice(new Item("SPECIAL_Fritessaus", 6)), 0.01); + } + + @Test + public void totalIsZeroWhenNoRuleApplies() + { + assertEquals(0, pricingCalculator.calculatePrice(new Item("SOME_Frikandel", 100)), 0); + } +} \ No newline at end of file diff --git a/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withocp/SpecialPriceRuleTest.java b/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withocp/SpecialPriceRuleTest.java new file mode 100644 index 0000000..616096c --- /dev/null +++ b/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withocp/SpecialPriceRuleTest.java @@ -0,0 +1,38 @@ +package nl.oose.dea.orderservice.withocp; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class SpecialPriceRuleTest { + private PriceRule eachPriceRule; + + @Before + public void setUp() + { + eachPriceRule = new SpecialPriceRule(); + } + + @Test + public void ruleOnlyAppliesToSKUStartingWithTheWordEach() + { + assertTrue(eachPriceRule.isMatch(createSpecialItem())); + assertFalse(eachPriceRule.isMatch(createItem("EACH"))); + } + + @Test + public void ruleCalculatesPriceAmountTimesFive() + { + assertEquals(2.0, eachPriceRule.calculatePrice(createSpecialItem()),0.1); + } + + private Item createSpecialItem() + { + return createItem("SPECIAL"); + } + + private Item createItem(String prefix) { + return new Item(prefix + "_Fritessaus", 6); + } +} diff --git a/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withoutocp/CartTest.java b/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withoutocp/CartTest.java new file mode 100644 index 0000000..506ab11 --- /dev/null +++ b/exercises/solid/2.OCP/src/test/java/nl/oose/dea/orderservice/withoutocp/CartTest.java @@ -0,0 +1,47 @@ +package nl.oose.dea.orderservice.withoutocp; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class CartTest { + private Cart cart; + + @Before + public void setUp() throws Exception { + cart = new Cart(); + } + + @Test + public void totalIsZeroWhenCartIsEmpty() { + assertEquals(0, cart.totalAmount(), 0); + } + + @Test + public void totalIsFiveWhenCartHasOneEachItem() { + cart.addItem(new Item("EACH_Frikandel", 1)); + assertEquals(5.0, cart.totalAmount(), 0); + } + + @Test + public void totalIsTwoWhenCartHasOnePoundOfFrenchFries() { + cart.addItem(new Item("WEIGHT_Frietjes", 200)); // small size bag + cart.addItem(new Item("WEIGHT_Frietjes", 300)); // medium size bag + + assertEquals(2.0, cart.totalAmount(), 0); + } + + @Test + public void totalIsEightyCentsWhenCartHasTwoSpecialItems() { + cart.addItem(new Item("SPECIAL_Fritessaus", 2)); + assertEquals(0.8, cart.totalAmount(), 0.01); + } + + @Test + public void totalIsTwoWhenCartHasSixSpecialItems() { + cart.addItem(new Item("SPECIAL_Fritessaus", 3)); + cart.addItem(new Item("SPECIAL_Fritessaus", 3)); + assertEquals(2, cart.totalAmount(), 0.01); + } +} \ No newline at end of file diff --git a/exercises/solid/3-SOLID-LSP/.idea/.name b/exercises/solid/3-SOLID-LSP/.idea/.name deleted file mode 100644 index 83dd0b9..0000000 --- a/exercises/solid/3-SOLID-LSP/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -SOLID-LSP \ No newline at end of file diff --git a/exercises/solid/3-SOLID-LSP/.idea/uiDesigner.xml b/exercises/solid/3-SOLID-LSP/.idea/uiDesigner.xml deleted file mode 100644 index 3b00020..0000000 --- a/exercises/solid/3-SOLID-LSP/.idea/uiDesigner.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/exercises/solid/3-SOLID-LSP/pom.xml b/exercises/solid/3-SOLID-LSP/pom.xml deleted file mode 100644 index 5e841b6..0000000 --- a/exercises/solid/3-SOLID-LSP/pom.xml +++ /dev/null @@ -1,24 +0,0 @@ - - 4.0.0 - - oose.dea.solid - SOLID-LSP - 1.0-SNAPSHOT - jar - - SOLID-LSP - - - UTF-8 - - - - - junit - junit - 4.11 - test - - - diff --git a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/DataAccess.java b/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/DataAccess.java deleted file mode 100644 index 92d0080..0000000 --- a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/DataAccess.java +++ /dev/null @@ -1,12 +0,0 @@ -package oose.dea.solid; - -import java.util.ArrayList; -import java.util.List; - -public class DataAccess { - public List getData() { - List dataElements = new ArrayList(); - dataElements.add(new ReportDataElement("Rody")); - return dataElements; - } -} \ No newline at end of file diff --git a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/Program.java b/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/Program.java deleted file mode 100644 index ac2d88d..0000000 --- a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/Program.java +++ /dev/null @@ -1,16 +0,0 @@ -package oose.dea.solid; - -import java.io.IOException; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class Program { - public static void main(String[] args) throws IOException { - Report report = new TabloidReport(); - report.print(); - System.out.println("Program ended, press a key to continue"); - System.in.read(); - } -} diff --git a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/Report.java b/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/Report.java deleted file mode 100644 index 6672ba3..0000000 --- a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/Report.java +++ /dev/null @@ -1,13 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class Report { - private final ReportPrinter reportPrinter = new ReportPrinter(); - - public void print() { - reportPrinter.print(); - } -} diff --git a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/ReportDataElement.java b/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/ReportDataElement.java deleted file mode 100644 index 7e3a917..0000000 --- a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/ReportDataElement.java +++ /dev/null @@ -1,13 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class ReportDataElement { - private String customerName; - - public ReportDataElement(String customerName) { - this.customerName = customerName; - } -} diff --git a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/ReportFormatter.java b/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/ReportFormatter.java deleted file mode 100644 index ed6dbcb..0000000 --- a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/ReportFormatter.java +++ /dev/null @@ -1,10 +0,0 @@ -package oose.dea.solid; - -public class ReportFormatter { - public ReportFormatter() { - } - - public void formatReport() { - System.out.println("Formatting report for 8-1/2x11 ..."); - } -} \ No newline at end of file diff --git a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/ReportPrinter.java b/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/ReportPrinter.java deleted file mode 100644 index 069a1f7..0000000 --- a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/ReportPrinter.java +++ /dev/null @@ -1,15 +0,0 @@ -package oose.dea.solid; - -public class ReportPrinter { - private final DataAccess dataAccess = new DataAccess(); - private final ReportFormatter reportFormatter = new ReportFormatter(); - - public ReportPrinter() { - } - - public void print() { - dataAccess.getData(); - reportFormatter.formatReport(); - System.out.println("Printing report to laser printer"); - } -} \ No newline at end of file diff --git a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/TabloidReport.java b/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/TabloidReport.java deleted file mode 100644 index 85d300f..0000000 --- a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/TabloidReport.java +++ /dev/null @@ -1,13 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class TabloidReport extends Report { - private final ReportPrinter reportPrinter = new TabloidReportPrinter(); - - public void print() { - reportPrinter.print(); - } -} diff --git a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/TabloidReportFormatter.java b/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/TabloidReportFormatter.java deleted file mode 100644 index adb649f..0000000 --- a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/TabloidReportFormatter.java +++ /dev/null @@ -1,11 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class TabloidReportFormatter extends ReportFormatter { - public void formatReport() { - System.out.println("Formatting report for 11x17 ..."); - } -} diff --git a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/TabloidReportPrinter.java b/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/TabloidReportPrinter.java deleted file mode 100644 index 9a5f4c3..0000000 --- a/exercises/solid/3-SOLID-LSP/src/main/java/oose/dea/solid/TabloidReportPrinter.java +++ /dev/null @@ -1,19 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class TabloidReportPrinter extends ReportPrinter { - - private final DataAccess dataAccess = new DataAccess(); - private final ReportFormatter reportFormatter = new TabloidReportFormatter(); - - - public void print() { - dataAccess.getData(); - reportFormatter.formatReport(); - System.out.println("Printing report to matrix printer"); - } - -} diff --git a/exercises/solid/3.LSP/LSP.iml b/exercises/solid/3.LSP/LSP.iml new file mode 100644 index 0000000..e04193a --- /dev/null +++ b/exercises/solid/3.LSP/LSP.iml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/exercises/solid/3.LSP/README.md b/exercises/solid/3.LSP/README.md new file mode 100644 index 0000000..2b7a637 --- /dev/null +++ b/exercises/solid/3.LSP/README.md @@ -0,0 +1,11 @@ +This project contains an implementation of a small drawing application with two packages: +* nl.oose.dea.drawing.withoutlsp contains classes and test cases without the LSP principle applied +* nl.oose.dea.drawing.withlsp contains some classes and test cases that guide you to apply the LSP + +First read the sourcecode without LSP and run the test cases (comment the testcases with LSP applied to compile and run these testcases). +Second, read the test cases with LSP and (re)create the correct classes and interfaces so the unit tests all pass. + +* Break the is-a relationship between Rectangle and Square +* Introduce a superclass for both shapes, called .... Shape :) +* Move the area-calculation to the right spot +* When all the unit tests pass, add a new Shape called Triangle and adjust the third test case so it also calculates the area for a Triangle \ No newline at end of file diff --git a/exercises/solid/3.LSP/pom.xml b/exercises/solid/3.LSP/pom.xml new file mode 100644 index 0000000..1402257 --- /dev/null +++ b/exercises/solid/3.LSP/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + nl.oose.dea + LSP-Example + 1.0-SNAPSHOT + + + junit + junit + 4.11 + + + \ No newline at end of file diff --git a/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withlsp/Rectangle.java b/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withlsp/Rectangle.java new file mode 100644 index 0000000..716027a --- /dev/null +++ b/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withlsp/Rectangle.java @@ -0,0 +1,26 @@ +package nl.oose.dea.drawing.withlsp; + +public class Rectangle implements Shape { + private int height; + private int width; + + public void setHeight(int height) { + this.height = height; + } + + public int getHeight() { + return height; + } + + public void setWidth(int width) { + this.width = width; + } + + public int getWidth() { + return width; + } + + public int area() { + return width * height; + } +} diff --git a/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withlsp/Shape.java b/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withlsp/Shape.java new file mode 100644 index 0000000..b66211a --- /dev/null +++ b/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withlsp/Shape.java @@ -0,0 +1,5 @@ +package nl.oose.dea.drawing.withlsp; + +public interface Shape { + int area(); +} diff --git a/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withlsp/Square.java b/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withlsp/Square.java new file mode 100644 index 0000000..2b2edaa --- /dev/null +++ b/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withlsp/Square.java @@ -0,0 +1,17 @@ +package nl.oose.dea.drawing.withlsp; + +public class Square implements Shape { + private int sideLength; + + public void setSideLength(int sideLength) { + this.sideLength = sideLength; + } + + public int getSideLength() { + return sideLength; + } + + public int area() { + return sideLength * sideLength; + } +} diff --git a/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withlsp/Triangle.java b/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withlsp/Triangle.java new file mode 100644 index 0000000..9ea2354 --- /dev/null +++ b/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withlsp/Triangle.java @@ -0,0 +1,27 @@ +package nl.oose.dea.drawing.withlsp; + +public class Triangle implements Shape { + private int base; + private int height; + + public void setBase(int base) { + this.base = base; + } + + public int getBase() { + return base; + } + + public void setHeight(int height) { + this.height = height; + } + + public int getHeight() { + return height; + } + + @Override + public int area() { + return (base * height) / 2; + } +} diff --git a/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withoutlsp/AreaCalculator.java b/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withoutlsp/AreaCalculator.java new file mode 100644 index 0000000..5b61fc2 --- /dev/null +++ b/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withoutlsp/AreaCalculator.java @@ -0,0 +1,18 @@ +package nl.oose.dea.drawing.withoutlsp; + +/** + * We use overloading here to create area-implementations for different types. + * + * It violates a principle called "Tell, don't ask". Rectangle and Square both + * need to expose their properties to calculate the area. We're going to refactor that, because we + * decoupled behaviour from state which is not a good example of information hiding. + */ +public class AreaCalculator { + public static int calulateArea(Rectangle rectangle) { + return rectangle.getHeight() * rectangle.getWidth(); + } + + public static int calulateArea(Square square) { + return square.getHeight() * square.getHeight(); + } +} diff --git a/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withoutlsp/Rectangle.java b/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withoutlsp/Rectangle.java new file mode 100644 index 0000000..2612d48 --- /dev/null +++ b/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withoutlsp/Rectangle.java @@ -0,0 +1,22 @@ +package nl.oose.dea.drawing.withoutlsp; + +public class Rectangle { + private int height; + private int width; + + public int getHeight() { + return height; + } + + public void setHeight(int height) { + this.height = height; + } + + public int getWidth() { + return width; + } + + public void setWidth(int width) { + this.width = width; + } +} diff --git a/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withoutlsp/Square.java b/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withoutlsp/Square.java new file mode 100644 index 0000000..0e35a3f --- /dev/null +++ b/exercises/solid/3.LSP/src/main/java/nl/oose/dea/drawing/withoutlsp/Square.java @@ -0,0 +1,15 @@ +package nl.oose.dea.drawing.withoutlsp; + +public class Square extends Rectangle { + @Override + public void setWidth(int width) { + super.setWidth(width); + super.setHeight(width); + } + + @Override + public void setHeight(int height) { + super.setHeight(height); + super.setWidth(height); + } +} diff --git a/exercises/solid/3.LSP/src/test/java/nl/oose/dea/drawing/withlsp/AreaCalculationTest.java b/exercises/solid/3.LSP/src/test/java/nl/oose/dea/drawing/withlsp/AreaCalculationTest.java new file mode 100644 index 0000000..6307966 --- /dev/null +++ b/exercises/solid/3.LSP/src/test/java/nl/oose/dea/drawing/withlsp/AreaCalculationTest.java @@ -0,0 +1,58 @@ +package nl.oose.dea.drawing.withlsp; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class AreaCalculationTest { + + @Test + public void sixFor2x3Rectangle() throws Exception { + Rectangle rectangle = new Rectangle(); + rectangle.setHeight(2); + rectangle.setWidth(3); + + assertEquals(6, rectangle.area()); + } + + @Test + public void nineFor3x3Square() throws Exception { + Square square = new Square(); + square.setSideLength(3); + + assertEquals(9, square.area()); + } + + @Test + public void twentyFor4x5RectangleFromSquare() throws Exception { + final Rectangle rectangle = new Rectangle(); + rectangle.setWidth(5); + rectangle.setHeight(4); + + final Square square = new Square(); + square.setSideLength(3); + + final Triangle triangle = new Triangle(); + triangle.setBase(10); + triangle.setHeight(5); + + List shapes = new ArrayList() {{ + add(rectangle); + add(square); + add(triangle); + }}; + + List areas = new ArrayList(); + for(Shape shape:shapes) + { + areas.add(shape.area()); + } + + assertEquals(20, areas.get(0).intValue()); + assertEquals(9, areas.get(1).intValue()); + assertEquals(25, areas.get(2).intValue()); + } +} \ No newline at end of file diff --git a/exercises/solid/3.LSP/src/test/java/nl/oose/dea/drawing/withoutlsp/AreaCalculatorTest.java b/exercises/solid/3.LSP/src/test/java/nl/oose/dea/drawing/withoutlsp/AreaCalculatorTest.java new file mode 100644 index 0000000..f5d583d --- /dev/null +++ b/exercises/solid/3.LSP/src/test/java/nl/oose/dea/drawing/withoutlsp/AreaCalculatorTest.java @@ -0,0 +1,39 @@ +package nl.oose.dea.drawing.withoutlsp; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class AreaCalculatorTest { + + @Test + public void sixFor2x3Rectangle() throws Exception { + Rectangle rectangle = new Rectangle(); + rectangle.setHeight(2); + rectangle.setWidth(3); + + assertEquals(6, AreaCalculator.calulateArea(rectangle)); + } + + @Test + public void nineFor3x3Square() throws Exception { + Square square = new Square(); + square.setHeight(3); + + assertEquals(9, AreaCalculator.calulateArea(square)); + } + + @Test + /** + * Isn't supposed to fail, but it does because we did not apply the LSP-principle + */ + public void twentyFor4x5RectangleFromSquare() throws Exception { + Rectangle square = new Square(); + square.setHeight(5); + square.setWidth(4); + + // It _is_ a Rectangle so we may expect the behaviour of the Rectangle class! + assertEquals(20, AreaCalculator.calulateArea(square)); + // Apparently Square does not have the same behaviour as Rectangle, so it is _not_ a Rectangle + } +} \ No newline at end of file diff --git a/exercises/solid/4-SOLID-ISP/.idea/.name b/exercises/solid/4-SOLID-ISP/.idea/.name deleted file mode 100644 index 680bb3b..0000000 --- a/exercises/solid/4-SOLID-ISP/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -SOLID-ISP \ No newline at end of file diff --git a/exercises/solid/4-SOLID-ISP/.idea/libraries/Maven__junit_junit_4_11.xml b/exercises/solid/4-SOLID-ISP/.idea/libraries/Maven__junit_junit_4_11.xml deleted file mode 100644 index f33320d..0000000 --- a/exercises/solid/4-SOLID-ISP/.idea/libraries/Maven__junit_junit_4_11.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/exercises/solid/4-SOLID-ISP/.idea/misc.xml b/exercises/solid/4-SOLID-ISP/.idea/misc.xml deleted file mode 100644 index da56fbd..0000000 --- a/exercises/solid/4-SOLID-ISP/.idea/misc.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - diff --git a/exercises/solid/4-SOLID-ISP/.idea/uiDesigner.xml b/exercises/solid/4-SOLID-ISP/.idea/uiDesigner.xml deleted file mode 100644 index 3b00020..0000000 --- a/exercises/solid/4-SOLID-ISP/.idea/uiDesigner.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/exercises/solid/4-SOLID-ISP/.idea/workspace.xml b/exercises/solid/4-SOLID-ISP/.idea/workspace.xml deleted file mode 100644 index bce8272..0000000 --- a/exercises/solid/4-SOLID-ISP/.idea/workspace.xml +++ /dev/null @@ -1,1067 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - localhost - 5050 - - - - - - - 1402220195132 - 1402220195132 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No facets are configured - - - - - - - - abstract (v1.0.0, ruby-1.8.7-p249) [gem] - - - - - - - - 1.6 - - - - - - - - SOLID-ISP - - - - - - - - Maven: junit:junit:4.11 - - - - - - - - - diff --git a/exercises/solid/4-SOLID-ISP/pom.xml b/exercises/solid/4-SOLID-ISP/pom.xml deleted file mode 100644 index 733af03..0000000 --- a/exercises/solid/4-SOLID-ISP/pom.xml +++ /dev/null @@ -1,24 +0,0 @@ - - 4.0.0 - - oose.dea.solid - SOLID-ISP - 1.0-SNAPSHOT - jar - - SOLID-ISP - - - UTF-8 - - - - - junit - junit - 4.11 - test - - - diff --git a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/IDataAccess.java b/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/IDataAccess.java deleted file mode 100644 index 45d71d9..0000000 --- a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/IDataAccess.java +++ /dev/null @@ -1,15 +0,0 @@ -package oose.dea.solid; - -import java.util.List; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public interface IDataAccess { - List getReportData(); - - List queryData(String queryString); - - void saveData(IDataElement elementToSave); -} diff --git a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/IDataElement.java b/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/IDataElement.java deleted file mode 100644 index 18968ce..0000000 --- a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/IDataElement.java +++ /dev/null @@ -1,8 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public interface IDataElement { -} diff --git a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/LetterReport.java b/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/LetterReport.java deleted file mode 100644 index 8a45786..0000000 --- a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/LetterReport.java +++ /dev/null @@ -1,13 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class LetterReport extends Report { - private final ReportPrinter reportPrinter = new LetterReportPrinter(); - - public void print() { - reportPrinter.print(); - } -} diff --git a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/LetterReportFormatter.java b/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/LetterReportFormatter.java deleted file mode 100644 index 2c5e80e..0000000 --- a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/LetterReportFormatter.java +++ /dev/null @@ -1,11 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class LetterReportFormatter extends ReportFormatter { - public void formatReport() { - System.out.println("Formatting report for 8-1/2x11 ..."); - } -} diff --git a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/LetterReportPrinter.java b/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/LetterReportPrinter.java deleted file mode 100644 index a8ac674..0000000 --- a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/LetterReportPrinter.java +++ /dev/null @@ -1,16 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class LetterReportPrinter extends ReportPrinter { - private final IDataAccess reportDataAcccess = new ReportDataAccess(); - private final ReportFormatter reportFormatter = new LetterReportFormatter(); - - public void print() { - reportDataAcccess.getReportData(); - reportFormatter.formatReport(); - System.out.println("Printing report to laser printer"); - } -} diff --git a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/Program.java b/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/Program.java deleted file mode 100644 index bc2b282..0000000 --- a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/Program.java +++ /dev/null @@ -1,16 +0,0 @@ -package oose.dea.solid; - -import java.io.IOException; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class Program { - public static void main(String[] args) throws IOException { - Report report = new LetterReport(); - report.print(); - System.out.println("Program ended, press a key to continue"); - System.in.read(); - } -} diff --git a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/Report.java b/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/Report.java deleted file mode 100644 index 4f0bafd..0000000 --- a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/Report.java +++ /dev/null @@ -1,9 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public abstract class Report { - public abstract void print(); -} diff --git a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/ReportDataAccess.java b/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/ReportDataAccess.java deleted file mode 100644 index 4396621..0000000 --- a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/ReportDataAccess.java +++ /dev/null @@ -1,24 +0,0 @@ -package oose.dea.solid; - -import sun.reflect.generics.reflectiveObjects.NotImplementedException; - -import java.util.ArrayList; -import java.util.List; - -public class ReportDataAccess implements IDataAccess { - public List getReportData() { - List dataElements = new ArrayList(); - dataElements.add(new ReportDataElement("Rody")); - return dataElements; - } - - @Override - public List queryData(String queryString) { - throw new NotImplementedException(); - } - - @Override - public void saveData(IDataElement elementToSave) { - throw new NotImplementedException(); - } -} \ No newline at end of file diff --git a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/ReportDataElement.java b/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/ReportDataElement.java deleted file mode 100644 index b698512..0000000 --- a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/ReportDataElement.java +++ /dev/null @@ -1,13 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class ReportDataElement implements IDataElement { - private String customerName; - - public ReportDataElement(String customerName) { - this.customerName = customerName; - } -} diff --git a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/ReportFormatter.java b/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/ReportFormatter.java deleted file mode 100644 index b3ef930..0000000 --- a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/ReportFormatter.java +++ /dev/null @@ -1,5 +0,0 @@ -package oose.dea.solid; - -public abstract class ReportFormatter { - public abstract void formatReport(); -} \ No newline at end of file diff --git a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/ReportPrinter.java b/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/ReportPrinter.java deleted file mode 100644 index 3de1af3..0000000 --- a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/ReportPrinter.java +++ /dev/null @@ -1,5 +0,0 @@ -package oose.dea.solid; - -public abstract class ReportPrinter { - public abstract void print(); -} \ No newline at end of file diff --git a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/TabloidReport.java b/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/TabloidReport.java deleted file mode 100644 index 85d300f..0000000 --- a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/TabloidReport.java +++ /dev/null @@ -1,13 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class TabloidReport extends Report { - private final ReportPrinter reportPrinter = new TabloidReportPrinter(); - - public void print() { - reportPrinter.print(); - } -} diff --git a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/TabloidReportFormatter.java b/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/TabloidReportFormatter.java deleted file mode 100644 index adb649f..0000000 --- a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/TabloidReportFormatter.java +++ /dev/null @@ -1,11 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class TabloidReportFormatter extends ReportFormatter { - public void formatReport() { - System.out.println("Formatting report for 11x17 ..."); - } -} diff --git a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/TabloidReportPrinter.java b/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/TabloidReportPrinter.java deleted file mode 100644 index da281ce..0000000 --- a/exercises/solid/4-SOLID-ISP/src/main/java/oose/dea/solid/TabloidReportPrinter.java +++ /dev/null @@ -1,19 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class TabloidReportPrinter extends ReportPrinter { - - private final IDataAccess reportDataAcccess = new ReportDataAccess(); - private final ReportFormatter reportFormatter = new TabloidReportFormatter(); - - - public void print() { - reportDataAcccess.getReportData(); - reportFormatter.formatReport(); - System.out.println("Printing report to matrix printer"); - } - -} diff --git a/exercises/solid/4.ISP/ISP.iml b/exercises/solid/4.ISP/ISP.iml new file mode 100644 index 0000000..e04193a --- /dev/null +++ b/exercises/solid/4.ISP/ISP.iml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/exercises/solid/4.ISP/README.md b/exercises/solid/4.ISP/README.md new file mode 100644 index 0000000..98a4c1f --- /dev/null +++ b/exercises/solid/4.ISP/README.md @@ -0,0 +1,6 @@ +This project contains an implementation of a CartRepository with two packages: +* nl.oose.dea.orderservice.withoutisp contains classes and test cases without the ISP principle applied +* nl.oose.dea.orderservice.withisp contains some classes and test cases that guide you to apply the ISP + +First read the sourcecode without ISP and run the test cases (comment the testcases with ISP applied to compile and run these testcases). +Second, read the test cases with ISP and (re)create the correct classes and interfaces so the unit tests all pass. diff --git a/exercises/solid/4.ISP/pom.xml b/exercises/solid/4.ISP/pom.xml new file mode 100644 index 0000000..b4edc3f --- /dev/null +++ b/exercises/solid/4.ISP/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + + nl.oose.dea + ISP-Example + 1.0-SNAPSHOT + + + junit + junit + 4.11 + + + + \ No newline at end of file diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/Cart.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/Cart.java new file mode 100644 index 0000000..94a9779 --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/Cart.java @@ -0,0 +1,28 @@ +package nl.oose.dea.orderservice.withisp; + +public class Cart { + private int id; + private Item[] items; + private String customerName; + private int billingTotal; + private String customerEmail; + + public Cart(String customerName, String customerEmail, Item[] items, int billingTotal){ + this.customerName = customerName; + this.customerEmail = customerEmail; + this.items = items; + this.billingTotal = billingTotal; + } + + public Item[] getItems() { + return items; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } +} diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/CartRepository.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/CartRepository.java new file mode 100644 index 0000000..45ab1e8 --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/CartRepository.java @@ -0,0 +1,4 @@ +package nl.oose.dea.orderservice.withisp; + +public interface CartRepository extends Repository{ +} diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/FullAccessClient.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/FullAccessClient.java new file mode 100644 index 0000000..6528fc6 --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/FullAccessClient.java @@ -0,0 +1,17 @@ +package nl.oose.dea.orderservice.withisp; + +public class FullAccessClient { + private CartRepository cartRepository; + + public FullAccessClient(CartRepository cartRepository) + { + + this.cartRepository = cartRepository; + } + + public int saveCurrentCart(Cart c) + { + cartRepository.add(c); + return c.getId(); + } +} diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/InMemoryCartRepository.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/InMemoryCartRepository.java new file mode 100644 index 0000000..97019ec --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/InMemoryCartRepository.java @@ -0,0 +1,40 @@ +package nl.oose.dea.orderservice.withisp; + +import java.util.ArrayList; +import java.util.List; + +public class InMemoryCartRepository implements CartRepository { + private List carts = new ArrayList(); + private int lastId = 0; + + @Override + public void add(Cart cart) { + cart.setId(lastId); + carts.add(cart); + lastId++; + } + + @Override + public void update(Cart updatedCart) { + carts.set(carts.indexOf(find(updatedCart.getId())), updatedCart); + } + + @Override + public void remove(Cart cart) { + carts.remove(cart); + } + + @Override + public List list() { + return carts; + } + + @Override + public Cart find(int cartId) { + for(Cart cart:carts) + { + if (cart.getId() == cartId) return cart; + } + return null; + } +} diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/Item.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/Item.java new file mode 100644 index 0000000..908b50b --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/Item.java @@ -0,0 +1,12 @@ +package nl.oose.dea.orderservice.withisp; + +public class Item { + public String sku; + public int quantity; + + public Item(String sku, int quantity) + { + this.sku = sku; + this.quantity = quantity; + } +} diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/ReadOnlyAccessClient.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/ReadOnlyAccessClient.java new file mode 100644 index 0000000..36e8396 --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/ReadOnlyAccessClient.java @@ -0,0 +1,26 @@ +package nl.oose.dea.orderservice.withisp; + +import java.util.List; + +public class ReadOnlyAccessClient { + + private CartRepository cartRepository; + + public ReadOnlyAccessClient(CartRepository cartRepository) + { + this.cartRepository = cartRepository; + } + + public int getNumberOfCarts() + { + return cartRepository.list().size(); + } + + public void deleteAll() + { + List carts = cartRepository.list(); + for (int i = carts.size() - 1; i >= 0; i--) { + cartRepository.remove(carts.get(i)); + } + } +} diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/Repository.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/Repository.java new file mode 100644 index 0000000..6eb398a --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withisp/Repository.java @@ -0,0 +1,15 @@ +package nl.oose.dea.orderservice.withisp; + +import java.util.List; + +public interface Repository { + void add(T entity); + + void update(T updatedEntity); + + void remove(T entity); + + List list(); + + T find(int id); +} diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/Cart.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/Cart.java new file mode 100644 index 0000000..e4db132 --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/Cart.java @@ -0,0 +1,28 @@ +package nl.oose.dea.orderservice.withoutisp; + +public class Cart { + private int id; + private nl.oose.dea.orderservice.withoutisp.Item[] items; + private String customerName; + private int billingTotal; + private String customerEmail; + + public Cart(String customerName, String customerEmail, Item[] items, int billingTotal){ + this.customerName = customerName; + this.customerEmail = customerEmail; + this.items = items; + this.billingTotal = billingTotal; + } + + public Item[] getItems() { + return items; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } +} diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/CartRepository.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/CartRepository.java new file mode 100644 index 0000000..8c0c950 --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/CartRepository.java @@ -0,0 +1,8 @@ +package nl.oose.dea.orderservice.withoutisp; + +/** + * Also possible to implement also ReadOnlyCartRepository and remove the extends relationship + * between Repository and ReadOnlyRepository + */ +public interface CartRepository extends Repository { +} diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/FullAccessClient.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/FullAccessClient.java new file mode 100644 index 0000000..8a329b1 --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/FullAccessClient.java @@ -0,0 +1,17 @@ +package nl.oose.dea.orderservice.withoutisp; + +public class FullAccessClient { + private CartRepository cartRepository; + + public FullAccessClient(nl.oose.dea.orderservice.withoutisp.CartRepository cartRepository) + { + + this.cartRepository = cartRepository; + } + + public int saveCurrentCart(Cart c) + { + cartRepository.add(c); + return c.getId(); + } +} diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/InMemoryCartRepository.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/InMemoryCartRepository.java new file mode 100644 index 0000000..88f83ce --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/InMemoryCartRepository.java @@ -0,0 +1,40 @@ +package nl.oose.dea.orderservice.withoutisp; + +import java.util.ArrayList; +import java.util.List; + +public class InMemoryCartRepository implements CartRepository, ReadOnlyCartRepository { + private List carts = new ArrayList(); + private int lastId = 0; + + @Override + public void add(Cart cart) { + cart.setId(lastId); + carts.add(cart); + lastId++; + } + + @Override + public void update(Cart updatedCart) { + carts.set(carts.indexOf(find(updatedCart.getId())), updatedCart); + } + + @Override + public void remove(nl.oose.dea.orderservice.withoutisp.Cart cart) { + carts.remove(cart); + } + + @Override + public List list() { + return carts; + } + + @Override + public nl.oose.dea.orderservice.withoutisp.Cart find(int cartId) { + for(Cart cart:carts) + { + if (cart.getId() == cartId) return cart; + } + return null; + } +} diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/Item.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/Item.java new file mode 100644 index 0000000..b8bb0d2 --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/Item.java @@ -0,0 +1,12 @@ +package nl.oose.dea.orderservice.withoutisp; + +public class Item { + public String sku; + public int quantity; + + public Item(String sku, int quantity) + { + this.sku = sku; + this.quantity = quantity; + } +} diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/ReadOnlyAccessClient.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/ReadOnlyAccessClient.java new file mode 100644 index 0000000..78a8cd7 --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/ReadOnlyAccessClient.java @@ -0,0 +1,17 @@ +package nl.oose.dea.orderservice.withoutisp; + +public class ReadOnlyAccessClient { + + private ReadOnlyCartRepository cartRepository; + + public ReadOnlyAccessClient(ReadOnlyCartRepository cartRepository) + { + this.cartRepository = cartRepository; + } + + public int getNumberOfCarts() + { + return cartRepository.list().size(); + } + +} diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/ReadOnlyCartRepository.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/ReadOnlyCartRepository.java new file mode 100644 index 0000000..e458628 --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/ReadOnlyCartRepository.java @@ -0,0 +1,4 @@ +package nl.oose.dea.orderservice.withoutisp; + +public interface ReadOnlyCartRepository extends ReadOnlyRepository{ +} diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/ReadOnlyRepository.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/ReadOnlyRepository.java new file mode 100644 index 0000000..adee4d5 --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/ReadOnlyRepository.java @@ -0,0 +1,9 @@ +package nl.oose.dea.orderservice.withoutisp; + +import java.util.List; + +public interface ReadOnlyRepository { + List list(); + + T find(int id); +} diff --git a/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/Repository.java b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/Repository.java new file mode 100644 index 0000000..36dfc28 --- /dev/null +++ b/exercises/solid/4.ISP/src/main/java/nl/oose/dea/orderservice/withoutisp/Repository.java @@ -0,0 +1,9 @@ +package nl.oose.dea.orderservice.withoutisp; + +public interface Repository extends ReadOnlyRepository{ + void add(T entity); + + void update(T updatedEntity); + + void remove(T entity); +} diff --git a/exercises/solid/4.ISP/src/test/java/nl/oose/dea/orderservice/withisp/CartRepositoryTest.java b/exercises/solid/4.ISP/src/test/java/nl/oose/dea/orderservice/withisp/CartRepositoryTest.java new file mode 100644 index 0000000..2a1b4ac --- /dev/null +++ b/exercises/solid/4.ISP/src/test/java/nl/oose/dea/orderservice/withisp/CartRepositoryTest.java @@ -0,0 +1,46 @@ +package nl.oose.dea.orderservice.withisp; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class CartRepositoryTest { + private CartRepository cartRepository; + private Cart c1; + + @Before + public void setUp() throws Exception { + cartRepository = new InMemoryCartRepository(); + c1 = new Cart("OOSE1", "oose1@gmail.com", new Item[]{ new Item("Frikandel", 10)}, 100); + } + + @Test + public void basicFlowOfAllRepositoryActions() + { + cartRepository.add(c1); + assertNotNull(cartRepository.find(0)); + assertEquals(1, cartRepository.list().size()); + c1.getItems()[0].quantity = 2; + cartRepository.update(c1); + assertEquals(2, cartRepository.find(0).getItems()[0].quantity); + cartRepository.remove(c1); + assertEquals(0, cartRepository.list().size()); + } + + @Test + public void cannotFindAnythingInAnEmptyRepository() + { + assertNull(cartRepository.find(0)); + assertEquals(0, cartRepository.list().size()); + } + + @Test + public void cannotFindWhenUsingAWrongIdInAFilledRepository() + { + cartRepository.add(c1); + assertNull(cartRepository.find(1)); + assertEquals(1, cartRepository.list().size()); + } + +} \ No newline at end of file diff --git a/exercises/solid/4.ISP/src/test/java/nl/oose/dea/orderservice/withisp/ClientsTest.java b/exercises/solid/4.ISP/src/test/java/nl/oose/dea/orderservice/withisp/ClientsTest.java new file mode 100644 index 0000000..5fabdc6 --- /dev/null +++ b/exercises/solid/4.ISP/src/test/java/nl/oose/dea/orderservice/withisp/ClientsTest.java @@ -0,0 +1,33 @@ +package nl.oose.dea.orderservice.withisp; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class ClientsTest { + private ReadOnlyAccessClient readOnlyAccessClient; + private FullAccessClient fullAccessClient; + + @Before + public void setUp() throws Exception { + CartRepository cartRepository = new InMemoryCartRepository(); + readOnlyAccessClient = new ReadOnlyAccessClient(cartRepository); + fullAccessClient = new FullAccessClient(cartRepository); + } + + @Test + public void whenBothClientsShareTheSameDataSourceBothHaveTheSameAccess() + { + Cart c1 = new Cart("OOSE1", "oose1@gmail.com", new Item[]{ new Item("Frikandel", 10)}, 100); + Cart c2 = new Cart("OOSE2", "oose2@gmail.com", new Item[]{ new Item("Bamihap", 10)}, 150); + + assertEquals(0, fullAccessClient.saveCurrentCart(c1)); + assertEquals(1, fullAccessClient.saveCurrentCart(c2)); + + assertEquals(2, readOnlyAccessClient.getNumberOfCarts()); + + readOnlyAccessClient.deleteAll(); + assertEquals(0, readOnlyAccessClient.getNumberOfCarts()); + } +} \ No newline at end of file diff --git a/exercises/solid/4.ISP/src/test/java/nl/oose/dea/orderservice/withoutisp/ClientsTest.java b/exercises/solid/4.ISP/src/test/java/nl/oose/dea/orderservice/withoutisp/ClientsTest.java new file mode 100644 index 0000000..e8c23a3 --- /dev/null +++ b/exercises/solid/4.ISP/src/test/java/nl/oose/dea/orderservice/withoutisp/ClientsTest.java @@ -0,0 +1,36 @@ +package nl.oose.dea.orderservice.withoutisp; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class ClientsTest { + private ReadOnlyAccessClient readOnlyAccessClient; + private FullAccessClient fullAccessClient; + + @Before + public void setUp() throws Exception { + CartRepository cartRepository = new InMemoryCartRepository(); + ReadOnlyCartRepository readOnlyCartRepository = (ReadOnlyCartRepository)cartRepository; + + readOnlyAccessClient = new ReadOnlyAccessClient(readOnlyCartRepository); + fullAccessClient = new FullAccessClient(cartRepository); + } + + @Test + public void whenBothClientsShareTheSameDataSourceBothHaveTheSameAccess() + { + Cart c1 = new Cart("OOSE1", "oose1@gmail.com", new Item[]{ new Item("Frikandel", 10)}, 100); + Cart c2 = new Cart("OOSE2", "oose2@gmail.com", new Item[]{ new Item("Bamihap", 10)}, 150); + + assertEquals(0, fullAccessClient.saveCurrentCart(c1)); + assertEquals(1, fullAccessClient.saveCurrentCart(c2)); + + + // Try to uncomment and try call the delete method just like in the old version + // readOnlyAccessClient.deleteAll(); + + assertEquals(2, readOnlyAccessClient.getNumberOfCarts()); + } +} \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/.idea/.name b/exercises/solid/5-SOLID-DIP/.idea/.name deleted file mode 100644 index 4fbf8a0..0000000 --- a/exercises/solid/5-SOLID-DIP/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -SOLID-DIP \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/.idea/compiler.xml b/exercises/solid/5-SOLID-DIP/.idea/compiler.xml deleted file mode 100644 index bbfa77a..0000000 --- a/exercises/solid/5-SOLID-DIP/.idea/compiler.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - diff --git a/exercises/solid/5-SOLID-DIP/.idea/encodings.xml b/exercises/solid/5-SOLID-DIP/.idea/encodings.xml deleted file mode 100644 index 2f1a13c..0000000 --- a/exercises/solid/5-SOLID-DIP/.idea/encodings.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml b/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml deleted file mode 100644 index 30ff5cb..0000000 --- a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__commons_logging_commons_logging_1_1_1.xml b/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__commons_logging_commons_logging_1_1_1.xml deleted file mode 100644 index b770f56..0000000 --- a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__commons_logging_commons_logging_1_1_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__junit_junit_4_11.xml b/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__junit_junit_4_11.xml deleted file mode 100644 index f33320d..0000000 --- a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__junit_junit_4_11.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_springframework_spring_aop_3_2_4_RELEASE.xml b/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_springframework_spring_aop_3_2_4_RELEASE.xml deleted file mode 100644 index 9f3472f..0000000 --- a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_springframework_spring_aop_3_2_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_springframework_spring_beans_3_2_4_RELEASE.xml b/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_springframework_spring_beans_3_2_4_RELEASE.xml deleted file mode 100644 index a59054d..0000000 --- a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_springframework_spring_beans_3_2_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_springframework_spring_context_3_2_4_RELEASE.xml b/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_springframework_spring_context_3_2_4_RELEASE.xml deleted file mode 100644 index 11bd5f0..0000000 --- a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_springframework_spring_context_3_2_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_springframework_spring_core_3_2_4_RELEASE.xml b/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_springframework_spring_core_3_2_4_RELEASE.xml deleted file mode 100644 index 3718263..0000000 --- a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_springframework_spring_core_3_2_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_springframework_spring_expression_3_2_4_RELEASE.xml b/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_springframework_spring_expression_3_2_4_RELEASE.xml deleted file mode 100644 index 3214c89..0000000 --- a/exercises/solid/5-SOLID-DIP/.idea/libraries/Maven__org_springframework_spring_expression_3_2_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/.idea/misc.xml b/exercises/solid/5-SOLID-DIP/.idea/misc.xml deleted file mode 100644 index da56fbd..0000000 --- a/exercises/solid/5-SOLID-DIP/.idea/misc.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - diff --git a/exercises/solid/5-SOLID-DIP/.idea/modules.xml b/exercises/solid/5-SOLID-DIP/.idea/modules.xml deleted file mode 100644 index 9764d36..0000000 --- a/exercises/solid/5-SOLID-DIP/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/exercises/solid/5-SOLID-DIP/.idea/uiDesigner.xml b/exercises/solid/5-SOLID-DIP/.idea/uiDesigner.xml deleted file mode 100644 index 3b00020..0000000 --- a/exercises/solid/5-SOLID-DIP/.idea/uiDesigner.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/exercises/solid/5-SOLID-DIP/.idea/workspace.xml b/exercises/solid/5-SOLID-DIP/.idea/workspace.xml deleted file mode 100644 index 78f7eb4..0000000 --- a/exercises/solid/5-SOLID-DIP/.idea/workspace.xml +++ /dev/null @@ -1,983 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - localhost - 5050 - - - - - - - 1402220195132 - 1402220195132 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No facets are configured - - - - - - - - abstract (v1.0.0, ruby-1.8.7-p249) [gem] - - - - - - - - 1.6 - - - - - - - - SOLID-DIP - - - - - - - - Maven: junit:junit:4.11 - - - - - - - - - diff --git a/exercises/solid/5-SOLID-DIP/pom.xml b/exercises/solid/5-SOLID-DIP/pom.xml deleted file mode 100644 index c4ae44d..0000000 --- a/exercises/solid/5-SOLID-DIP/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - - oose.dea.solid - SOLID-DIP - 1.0-SNAPSHOT - jar - - SOLID-DIP - - - UTF-8 - - - - - junit - junit - 4.11 - test - - - org.springframework - spring-beans - 3.2.4.RELEASE - - - org.springframework - spring-core - 3.2.4.RELEASE - - - org.springframework - spring-context - 3.2.4.RELEASE - - - diff --git a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/IDataAccess.java b/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/IDataAccess.java deleted file mode 100644 index 4d77e9c..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/IDataAccess.java +++ /dev/null @@ -1,14 +0,0 @@ -package oose.dea.solid; - -import java.util.List; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public interface IDataAccess extends IReportDataAccess { - - List queryData(String queryString); - - void saveData(IDataElement elementToSave); -} diff --git a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/IDataElement.java b/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/IDataElement.java deleted file mode 100644 index 18968ce..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/IDataElement.java +++ /dev/null @@ -1,8 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public interface IDataElement { -} diff --git a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/IReportDataAccess.java b/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/IReportDataAccess.java deleted file mode 100644 index 133b00f..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/IReportDataAccess.java +++ /dev/null @@ -1,11 +0,0 @@ -package oose.dea.solid; - -import java.util.List; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public interface IReportDataAccess { - List getReportData(); -} diff --git a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/LetterReport.java b/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/LetterReport.java deleted file mode 100644 index 8a45786..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/LetterReport.java +++ /dev/null @@ -1,13 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class LetterReport extends Report { - private final ReportPrinter reportPrinter = new LetterReportPrinter(); - - public void print() { - reportPrinter.print(); - } -} diff --git a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/LetterReportFormatter.java b/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/LetterReportFormatter.java deleted file mode 100644 index 2c5e80e..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/LetterReportFormatter.java +++ /dev/null @@ -1,11 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class LetterReportFormatter extends ReportFormatter { - public void formatReport() { - System.out.println("Formatting report for 8-1/2x11 ..."); - } -} diff --git a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/LetterReportPrinter.java b/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/LetterReportPrinter.java deleted file mode 100644 index 40e8761..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/LetterReportPrinter.java +++ /dev/null @@ -1,16 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class LetterReportPrinter extends ReportPrinter { - private final IReportDataAccess reportDataAcccess = new ReportDataAccess(); - private final ReportFormatter reportFormatter = new LetterReportFormatter(); - - public void print() { - reportDataAcccess.getReportData(); - reportFormatter.formatReport(); - System.out.println("Printing report to laser printer"); - } -} diff --git a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/Program.java b/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/Program.java deleted file mode 100644 index bc2b282..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/Program.java +++ /dev/null @@ -1,16 +0,0 @@ -package oose.dea.solid; - -import java.io.IOException; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class Program { - public static void main(String[] args) throws IOException { - Report report = new LetterReport(); - report.print(); - System.out.println("Program ended, press a key to continue"); - System.in.read(); - } -} diff --git a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/Report.java b/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/Report.java deleted file mode 100644 index 4f0bafd..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/Report.java +++ /dev/null @@ -1,9 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public abstract class Report { - public abstract void print(); -} diff --git a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/ReportDataAccess.java b/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/ReportDataAccess.java deleted file mode 100644 index 4396621..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/ReportDataAccess.java +++ /dev/null @@ -1,24 +0,0 @@ -package oose.dea.solid; - -import sun.reflect.generics.reflectiveObjects.NotImplementedException; - -import java.util.ArrayList; -import java.util.List; - -public class ReportDataAccess implements IDataAccess { - public List getReportData() { - List dataElements = new ArrayList(); - dataElements.add(new ReportDataElement("Rody")); - return dataElements; - } - - @Override - public List queryData(String queryString) { - throw new NotImplementedException(); - } - - @Override - public void saveData(IDataElement elementToSave) { - throw new NotImplementedException(); - } -} \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/ReportDataElement.java b/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/ReportDataElement.java deleted file mode 100644 index b698512..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/ReportDataElement.java +++ /dev/null @@ -1,13 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class ReportDataElement implements IDataElement { - private String customerName; - - public ReportDataElement(String customerName) { - this.customerName = customerName; - } -} diff --git a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/ReportFormatter.java b/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/ReportFormatter.java deleted file mode 100644 index b3ef930..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/ReportFormatter.java +++ /dev/null @@ -1,5 +0,0 @@ -package oose.dea.solid; - -public abstract class ReportFormatter { - public abstract void formatReport(); -} \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/ReportPrinter.java b/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/ReportPrinter.java deleted file mode 100644 index 3de1af3..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/ReportPrinter.java +++ /dev/null @@ -1,5 +0,0 @@ -package oose.dea.solid; - -public abstract class ReportPrinter { - public abstract void print(); -} \ No newline at end of file diff --git a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/TabloidReport.java b/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/TabloidReport.java deleted file mode 100644 index 85d300f..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/TabloidReport.java +++ /dev/null @@ -1,13 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class TabloidReport extends Report { - private final ReportPrinter reportPrinter = new TabloidReportPrinter(); - - public void print() { - reportPrinter.print(); - } -} diff --git a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/TabloidReportFormatter.java b/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/TabloidReportFormatter.java deleted file mode 100644 index adb649f..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/TabloidReportFormatter.java +++ /dev/null @@ -1,11 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class TabloidReportFormatter extends ReportFormatter { - public void formatReport() { - System.out.println("Formatting report for 11x17 ..."); - } -} diff --git a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/TabloidReportPrinter.java b/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/TabloidReportPrinter.java deleted file mode 100644 index b15db9e..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/java/oose/dea/solid/TabloidReportPrinter.java +++ /dev/null @@ -1,19 +0,0 @@ -package oose.dea.solid; - -/** - * @author mdkr - * @version Copyright (c) 2014 HAN University, All rights reserved. - */ -public class TabloidReportPrinter extends ReportPrinter { - - private final IReportDataAccess reportDataAcccess = new ReportDataAccess(); - private final ReportFormatter reportFormatter = new TabloidReportFormatter(); - - - public void print() { - reportDataAcccess.getReportData(); - reportFormatter.formatReport(); - System.out.println("Printing report to matrix printer"); - } - -} diff --git a/exercises/solid/5-SOLID-DIP/src/main/resources/applicationContext.xml b/exercises/solid/5-SOLID-DIP/src/main/resources/applicationContext.xml deleted file mode 100644 index 7300b34..0000000 --- a/exercises/solid/5-SOLID-DIP/src/main/resources/applicationContext.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - diff --git a/exercises/solid/5.DIP/DIP-Example.iml b/exercises/solid/5.DIP/DIP-Example.iml new file mode 100644 index 0000000..cbd1a8e --- /dev/null +++ b/exercises/solid/5.DIP/DIP-Example.iml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/exercises/solid/5.DIP/README.md b/exercises/solid/5.DIP/README.md new file mode 100644 index 0000000..a0367c1 --- /dev/null +++ b/exercises/solid/5.DIP/README.md @@ -0,0 +1,6 @@ +This project contains an implementation of an OrderService with two packages: +* nl.oose.dea.orderservice.withoutdip contains classes and test cases without the DIP principle applied +* nl.oose.dea.orderservice.withdip contains some classes and test cases that guide you to apply the DIP + +First read the sourcecode without DIP and run the test cases (comment the testcases with DIP applied to compile and run these testcases). +Second, read the test cases with DIP and (re)create the correct classes and interfaces so the unit tests all pass. \ No newline at end of file diff --git a/exercises/solid/5.DIP/pom.xml b/exercises/solid/5.DIP/pom.xml new file mode 100644 index 0000000..32670e3 --- /dev/null +++ b/exercises/solid/5.DIP/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + + nl.oose.dea + DIP-Example + 1.0-SNAPSHOT + + + + junit + junit + 4.12 + + + javax.mail + mail + 1.4 + + + org.mockito + mockito-all + 1.9.5 + + + com.google.inject + guice + 3.0 + + + \ No newline at end of file diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/CafetariaReservationService.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/CafetariaReservationService.java new file mode 100644 index 0000000..600703b --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/CafetariaReservationService.java @@ -0,0 +1,23 @@ +package nl.oose.dea.orderservice.withdip; + +public class CafetariaReservationService implements ReservationService { + private InventorySystem inventorySystem = new InventorySystem(); + + @Override + public void reserveInventory(Cart cart) { + for(Item item : cart.getItems()) + { + try { + inventorySystem.reserve(item.sku, item.quantity); + } catch(InsufficientInventoryException insufficientInventoryException) + { + throw new OrderException("Insufficient inventory for item " + item.sku, insufficientInventoryException); + } + } + } + + @Override + public boolean isOnStock(String product, int amount) { + return inventorySystem.isOnStock(product, amount); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/Cart.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/Cart.java new file mode 100644 index 0000000..25d03a3 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/Cart.java @@ -0,0 +1,31 @@ +package nl.oose.dea.orderservice.withdip; + +public class Cart { + private Item[] items; + private String customerName; + private int amount; + private String customerEmail; + + public Cart(String customerName, String customerEmail, Item[] items, int amount){ + this.customerName = customerName; + this.customerEmail = customerEmail; + this.items = items; + this.amount = amount; + } + + public Item[] getItems() { + return items; + } + + public String getCustomerName() { + return customerName; + } + + public int getBillingTotal() { + return amount; + } + + public String getCustomerEmail() { + return customerEmail; + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/CartFactory.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/CartFactory.java new file mode 100644 index 0000000..9847cce --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/CartFactory.java @@ -0,0 +1,9 @@ +package nl.oose.dea.orderservice.withdip; + +import com.google.inject.Provider; + +public class CartFactory implements Provider{ + public Cart get() { + return new Cart("OOSE", "oose@gmail.com", new Item[] { new Item("Frikandel", 10)}, 100); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/InsufficientInventoryException.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/InsufficientInventoryException.java new file mode 100644 index 0000000..37e8970 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/InsufficientInventoryException.java @@ -0,0 +1,4 @@ +package nl.oose.dea.orderservice.withdip; + +public class InsufficientInventoryException extends Exception{ +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/InventorySystem.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/InventorySystem.java new file mode 100644 index 0000000..204cb72 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/InventorySystem.java @@ -0,0 +1,26 @@ +package nl.oose.dea.orderservice.withdip; + +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Logger; + +public class InventorySystem { + private Logger logger = Logger.getLogger(getClass().getName()); + + private Map inventory = new HashMap() {{ + put("Frikandel", 20); + put("Bamihap", 25); + put("Mexicano", 50); + }}; + + public void reserve(String sku, int quantity) throws InsufficientInventoryException { + if (isOnStock(sku, quantity)) + inventory.put(sku, inventory.get(sku) - quantity); + else throw new InsufficientInventoryException(); + logger.info("There is still " + inventory.get(sku) + " of " + sku + " left in inventory"); + } + + public boolean isOnStock(String sku, int quantity) { + return inventory.get(sku) >= quantity; + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/Item.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/Item.java new file mode 100644 index 0000000..87343d8 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/Item.java @@ -0,0 +1,12 @@ +package nl.oose.dea.orderservice.withdip; + +public class Item { + public String sku; + public int quantity; + + public Item(String sku, int quantity) + { + this.sku = sku; + this.quantity = quantity; + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/LoggingPaymentProcessor.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/LoggingPaymentProcessor.java new file mode 100644 index 0000000..6edb9c1 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/LoggingPaymentProcessor.java @@ -0,0 +1,10 @@ +package nl.oose.dea.orderservice.withdip; + +public class LoggingPaymentProcessor implements PaymentProcessor { + private PaymentGateway paymentGateway = new PaymentGateway(); + + @Override + public boolean chargeCard(PaymentDetails paymentDetails, Cart cart) { + return paymentGateway.charge(cart.getBillingTotal(), cart.getCustomerName(), paymentDetails.cardNumber); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/MailClient.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/MailClient.java new file mode 100644 index 0000000..deea186 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/MailClient.java @@ -0,0 +1,43 @@ +package nl.oose.dea.orderservice.withdip; + +import javax.mail.*; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeMessage; +import java.util.Properties; + +public class MailClient { + // This MailClient actually works when you have a valid GMail user + private final static String USERNAME = ""; + private final static String PASSWORD = ""; + + public void send(String message, String customerEmail) throws MessagingException { + Transport.send(prepareMessage(message, customerEmail)); + } + + private Message prepareMessage(String messageBody, String customerEmail) throws MessagingException { + Message message = new MimeMessage(setGoogleSession(prepareSMTPProperties())); + message.setFrom(new InternetAddress(USERNAME)); + message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(customerEmail)); + message.setSubject(messageBody); + message.setText(messageBody); + return message; + } + + private Properties prepareSMTPProperties() { + Properties props = new Properties(); + props.put("mail.smtp.auth", "true"); + props.put("mail.smtp.starttls.enable", "true"); + props.put("mail.smtp.host", "smtp.gmail.com"); + props.put("mail.smtp.port", "587"); + return props; + } + + private Session setGoogleSession(Properties props) { + return Session.getInstance(props, + new Authenticator() { + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(USERNAME, PASSWORD); + } + }); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/MailNotificationService.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/MailNotificationService.java new file mode 100644 index 0000000..00c0f44 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/MailNotificationService.java @@ -0,0 +1,19 @@ +package nl.oose.dea.orderservice.withdip; + +import javax.mail.MessagingException; +import java.util.logging.Logger; + +public class MailNotificationService implements NotificationService { + private Logger logger = Logger.getLogger(getClass().getName()); + + @Override + public void notifyCustomer(Cart cart) { + MailClient mailClient = new MailClient(); + try { + mailClient.send("Your order is processed.", cart.getCustomerEmail()); + } catch (MessagingException e) { + logger.severe(e.getMessage()); + throw new OrderException("Cannot send mail to " + cart.getCustomerEmail(), e); + } + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/NotificationService.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/NotificationService.java new file mode 100644 index 0000000..643e1cd --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/NotificationService.java @@ -0,0 +1,5 @@ +package nl.oose.dea.orderservice.withdip; + +public interface NotificationService { + void notifyCustomer(Cart cart); +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/OnlineOrder.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/OnlineOrder.java new file mode 100644 index 0000000..e522fcf --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/OnlineOrder.java @@ -0,0 +1,26 @@ +package nl.oose.dea.orderservice.withdip; + +public class OnlineOrder extends Order { + private final PaymentDetails paymentDetails; + private final PaymentProcessor paymentProcessor; + private final NotificationService notificationService; + private final ReservationService reservationService; + + public OnlineOrder(Cart cart, PaymentDetails paymentDetails, PaymentProcessor paymentProcessor, NotificationService notificationService, ReservationService reservationService) { + super(cart); + this.paymentDetails = paymentDetails; + this.paymentProcessor = paymentProcessor; + this.notificationService = notificationService; + this.reservationService = reservationService; + } + + @Override + public void checkout() { + if (paymentProcessor.chargeCard(paymentDetails, cart)) { + reservationService.reserveInventory(cart); + notificationService.notifyCustomer(cart); + } + super.checkout(); + } + +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/Order.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/Order.java new file mode 100644 index 0000000..fb17d99 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/Order.java @@ -0,0 +1,12 @@ +package nl.oose.dea.orderservice.withdip; + +public abstract class Order { + protected Cart cart; + + public Order(Cart cart) + { + this.cart = cart; + } + + public void checkout() {} +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/OrderException.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/OrderException.java new file mode 100644 index 0000000..e076758 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/OrderException.java @@ -0,0 +1,7 @@ +package nl.oose.dea.orderservice.withdip; + +public class OrderException extends RuntimeException { + public OrderException(String message, Exception originalException) { + super(message, originalException); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/OrderModule.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/OrderModule.java new file mode 100644 index 0000000..64ac57e --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/OrderModule.java @@ -0,0 +1,13 @@ +package nl.oose.dea.orderservice.withdip; + +import com.google.inject.AbstractModule; + +public class OrderModule extends AbstractModule { + @Override + protected void configure() { + bind(NotificationService.class).to(MailNotificationService.class); + bind(PaymentProcessor.class).to(LoggingPaymentProcessor.class); + bind(ReservationService.class).to(CafetariaReservationService.class); + bind(Cart.class).toProvider(CartFactory.class); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/OrderService.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/OrderService.java new file mode 100644 index 0000000..dbb237a --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/OrderService.java @@ -0,0 +1,12 @@ +package nl.oose.dea.orderservice.withdip; + +public class OrderService { + public static void main(String[] args) { + POSCreditOrder posCreditOrder = + new POSCreditOrder( + new CartFactory().get(), + new PaymentDetails(), + new LoggingPaymentProcessor()); + posCreditOrder.checkout(); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/OrderServiceGuiceBootstrap.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/OrderServiceGuiceBootstrap.java new file mode 100644 index 0000000..d3f8b1e --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/OrderServiceGuiceBootstrap.java @@ -0,0 +1,17 @@ +package nl.oose.dea.orderservice.withdip; + +import com.google.inject.Guice; + +public class OrderServiceGuiceBootstrap { + /** + * + * You can use Guice as a framework to build all the dependencies. Before you run the main-method, make sure every + * class you want to inject dependencies to has a constructor annotated with @Inject. + * + * @param args + */ + public static void main(String[] args) { + POSCreditOrder posCreditOrder = Guice.createInjector(new OrderModule()).getInstance(POSCreditOrder.class); + posCreditOrder.checkout(); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/POSCashOrder.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/POSCashOrder.java new file mode 100644 index 0000000..b1f08a6 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/POSCashOrder.java @@ -0,0 +1,7 @@ +package nl.oose.dea.orderservice.withdip; + +public class POSCashOrder extends Order { + public POSCashOrder(Cart cart) { + super(cart); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/POSCreditOrder.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/POSCreditOrder.java new file mode 100644 index 0000000..09500cb --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/POSCreditOrder.java @@ -0,0 +1,22 @@ +package nl.oose.dea.orderservice.withdip; + +import com.google.inject.Inject; + +public class POSCreditOrder extends Order { + private final PaymentDetails paymentDetails; + private final PaymentProcessor paymentProcessor; + + @Inject + public POSCreditOrder(Cart cart, PaymentDetails paymentDetails, PaymentProcessor paymentProcessor) { + super(cart); + this.paymentDetails = paymentDetails; + this.paymentProcessor = paymentProcessor; + } + + @Override + public void checkout() { + paymentProcessor.chargeCard(paymentDetails, cart); + super.checkout(); + } + +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/PaymentDetails.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/PaymentDetails.java new file mode 100644 index 0000000..abf4471 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/PaymentDetails.java @@ -0,0 +1,6 @@ +package nl.oose.dea.orderservice.withdip; + +public class PaymentDetails { + public PaymentMethod paymentMethod; + public int cardNumber; +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/PaymentDetailsFactory.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/PaymentDetailsFactory.java new file mode 100644 index 0000000..c36e0d2 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/PaymentDetailsFactory.java @@ -0,0 +1,10 @@ +package nl.oose.dea.orderservice.withdip; + +public class PaymentDetailsFactory { + public PaymentDetails create() { + PaymentDetails paymentDetails = new PaymentDetails(); + paymentDetails.paymentMethod = PaymentMethod.CreditCard; + paymentDetails.cardNumber = 1234; + return paymentDetails; + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/PaymentGateway.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/PaymentGateway.java new file mode 100644 index 0000000..41f8fb9 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/PaymentGateway.java @@ -0,0 +1,13 @@ +package nl.oose.dea.orderservice.withdip; + +import java.util.logging.Level; +import java.util.logging.Logger; + +public class PaymentGateway { + private Logger logger = Logger.getLogger(getClass().getName()); + + public boolean charge(int amount, String customerName, int cardNumber) { + logger.log(Level.INFO, "Charged " + customerName + " EUR " + amount + " on card: " + cardNumber); + return true; + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/PaymentMethod.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/PaymentMethod.java new file mode 100644 index 0000000..404d6a2 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/PaymentMethod.java @@ -0,0 +1,5 @@ +package nl.oose.dea.orderservice.withdip; + +public enum PaymentMethod { + CreditCard +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/PaymentProcessor.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/PaymentProcessor.java new file mode 100644 index 0000000..e725f0d --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/PaymentProcessor.java @@ -0,0 +1,5 @@ +package nl.oose.dea.orderservice.withdip; + +public interface PaymentProcessor { + boolean chargeCard(PaymentDetails paymentDetails, Cart cart); +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/ReservationService.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/ReservationService.java new file mode 100644 index 0000000..cd0c1aa --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withdip/ReservationService.java @@ -0,0 +1,7 @@ +package nl.oose.dea.orderservice.withdip; + +public interface ReservationService { + void reserveInventory(Cart cart); + + boolean isOnStock(String product, int amount); +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/CafetariaReservationService.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/CafetariaReservationService.java new file mode 100644 index 0000000..854f2d2 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/CafetariaReservationService.java @@ -0,0 +1,23 @@ +package nl.oose.dea.orderservice.withoutdip; + +public class CafetariaReservationService implements ReservationService { + private InventorySystem inventorySystem = new InventorySystem(); + + @Override + public void reserveInventory(Cart cart) { + for(Item item : cart.getItems()) + { + try { + inventorySystem.reserve(item.sku, item.quantity); + } catch(InsufficientInventoryException insufficientInventoryException) + { + throw new OrderException("Insufficient inventory for item " + item.sku, insufficientInventoryException); + } + } + } + + @Override + public boolean isOnStock(String product, int amount) { + return inventorySystem.isOnStock(product, amount); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/Cart.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/Cart.java new file mode 100644 index 0000000..0f122df --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/Cart.java @@ -0,0 +1,31 @@ +package nl.oose.dea.orderservice.withoutdip; + +public class Cart { + private Item[] items; + private String customerName; + private int amount; + private String customerEmail; + + public Cart(String customerName, String customerEmail, Item[] items, int amount){ + this.customerName = customerName; + this.customerEmail = customerEmail; + this.items = items; + this.amount = amount; + } + + public Item[] getItems() { + return items; + } + + public String getCustomerName() { + return customerName; + } + + public int getBillingTotal() { + return amount; + } + + public String getCustomerEmail() { + return customerEmail; + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/InsufficientInventoryException.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/InsufficientInventoryException.java new file mode 100644 index 0000000..4b7de96 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/InsufficientInventoryException.java @@ -0,0 +1,4 @@ +package nl.oose.dea.orderservice.withoutdip; + +public class InsufficientInventoryException extends Exception{ +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/InventorySystem.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/InventorySystem.java new file mode 100644 index 0000000..e8a74cb --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/InventorySystem.java @@ -0,0 +1,26 @@ +package nl.oose.dea.orderservice.withoutdip; + +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Logger; + +public class InventorySystem { + private Logger logger = Logger.getLogger(getClass().getName()); + + private Map inventory = new HashMap() {{ + put("Frikandel", 20); + put("Bamihap", 25); + put("Mexicano", 50); + }}; + + public void reserve(String sku, int quantity) throws InsufficientInventoryException { + if (isOnStock(sku, quantity)) + inventory.put(sku, inventory.get(sku) - quantity); + else throw new InsufficientInventoryException(); + logger.info("There is still " + inventory.get(sku) + " of " + sku + " left in inventory"); + } + + public boolean isOnStock(String sku, int quantity) { + return inventory.get(sku) >= quantity; + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/Item.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/Item.java new file mode 100644 index 0000000..f20da8f --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/Item.java @@ -0,0 +1,12 @@ +package nl.oose.dea.orderservice.withoutdip; + +public class Item { + public String sku; + public int quantity; + + public Item(String sku, int quantity) + { + this.sku = sku; + this.quantity = quantity; + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/LoggingPaymentProcessor.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/LoggingPaymentProcessor.java new file mode 100644 index 0000000..39aa87c --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/LoggingPaymentProcessor.java @@ -0,0 +1,10 @@ +package nl.oose.dea.orderservice.withoutdip; + +public class LoggingPaymentProcessor implements PaymentProcessor { + private PaymentGateway paymentGateway = new PaymentGateway(); + + @Override + public boolean chargeCard(PaymentDetails paymentDetails, Cart cart) { + return paymentGateway.charge(cart.getBillingTotal(), cart.getCustomerName(), paymentDetails.cardNumber); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/MailClient.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/MailClient.java new file mode 100644 index 0000000..085d70c --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/MailClient.java @@ -0,0 +1,43 @@ +package nl.oose.dea.orderservice.withoutdip; + +import javax.mail.*; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeMessage; +import java.util.Properties; + +public class MailClient { + // This MailClient actually works when you have a valid GMail user + private final static String USERNAME = ""; + private final static String PASSWORD = ""; + + public void send(String message, String customerEmail) throws MessagingException { + Transport.send(prepareMessage(message, customerEmail)); + } + + private Message prepareMessage(String messageBody, String customerEmail) throws MessagingException { + Message message = new MimeMessage(setGoogleSession(prepareSMTPProperties())); + message.setFrom(new InternetAddress(USERNAME)); + message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(customerEmail)); + message.setSubject(messageBody); + message.setText(messageBody); + return message; + } + + private Properties prepareSMTPProperties() { + Properties props = new Properties(); + props.put("mail.smtp.auth", "true"); + props.put("mail.smtp.starttls.enable", "true"); + props.put("mail.smtp.host", "smtp.gmail.com"); + props.put("mail.smtp.port", "587"); + return props; + } + + private Session setGoogleSession(Properties props) { + return Session.getInstance(props, + new Authenticator() { + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(USERNAME, PASSWORD); + } + }); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/MailNotificationService.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/MailNotificationService.java new file mode 100644 index 0000000..c4067a5 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/MailNotificationService.java @@ -0,0 +1,19 @@ +package nl.oose.dea.orderservice.withoutdip; + +import javax.mail.MessagingException; +import java.util.logging.Logger; + +public class MailNotificationService implements NotificationService { + private Logger logger = Logger.getLogger(getClass().getName()); + + @Override + public void notifyCustomer(Cart cart) { + MailClient mailClient = new MailClient(); + try { + mailClient.send("Your order is processed.", cart.getCustomerEmail()); + } catch (MessagingException e) { + logger.severe(e.getMessage()); + throw new OrderException("Cannot send mail to " + cart.getCustomerEmail(), e); + } + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/NotificationService.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/NotificationService.java new file mode 100644 index 0000000..b829041 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/NotificationService.java @@ -0,0 +1,5 @@ +package nl.oose.dea.orderservice.withoutdip; + +public interface NotificationService { + void notifyCustomer(Cart cart); +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/OnlineOrder.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/OnlineOrder.java new file mode 100644 index 0000000..1c5f527 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/OnlineOrder.java @@ -0,0 +1,22 @@ +package nl.oose.dea.orderservice.withoutdip; + +public class OnlineOrder extends Order { + private final PaymentDetails paymentDetails; + + private PaymentProcessor paymentProcessor = new LoggingPaymentProcessor(); + private NotificationService notificationService = new MailNotificationService(); + private ReservationService reservationService = new CafetariaReservationService(); + + public OnlineOrder(Cart cart, PaymentDetails paymentDetails) { + super(cart); + this.paymentDetails = paymentDetails; + } + + @Override + public void checkout() { + paymentProcessor.chargeCard(paymentDetails, cart); + reservationService.reserveInventory(cart); + notificationService.notifyCustomer(cart); + super.checkout(); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/Order.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/Order.java new file mode 100644 index 0000000..1d7bb9d --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/Order.java @@ -0,0 +1,12 @@ +package nl.oose.dea.orderservice.withoutdip; + +public abstract class Order { + protected Cart cart; + + public Order(Cart cart) + { + this.cart = cart; + } + + public void checkout() {} +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/OrderException.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/OrderException.java new file mode 100644 index 0000000..34f505f --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/OrderException.java @@ -0,0 +1,7 @@ +package nl.oose.dea.orderservice.withoutdip; + +public class OrderException extends RuntimeException { + public OrderException(String message, Exception originalException) { + super(message, originalException); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/POSCashOrder.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/POSCashOrder.java new file mode 100644 index 0000000..0b780db --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/POSCashOrder.java @@ -0,0 +1,7 @@ +package nl.oose.dea.orderservice.withoutdip; + +public class POSCashOrder extends Order { + public POSCashOrder(Cart cart) { + super(cart); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/POSCreditOrder.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/POSCreditOrder.java new file mode 100644 index 0000000..05dd452 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/POSCreditOrder.java @@ -0,0 +1,17 @@ +package nl.oose.dea.orderservice.withoutdip; + +public class POSCreditOrder extends Order { + private final PaymentDetails paymentDetails; + private PaymentProcessor paymentProcessor = new LoggingPaymentProcessor(); + + public POSCreditOrder(Cart cart, PaymentDetails paymentDetails) { + super(cart); + this.paymentDetails = paymentDetails; + } + + @Override + public void checkout() { + paymentProcessor.chargeCard(paymentDetails, cart); + super.checkout(); + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/PaymentDetails.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/PaymentDetails.java new file mode 100644 index 0000000..57f63d3 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/PaymentDetails.java @@ -0,0 +1,6 @@ +package nl.oose.dea.orderservice.withoutdip; + +public class PaymentDetails { + public PaymentMethod paymentMethod; + public int cardNumber; +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/PaymentGateway.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/PaymentGateway.java new file mode 100644 index 0000000..fbece51 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/PaymentGateway.java @@ -0,0 +1,13 @@ +package nl.oose.dea.orderservice.withoutdip; + +import java.util.logging.Level; +import java.util.logging.Logger; + +public class PaymentGateway { + private Logger logger = Logger.getLogger(getClass().getName()); + + public boolean charge(int amount, String customerName, int cardNumber) { + logger.log(Level.INFO, "Charged " + customerName + " EUR " + amount + " on card: " + cardNumber); + return true; + } +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/PaymentMethod.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/PaymentMethod.java new file mode 100644 index 0000000..a47b6f7 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/PaymentMethod.java @@ -0,0 +1,5 @@ +package nl.oose.dea.orderservice.withoutdip; + +public enum PaymentMethod { + CreditCard +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/PaymentProcessor.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/PaymentProcessor.java new file mode 100644 index 0000000..ff18cbb --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/PaymentProcessor.java @@ -0,0 +1,5 @@ +package nl.oose.dea.orderservice.withoutdip; + +public interface PaymentProcessor { + boolean chargeCard(PaymentDetails paymentDetails, Cart cart); +} diff --git a/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/ReservationService.java b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/ReservationService.java new file mode 100644 index 0000000..7122906 --- /dev/null +++ b/exercises/solid/5.DIP/src/main/java/nl/oose/dea/orderservice/withoutdip/ReservationService.java @@ -0,0 +1,7 @@ +package nl.oose.dea.orderservice.withoutdip; + +public interface ReservationService { + void reserveInventory(Cart cart); + + boolean isOnStock(String product, int amount); +} diff --git a/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/NotificationServiceTest.java b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/NotificationServiceTest.java new file mode 100644 index 0000000..2659823 --- /dev/null +++ b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/NotificationServiceTest.java @@ -0,0 +1,21 @@ +package nl.oose.dea.orderservice.withdip; + +import nl.oose.dea.orderservice.withoutdip.Cart; +import nl.oose.dea.orderservice.withoutdip.Item; +import nl.oose.dea.orderservice.withoutdip.MailNotificationService; +import nl.oose.dea.orderservice.withoutdip.NotificationService; +import nl.oose.dea.orderservice.withoutdip.OrderException; +import org.junit.Test; + +public class NotificationServiceTest { + + @Test(expected = OrderException.class) + public void youCannotSendAMailUsingGmailWithAnEmptyUsernameAndPass() throws Exception { + NotificationService notificationService = new MailNotificationService(); + notificationService.notifyCustomer(createCart()); + } + + private Cart createCart() { + return new Cart("Test", "oose@gmail.com", new Item[]{}, 0); + } +} \ No newline at end of file diff --git a/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/OnlineOrderTest.java b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/OnlineOrderTest.java new file mode 100644 index 0000000..0c5446b --- /dev/null +++ b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/OnlineOrderTest.java @@ -0,0 +1,56 @@ +package nl.oose.dea.orderservice.withdip; + +import org.junit.Test; +import org.mockito.InOrder; + +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.*; + +public class OnlineOrderTest { + private PaymentProcessor paymentProcessor = mock(PaymentProcessor.class); + private NotificationService notificationService = mock(NotificationService.class); + private ReservationService reservationService = mock(ReservationService.class); + + @Test + public void checkoutOnlineOrder() + { + // Create an order and pass all its dependencies. For unit tesing purposes we inject mock objects for the dependencies + Cart cart = createCart(); + PaymentDetails paymentDetails = createPaymentDetails(); + Order order = new OnlineOrder(cart, paymentDetails, setupPaymentProcessor(), setupNotificationService(), setupReservationService()); + order.checkout(); + + InOrder inOrder = inOrder(paymentProcessor, reservationService, notificationService); + inOrder.verify(paymentProcessor, times(1)).chargeCard(paymentDetails, cart); + inOrder.verify(reservationService, times(1)).reserveInventory(cart); + inOrder.verify(reservationService, never()).isOnStock(anyString(), anyInt()); + inOrder.verify(notificationService, times(1)).notifyCustomer(cart); + } + + private ReservationService setupReservationService() { + return reservationService; + } + + private NotificationService setupNotificationService() { + return notificationService; + } + + private PaymentProcessor setupPaymentProcessor() { + // always return true, enough for now + when(paymentProcessor.chargeCard(any(PaymentDetails.class), any(Cart.class))).thenReturn(true); + return paymentProcessor; + } + + + private Cart createCart() { + return new Cart("Test", "oose@gmail.com", new Item[]{ new Item("Frikandel", 20)}, 100); + } + + private PaymentDetails createPaymentDetails() + { + PaymentDetails paymentDetails = new PaymentDetails(); + paymentDetails.paymentMethod = PaymentMethod.CreditCard; + paymentDetails.cardNumber = 1234; + return paymentDetails; + } +} diff --git a/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/POSCashOrderTest.java b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/POSCashOrderTest.java new file mode 100644 index 0000000..daf3b19 --- /dev/null +++ b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/POSCashOrderTest.java @@ -0,0 +1,17 @@ +package nl.oose.dea.orderservice.withdip; + +import org.junit.Test; + +public class POSCashOrderTest { + @Test + public void checkoutOnlineOrder() + { + // Hah, still works, POSCashOrder has no other dependencies + Order order = new POSCashOrder(createCart()); + order.checkout(); + } + + private Cart createCart() { + return new Cart("Test", "oose@gmail.com", new Item[]{ new Item("Frikandel", 20)}, 100); + } +} diff --git a/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/POSCreditOrderTest.java b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/POSCreditOrderTest.java new file mode 100644 index 0000000..28cd68c --- /dev/null +++ b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/POSCreditOrderTest.java @@ -0,0 +1,39 @@ +package nl.oose.dea.orderservice.withdip; + +import org.junit.Test; + +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.*; + +public class POSCreditOrderTest { + + private PaymentProcessor paymentProcessor = mock(PaymentProcessor.class); + + @Test + public void checkoutOnlineOrder() + { + // Create an order and pass all its dependencies. For unit tesing purposes we inject mock objects for the dependencies + Order order = new POSCreditOrder(createCart(), createPaymentDetails(), setupPaymentProcessor()); + order.checkout(); + + verify(paymentProcessor, times(1)).chargeCard(any(PaymentDetails.class), any(Cart.class)); + } + + private PaymentProcessor setupPaymentProcessor() { + // always return true, enough for now + when(paymentProcessor.chargeCard(any(PaymentDetails.class), any(Cart.class))).thenReturn(true); + return paymentProcessor; + } + + private Cart createCart() { + return new Cart("Test", "oose@gmail.com", new Item[]{ new Item("Frikandel", 20)}, 100); + } + + private PaymentDetails createPaymentDetails() + { + PaymentDetails paymentDetails = new PaymentDetails(); + paymentDetails.paymentMethod = PaymentMethod.CreditCard; + paymentDetails.cardNumber = 1234; + return paymentDetails; + } +} diff --git a/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/PaymentProcessorTest.java b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/PaymentProcessorTest.java new file mode 100644 index 0000000..2df62db --- /dev/null +++ b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/PaymentProcessorTest.java @@ -0,0 +1,31 @@ +package nl.oose.dea.orderservice.withdip; + +import nl.oose.dea.orderservice.withoutdip.Cart; +import nl.oose.dea.orderservice.withoutdip.Item; +import nl.oose.dea.orderservice.withoutdip.LoggingPaymentProcessor; +import nl.oose.dea.orderservice.withoutdip.PaymentDetails; +import nl.oose.dea.orderservice.withoutdip.PaymentMethod; +import nl.oose.dea.orderservice.withoutdip.PaymentProcessor; +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +public class PaymentProcessorTest { + + @Test + public void testCharge() throws Exception { + PaymentProcessor paymentProcessor = new LoggingPaymentProcessor(); + assertTrue(paymentProcessor.chargeCard(createPaymentDetails(),createCart())); + } + + private Cart createCart() { + return new Cart("OOSE", "oose@gmail.com", new Item[]{}, 0); + } + + private PaymentDetails createPaymentDetails() { + PaymentDetails paymentDetails = new PaymentDetails(); + paymentDetails.cardNumber = 1234; + paymentDetails.paymentMethod = PaymentMethod.CreditCard; + return paymentDetails; + } +} \ No newline at end of file diff --git a/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/ReservationServiceTest.java b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/ReservationServiceTest.java new file mode 100644 index 0000000..d4c3619 --- /dev/null +++ b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withdip/ReservationServiceTest.java @@ -0,0 +1,40 @@ +package nl.oose.dea.orderservice.withdip; + +import nl.oose.dea.orderservice.withoutdip.CafetariaReservationService; +import nl.oose.dea.orderservice.withoutdip.Cart; +import nl.oose.dea.orderservice.withoutdip.Item; +import nl.oose.dea.orderservice.withoutdip.OrderException; +import nl.oose.dea.orderservice.withoutdip.ReservationService; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +public class ReservationServiceTest { + private ReservationService reservationService; + + @Before + public void setUp() + { + reservationService = new CafetariaReservationService(); + } + + @Test + public void buyAllFrikandellen() throws Exception { + reservationService.reserveInventory(createCartWithSufficientInventory()); + assertTrue(reservationService.isOnStock("Frikandel", 0)); + } + + private Cart createCartWithSufficientInventory() { + return new Cart("OOSE","oose@gmail.com", new Item[] { new Item("Frikandel", 20) }, 50); + } + + private Cart createCartWithInsufficientInventory() { + return new Cart("OOSE","oose@gmail.com", new Item[] { new Item("Frikandel", 21) }, 50); + } + + @Test(expected = OrderException.class) + public void youCannotBuyMoreThanAvailableInTheInventory() throws Exception { + reservationService.reserveInventory(createCartWithInsufficientInventory()); + } +} \ No newline at end of file diff --git a/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/NotificationServiceTest.java b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/NotificationServiceTest.java new file mode 100644 index 0000000..f0feff0 --- /dev/null +++ b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/NotificationServiceTest.java @@ -0,0 +1,16 @@ +package nl.oose.dea.orderservice.withoutdip; + +import org.junit.Test; + +public class NotificationServiceTest { + + @Test(expected = OrderException.class) + public void youCannotSendAMailUsingGmailWithAnEmptyUsernameAndPass() throws Exception { + NotificationService notificationService = new MailNotificationService(); + notificationService.notifyCustomer(createCart()); + } + + private Cart createCart() { + return new Cart("Test", "oose@gmail.com", new Item[]{}, 0); + } +} \ No newline at end of file diff --git a/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/OnlineOrderTest.java b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/OnlineOrderTest.java new file mode 100644 index 0000000..2172321 --- /dev/null +++ b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/OnlineOrderTest.java @@ -0,0 +1,24 @@ +package nl.oose.dea.orderservice.withoutdip; + +import org.junit.Test; + +public class OnlineOrderTest { + @Test(expected = OrderException.class) + public void checkoutOnlineOrder() + { + Order order = new OnlineOrder(createCart(), createPaymentDetails()); + order.checkout(); + } + + private Cart createCart() { + return new Cart("Test", "oose@gmail.com", new Item[]{ new Item("Frikandel", 20)}, 100); + } + + private PaymentDetails createPaymentDetails() + { + PaymentDetails paymentDetails = new PaymentDetails(); + paymentDetails.paymentMethod = PaymentMethod.CreditCard; + paymentDetails.cardNumber = 1234; + return paymentDetails; + } +} diff --git a/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/POSCashOrderTest.java b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/POSCashOrderTest.java new file mode 100644 index 0000000..7d930e9 --- /dev/null +++ b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/POSCashOrderTest.java @@ -0,0 +1,16 @@ +package nl.oose.dea.orderservice.withoutdip; + +import org.junit.Test; + +public class POSCashOrderTest { + @Test + public void checkoutOnlineOrder() + { + Order order = new POSCashOrder(createCart()); + order.checkout(); + } + + private Cart createCart() { + return new Cart("Test", "oose@gmail.com", new Item[]{ new Item("Frikandel", 20)}, 100); + } +} diff --git a/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/POSCreditOrderTest.java b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/POSCreditOrderTest.java new file mode 100644 index 0000000..cd487dd --- /dev/null +++ b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/POSCreditOrderTest.java @@ -0,0 +1,24 @@ +package nl.oose.dea.orderservice.withoutdip; + +import org.junit.Test; + +public class POSCreditOrderTest { + @Test + public void checkoutOnlineOrder() + { + Order order = new POSCreditOrder(createCart(), createPaymentDetails()); + order.checkout(); + } + + private Cart createCart() { + return new Cart("Test", "oose@gmail.com", new Item[]{ new Item("Frikandel", 20)}, 100); + } + + private PaymentDetails createPaymentDetails() + { + PaymentDetails paymentDetails = new PaymentDetails(); + paymentDetails.paymentMethod = PaymentMethod.CreditCard; + paymentDetails.cardNumber = 1234; + return paymentDetails; + } +} diff --git a/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/PaymentProcessorTest.java b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/PaymentProcessorTest.java new file mode 100644 index 0000000..e105eec --- /dev/null +++ b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/PaymentProcessorTest.java @@ -0,0 +1,25 @@ +package nl.oose.dea.orderservice.withoutdip; + +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +public class PaymentProcessorTest { + + @Test + public void testCharge() throws Exception { + PaymentProcessor paymentProcessor = new LoggingPaymentProcessor(); + assertTrue(paymentProcessor.chargeCard(createPaymentDetails(),createCart())); + } + + private Cart createCart() { + return new Cart("OOSE", "oose@gmail.com", new Item[]{}, 0); + } + + private PaymentDetails createPaymentDetails() { + PaymentDetails paymentDetails = new PaymentDetails(); + paymentDetails.cardNumber = 1234; + paymentDetails.paymentMethod = PaymentMethod.CreditCard; + return paymentDetails; + } +} \ No newline at end of file diff --git a/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/ReservationServiceTest.java b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/ReservationServiceTest.java new file mode 100644 index 0000000..eb39d2b --- /dev/null +++ b/exercises/solid/5.DIP/src/test/java/nl/oose/dea/orderservice/withoutdip/ReservationServiceTest.java @@ -0,0 +1,35 @@ +package nl.oose.dea.orderservice.withoutdip; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +public class ReservationServiceTest { + private ReservationService reservationService; + + @Before + public void setUp() + { + reservationService = new CafetariaReservationService(); + } + + @Test + public void buyAllFrikandellen() throws Exception { + reservationService.reserveInventory(createCartWithSufficientInventory()); + assertTrue(reservationService.isOnStock("Frikandel", 0)); + } + + private Cart createCartWithSufficientInventory() { + return new Cart("OOSE","oose@gmail.com", new Item[] { new Item("Frikandel", 20) }, 50); + } + + private Cart createCartWithInsufficientInventory() { + return new Cart("OOSE","oose@gmail.com", new Item[] { new Item("Frikandel", 21) }, 50); + } + + @Test(expected = OrderException.class) + public void youCannotBuyMoreThanAvailableInTheInventory() throws Exception { + reservationService.reserveInventory(createCartWithInsufficientInventory()); + } +} \ No newline at end of file diff --git a/exercises/sorter/README.md b/exercises/sorter/README.md new file mode 100644 index 0000000..b6d972d --- /dev/null +++ b/exercises/sorter/README.md @@ -0,0 +1,5 @@ +This example shows a bit more than the exercise requested: +* it splices lists into a flexible number of sublists +* it sorts Integers and Strings +* it uses Observer-Observable for notifications +* it shows how certain parts of the application can be unit-tested, especially helper classes \ No newline at end of file diff --git a/exercises/sorter/pom.xml b/exercises/sorter/pom.xml new file mode 100644 index 0000000..085318f --- /dev/null +++ b/exercises/sorter/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + nl.oose.dea + Sorter + 1.0-SNAPSHOT + + + + + org.pitest + pitest-maven + ${pitest.version} + + + nl.oose.dea.amdahl* + + + nl.oose.dea.amdahl* + + + + + + + + + junit + junit + 4.11 + + + org.mockito + mockito-all + 1.9.5 + + + org.pitest + pitest-maven + ${pitest.version} + + + + + 1.1.5 + + \ No newline at end of file diff --git a/exercises/sorter/src/main/java/nl/oose/dea/sorter/BoundaryCreator.java b/exercises/sorter/src/main/java/nl/oose/dea/sorter/BoundaryCreator.java new file mode 100644 index 0000000..b9b516a --- /dev/null +++ b/exercises/sorter/src/main/java/nl/oose/dea/sorter/BoundaryCreator.java @@ -0,0 +1,71 @@ +package nl.oose.dea.sorter; + +public class BoundaryCreator { + /** + * Determines the boundaries that makes that an element of the non-sorted + * list is put in one of the chunks + * + * For Integers the maximum value is determined and then divided by the + * number of remote sorters. + * + * For Strings the ASCII-value of a String is used. + * + * For every other class the toString() method is issued and then the former + * method (String) is used to sort the array of Objects. + * + * @param unsortedList + * @return + */ + public Comparable[] getBoundaries(Comparable[] unsortedList, int numberOfBoundaries) + { + Comparable[] bounds = new Comparable[numberOfBoundaries]; + Comparable maxValue = determineMaxValue(unsortedList); + int boundary = 0; + if (maxValue instanceof String) + { + boundary = (int) (((String) maxValue).charAt(0)) / numberOfBoundaries; + for (int i = 1; i <= bounds.length; i++) + { + char nextChar = (char) (boundary * i); + bounds[i - 1] = new String(new char[] + { nextChar }); + } + } + else if (maxValue instanceof Integer) + { + boundary = ((Integer) maxValue).intValue() / numberOfBoundaries; + for (int i = 1; i <= bounds.length; i++) + { + bounds[i - 1] = new Integer(boundary * i); + } + } + else + { + boundary = maxValue.hashCode() / numberOfBoundaries; + for (int i = 1; i <= bounds.length; i++) + { + bounds[i - 1] = new Integer(boundary * i); + } + } + + return bounds; + } + + /** + * The compareTo method can be used to determine the MAX value in a + * Comparable array in a generic way + * + * @param unsortedList + * @return + */ + private Comparable determineMaxValue(Comparable[] unsortedList) + { + Comparable max = unsortedList[0]; + for (int i = 0; i < unsortedList.length; i++) + { + if (unsortedList[i].compareTo(max) > 0) + max = unsortedList[i]; + } + return max; + } +} diff --git a/exercises/sorter/src/main/java/nl/oose/dea/sorter/ComparableCollectionPrinter.java b/exercises/sorter/src/main/java/nl/oose/dea/sorter/ComparableCollectionPrinter.java new file mode 100644 index 0000000..d0d463d --- /dev/null +++ b/exercises/sorter/src/main/java/nl/oose/dea/sorter/ComparableCollectionPrinter.java @@ -0,0 +1,33 @@ +package nl.oose.dea.sorter; + +public class ComparableCollectionPrinter { + /** + * Shows the contents of an array containing one or more Comparable[] + * instances. + * + * @param oArray + */ + public void print(Object[] oArray) + { + System.out.println("The list contains now the following values:"); + for (int i = 0; i < oArray.length; i++) + { + Comparable[] list = (Comparable[]) oArray[i]; + if (list != null) + printList(list); + } + } + + /** + * Print the elements of a Comparable array + * + * @param unsortedList + */ + private void printList(Comparable[] unsortedList) + { + for (int i = 0; i < unsortedList.length; i++) + { + System.out.println(unsortedList[i]); + } + } +} diff --git a/exercises/sorter/src/main/java/nl/oose/dea/sorter/ISorter.java b/exercises/sorter/src/main/java/nl/oose/dea/sorter/ISorter.java new file mode 100755 index 0000000..3d544ed --- /dev/null +++ b/exercises/sorter/src/main/java/nl/oose/dea/sorter/ISorter.java @@ -0,0 +1,12 @@ +package nl.oose.dea.sorter; + +import java.rmi.Remote; +import java.rmi.RemoteException; + +/** + * @author Rody + */ + +public interface ISorter extends Remote { + public Comparable[] sort(Comparable[] input) throws RemoteException; +} diff --git a/exercises/sorter/src/main/java/nl/oose/dea/sorter/SortClient.java b/exercises/sorter/src/main/java/nl/oose/dea/sorter/SortClient.java new file mode 100755 index 0000000..6da05a6 --- /dev/null +++ b/exercises/sorter/src/main/java/nl/oose/dea/sorter/SortClient.java @@ -0,0 +1,81 @@ +package nl.oose.dea.sorter; + +import java.rmi.RemoteException; +import java.rmi.registry.LocateRegistry; +import java.util.ArrayList; +import java.util.Observable; +import java.util.Observer; + +/** + * @author Rody + */ +public class SortClient implements Observer { + + public static final int NR_SORTERS = 5; + private Object[] results = new Object[NR_SORTERS]; + private int updateCount = 0; + + // Helper classes + private BoundaryCreator boundaryCreator = new BoundaryCreator(); + private Splicer splicer = new Splicer(); + private SortInputGenerator sortInputGenerator = new SortInputGenerator(); + private ComparableCollectionPrinter comparableCollectionPrinter = new ComparableCollectionPrinter(); + + + /** + * @param args + */ + public static void main(String[] args) { + SortClient sc = new SortClient(); + sc.generateAndSort("Integer"); + } + + + private void generateAndSort(String type) { + Comparable[] unsortedList = sortInputGenerator.generateCollection(type); + Comparable[] boundaries = boundaryCreator.getBoundaries(unsortedList, NR_SORTERS); + + sort(unsortedList, boundaries); + } + + /** + * Sorting means: - Create chunks to pre-sort the unsortedList into the + * chunks - Sort the chunks in separate Threads + * + * @param unsortedList + * @param boundaries + */ + private void sort(Comparable[] unsortedList, Comparable[] boundaries) { + ArrayList chunks = splicer.spliceIntoChunks(unsortedList, boundaries, NR_SORTERS); + + for (int i = 0; i < chunks.size(); i++) { + try { + Thread t = new Thread(new SorterThread(chunks.get(i), this, LocateRegistry.getRegistry())); + t.start(); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + } + + /** + * Implementation of Observer-Observable. + *

+ * The update is called when the SorterThread is ready doing the sorting. + * The threadNumber is used to keep the results in order. + * + * @see java.util.Observer#update(java.util.Observable, java.lang.Object) + */ + public void update(Observable o, Object arg) { + // TODO Auto-generated method stub + if (o instanceof SorterThread) { + SorterThread st = (SorterThread) o; + results[st.getThreadNumber() - 1] = arg; + updateCount++; + } + if (updateCount == NR_SORTERS) { + comparableCollectionPrinter.print(results); + } + } + +} \ No newline at end of file diff --git a/exercises/sorter/src/main/java/nl/oose/dea/sorter/SortInputGenerator.java b/exercises/sorter/src/main/java/nl/oose/dea/sorter/SortInputGenerator.java new file mode 100644 index 0000000..0aab321 --- /dev/null +++ b/exercises/sorter/src/main/java/nl/oose/dea/sorter/SortInputGenerator.java @@ -0,0 +1,48 @@ +package nl.oose.dea.sorter; + +import java.util.Random; + +public class SortInputGenerator { + public static final int MAX_ELEMENTS = 1000; + + private static final int MAX_WORD_LENGTH = 10; + + private Random r = new Random(); + + /** + * Generates a random collection of size MAX_ELEMENTS using' the nextRandom + * function. + * + * @param type + * @return a random collection of values with type is type + */ + public Comparable[] generateCollection(String type) { + Comparable[] collection = new Comparable[MAX_ELEMENTS]; + for (int i = 0; i < MAX_ELEMENTS; i++) { + collection[i] = nextRandom(type, MAX_ELEMENTS); + } + return collection; + } + + /** + * Using the Random class generate a random value of type 'type' + * + * @param type + * @param max + * @return the next random value of type 'type' + * @see java.util.Random + */ + private Comparable nextRandom(String type, int max) { + if (type.equals("Integer")) + return new Integer(r.nextInt(max)); + if (type.equals("String")) { + String newString = ""; + for (int i = 0; i < r.nextInt(MAX_WORD_LENGTH); i++) { + int next = 97 + r.nextInt(26); + newString += (char) (next); + } + return newString; + } + return null; + } +} diff --git a/exercises/sorter/src/main/java/nl/oose/dea/sorter/SortServer.java b/exercises/sorter/src/main/java/nl/oose/dea/sorter/SortServer.java new file mode 100755 index 0000000..d4a001b --- /dev/null +++ b/exercises/sorter/src/main/java/nl/oose/dea/sorter/SortServer.java @@ -0,0 +1,22 @@ +package nl.oose.dea.sorter; + +import java.rmi.AlreadyBoundException; +import java.rmi.RemoteException; +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; + + +/** + * @author Rody + */ +public class SortServer { + + public static void main(String[] args) throws RemoteException, AlreadyBoundException { + Registry registry = LocateRegistry.createRegistry(1099); + for(int i=0;i spliceIntoChunks(Comparable[] unsortedList, Comparable[] boundaries, int numberOfChunks) { + ArrayList chunks = createChunks(numberOfChunks); + for (int i = 0; i < unsortedList.length; i++) { + int boundIndex = 0; + while (boundIndex < (numberOfChunks - 1) && unsortedList[i].compareTo(boundaries[boundIndex]) >= 1) { + boundIndex++; + } + chunks.get(boundIndex).add(unsortedList[i]); + } + return chunks; + } + + /** + * Create as much chunks as there are remote sorters + * + * @param length + * @return + */ + private ArrayList createChunks(int length) { + ArrayList chunks = new ArrayList(); + for (int i = 0; i < length; i++) { + chunks.add(new ArrayList()); + } + return chunks; + } +} diff --git a/exercises/sorter/src/test/java/nl/oose/dea/sorter/BoundaryCreatorTest.java b/exercises/sorter/src/test/java/nl/oose/dea/sorter/BoundaryCreatorTest.java new file mode 100644 index 0000000..2807012 --- /dev/null +++ b/exercises/sorter/src/test/java/nl/oose/dea/sorter/BoundaryCreatorTest.java @@ -0,0 +1,66 @@ +package nl.oose.dea.sorter; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class BoundaryCreatorTest { + + private BoundaryCreator boundaryCreator; + + @Before + public void setup() + { + boundaryCreator = new BoundaryCreator(); + } + + @Test(expected = ArrayIndexOutOfBoundsException.class) + public void whenBoundariesAreCalculatedForAnEmptyListAnExceptionIsThrown() throws Exception { + boundaryCreator.getBoundaries(new Comparable[]{}, 0); + } + + @Test(expected = ArithmeticException.class) + public void whenBoundariesAreCalculatedForAnNonEmptyListAndZeroServersAvailableADivisionByZeroIsThrown() throws Exception { + boundaryCreator.getBoundaries(new Comparable[]{1}, 0); + } + + @Test + public void whenBoundariesAreCalculatedForAnNonEmptyListAndOneServerTheBoundaryEqualsTheInput() throws Exception { + Comparable[] list = {2}; + Comparable[] boundaries = boundaryCreator.getBoundaries(list, 1); + assertEquals(boundaries.length, 1); + assertEquals(boundaries[0], list[0]); + } + + @Test + public void whenBoundariesAreCalculatedForAnNonEmptyListAndMoreOneServer() throws Exception { + Comparable[] list = {0, 500, 1000}; + Comparable[] boundaries = boundaryCreator.getBoundaries(list, 2); + assertEquals(boundaries.length, 2); + assertEquals(boundaries[0], list[1]); + assertEquals(boundaries[1], list[2]); + } + + @Test + public void whenBoundariesAreCalculatedForAnNonEmptyStringListAndMoreOneServer() throws Exception { + Comparable[] list = {"a", "m", "z"}; + Comparable[] boundaries = boundaryCreator.getBoundaries(list, 2); + assertEquals(boundaries.length, 2); + assertEquals(boundaries[0], "="); + assertEquals(boundaries[1], "z"); + } + + @Test + public void whenBoundariesAreCalculatedForAnNonEmptyDoubleListAndMoreOneServer() throws Exception { + Comparable[] list = {0.0, 500.0, 1000.0}; + Comparable[] boundaries = boundaryCreator.getBoundaries(list, 2); + assertEquals(boundaries.length, 2); + assertEquals(boundaries[0], 541564928); + assertEquals(boundaries[1], 1083129856); + } + + + + +} \ No newline at end of file diff --git a/exercises/sorter/src/test/java/nl/oose/dea/sorter/SortInputGeneratorTest.java b/exercises/sorter/src/test/java/nl/oose/dea/sorter/SortInputGeneratorTest.java new file mode 100644 index 0000000..17c2c3c --- /dev/null +++ b/exercises/sorter/src/test/java/nl/oose/dea/sorter/SortInputGeneratorTest.java @@ -0,0 +1,32 @@ +package nl.oose.dea.sorter; + +import org.junit.Test; + +import static org.junit.Assert.*; + +public class SortInputGeneratorTest { + + @Test + public void whenTypeNotSupportedAllItemsInCollectionAreNull() throws Exception { + SortInputGenerator sortInputGenerator = new SortInputGenerator(); + Comparable[] collection = sortInputGenerator.generateCollection("none"); + assertNull(collection[0]); + } + + @Test + public void whenCollectionOfStringsRequestedTheSizeIs1000AndTypeIsString() throws Exception { + SortInputGenerator sortInputGenerator = new SortInputGenerator(); + Comparable[] collection = sortInputGenerator.generateCollection("String"); + assertTrue(collection[0] instanceof String); + assertEquals(SortInputGenerator.MAX_ELEMENTS, collection.length); + } + + @Test + public void whenCollectionOfIntegersRequestedTheSizeIs1000AndTypeIsInteger() throws Exception { + SortInputGenerator sortInputGenerator = new SortInputGenerator(); + Comparable[] collection = sortInputGenerator.generateCollection("Integer"); + assertTrue(collection[0] instanceof Integer); + assertEquals(SortInputGenerator.MAX_ELEMENTS, collection.length); + } + +} \ No newline at end of file diff --git a/exercises/sorter/src/test/java/nl/oose/dea/sorter/SorterThreadTest.java b/exercises/sorter/src/test/java/nl/oose/dea/sorter/SorterThreadTest.java new file mode 100644 index 0000000..11feb7e --- /dev/null +++ b/exercises/sorter/src/test/java/nl/oose/dea/sorter/SorterThreadTest.java @@ -0,0 +1,62 @@ +package nl.oose.dea.sorter; + +import org.junit.Before; +import org.junit.Test; + +import java.rmi.NotBoundException; +import java.rmi.RemoteException; +import java.rmi.registry.Registry; +import java.util.ArrayList; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class SorterThreadTest { + + private SorterThread sorterThread; + private SortClient sortClient; + + private ArrayList input = new ArrayList() {{ + for (int i = 0; i < 10; i++) { + add(i); + } + }}; + private Comparable[] output; + + @Before + public void setUp() throws Exception { + sortClient = mock(SortClient.class); + Registry registry = createMockRegistry(); + sorterThread = new SorterThread(input, sortClient, registry); + } + + private Registry createMockRegistry() throws RemoteException, NotBoundException { + Registry registry = mock(Registry.class); + ISorter sorter = createMockSorter(); + when(registry.lookup("rmi://localhost:1099/sorter1")).thenReturn(sorter); + return registry; + } + + private ISorter createMockSorter() throws RemoteException { + ISorter sorter = mock(ISorter.class); + Comparable[] results = new Comparable[input.size()]; + output = input.toArray(results); + when(sorter.sort(any(Comparable[].class))).thenReturn(output); + return sorter; + } + + @Test + public void testSend() + { + sorterThread.run(); + assertEquals(1, sorterThread.getThreadNumber()); + // Besides asserts we can verify that a method on a + // dependent object is called with the proper arguments + verify(sortClient).update(sorterThread, output); + } + + +} \ No newline at end of file diff --git a/exercises/sorter/src/test/java/nl/oose/dea/sorter/SplicerTest.java b/exercises/sorter/src/test/java/nl/oose/dea/sorter/SplicerTest.java new file mode 100644 index 0000000..4c0e29c --- /dev/null +++ b/exercises/sorter/src/test/java/nl/oose/dea/sorter/SplicerTest.java @@ -0,0 +1,50 @@ +package nl.oose.dea.sorter; + +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; + +import static org.junit.Assert.*; + +public class SplicerTest { + private Comparable[] unsortedList = { 10,8,6,4,2,0}; + private Splicer splicer; + + @Before + public void setup() + { + splicer = new Splicer(); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void whenBoundariesAreEmptyAndChunksAreZeroAnExceptionIsThrown() throws Exception { + ArrayList chunks = splicer.spliceIntoChunks(unsortedList, new Comparable[]{}, 0); + } + + @Test + public void whenBoundariesAreEmptyAndChunksAreOneEverythingIsReturnedInOneChunk() throws Exception { + ArrayList chunks = splicer.spliceIntoChunks(unsortedList, new Comparable[]{}, 1); + assertEquals(1, chunks.size()); + assertEquals(unsortedList.length, chunks.get(0).size()); + } + + @Test + public void whenOnlyOneBoundaryAvailableAndChunksAreOneAllIsReturnedInOneChunk() + { + ArrayList chunks = splicer.spliceIntoChunks(unsortedList, new Comparable[]{5}, 1); + assertEquals(1, chunks.size()); + assertEquals(unsortedList.length, chunks.get(0).size()); + } + + @Test + public void whenTwoBoundariesAvailableAndChunksAreTwoAllIsReturnedInTwoEqualSizedChunk() + { + ArrayList chunks = splicer.spliceIntoChunks(unsortedList, new Comparable[]{5}, 2); + assertEquals(2, chunks.size()); + assertEquals(unsortedList.length / 2, chunks.get(0).size()); + assertEquals(unsortedList.length / 2, chunks.get(1).size()); + + } + +} \ No newline at end of file diff --git a/exercises/terugteller/pom.xml b/exercises/terugteller/pom.xml new file mode 100644 index 0000000..a9d06c3 --- /dev/null +++ b/exercises/terugteller/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + + nl.oose.dea + TerugTeller + 1.0-SNAPSHOT + + + + junit + junit + 4.11 + + + \ No newline at end of file diff --git a/exercises/terugteller/src/main/java/nl/ica/oose/ICallback.java b/exercises/terugteller/src/main/java/nl/ica/oose/ICallback.java new file mode 100644 index 0000000..e8dda78 --- /dev/null +++ b/exercises/terugteller/src/main/java/nl/ica/oose/ICallback.java @@ -0,0 +1,8 @@ +package nl.ica.oose; + +import java.rmi.Remote; +import java.rmi.RemoteException; + +public interface ICallback extends Remote { + public void notifyChange(int value) throws RemoteException; +} diff --git a/exercises/terugteller/src/main/java/nl/ica/oose/ITerugTeller.java b/exercises/terugteller/src/main/java/nl/ica/oose/ITerugTeller.java new file mode 100644 index 0000000..4f92721 --- /dev/null +++ b/exercises/terugteller/src/main/java/nl/ica/oose/ITerugTeller.java @@ -0,0 +1,14 @@ +package nl.ica.oose; + +import java.rmi.Remote; +import java.rmi.RemoteException; + +public interface ITerugTeller extends Remote { + public void decrement() throws RemoteException; + + public int getValue() throws RemoteException; + + public void setValue(int value) throws RemoteException; + + public void addCallbackListener(ICallback iCallback) throws RemoteException; +} diff --git a/exercises/terugteller/src/main/java/nl/ica/oose/TerugTeller.java b/exercises/terugteller/src/main/java/nl/ica/oose/TerugTeller.java new file mode 100644 index 0000000..11d6f30 --- /dev/null +++ b/exercises/terugteller/src/main/java/nl/ica/oose/TerugTeller.java @@ -0,0 +1,38 @@ +package nl.ica.oose; + +import java.rmi.RemoteException; +import java.rmi.server.UnicastRemoteObject; +import java.util.ArrayList; +import java.util.List; + +public class TerugTeller extends UnicastRemoteObject implements ITerugTeller { + private int value; + private List callbacks = new ArrayList(); + + protected TerugTeller() throws RemoteException { + } + + public void decrement() throws RemoteException { + value -= 1; + if(value %25 ==0) + { + for(ICallback iCallback:callbacks) + { + iCallback.notifyChange(value); + } + } + } + + public int getValue() { + return value; + } + + public void setValue(int value) { + this.value = value; + } + + @Override + public void addCallbackListener(ICallback iCallback) throws RemoteException { + callbacks.add(iCallback); + } +} diff --git a/exercises/terugteller/src/main/java/nl/ica/oose/TerugTellerClient.java b/exercises/terugteller/src/main/java/nl/ica/oose/TerugTellerClient.java new file mode 100644 index 0000000..1a88e5c --- /dev/null +++ b/exercises/terugteller/src/main/java/nl/ica/oose/TerugTellerClient.java @@ -0,0 +1,33 @@ +package nl.ica.oose; + +import java.rmi.NotBoundException; +import java.rmi.RemoteException; +import java.rmi.registry.LocateRegistry; +import java.rmi.server.UnicastRemoteObject; + +public class TerugTellerClient extends UnicastRemoteObject implements ICallback{ + protected TerugTellerClient() throws RemoteException { + } + + public static void main(String[] args) throws RemoteException, NotBoundException { + TerugTellerClient terugTellerClient = new TerugTellerClient(); + terugTellerClient.start(); + } + + private void start() throws RemoteException, NotBoundException { + ITerugTeller teller = + (ITerugTeller) LocateRegistry.getRegistry().lookup("terugteller"); + teller.addCallbackListener(this); + teller.setValue(200); + for (int i = 0; i < 100; i++) { + teller.decrement(); + } + System.out.println(teller.getValue()); + + } + + @Override + public void notifyChange(int value) throws RemoteException { + System.out.println("De volgende waarde is een veelvoud van 25: " + value); + } +} diff --git a/exercises/terugteller/src/main/java/nl/ica/oose/TerugTellerServer.java b/exercises/terugteller/src/main/java/nl/ica/oose/TerugTellerServer.java new file mode 100644 index 0000000..53a1eac --- /dev/null +++ b/exercises/terugteller/src/main/java/nl/ica/oose/TerugTellerServer.java @@ -0,0 +1,23 @@ +package nl.ica.oose; + +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; + +public class TerugTellerServer { + public static void main(String[] args) { + TerugTellerServer terugTellerServer = new TerugTellerServer(); + terugTellerServer.start(); + } + + private void start() { + ITerugTeller teller; + try { + teller = new TerugTeller(); + Registry r = LocateRegistry.createRegistry(1099); + r.bind("terugteller", teller); + } catch (Exception e) { + e.printStackTrace(); + } + + } +} diff --git a/exercises/terugteller/src/test/java/nl/ica/oose/TerugTellerTest.java b/exercises/terugteller/src/test/java/nl/ica/oose/TerugTellerTest.java new file mode 100644 index 0000000..b1588f5 --- /dev/null +++ b/exercises/terugteller/src/test/java/nl/ica/oose/TerugTellerTest.java @@ -0,0 +1,26 @@ +package nl.ica.oose; + +import org.junit.Test; + +import java.rmi.RemoteException; + +import static org.junit.Assert.*; + +public class TerugTellerTest implements ICallback { + + @Test + public void testDecrement() throws Exception { + TerugTeller terugTeller = new TerugTeller(); + terugTeller.addCallbackListener(this); + terugTeller.setValue(200); + for (int i = 0; i < 100; i++) { + terugTeller.decrement(); + } + assertEquals(100, terugTeller.getValue()); + } + + @Override + public void notifyChange(int value) throws RemoteException { + assertTrue(value % 25 == 0); + } +} \ No newline at end of file diff --git a/exercises/videostore/pom.xml b/exercises/videostore/pom.xml new file mode 100644 index 0000000..c87d572 --- /dev/null +++ b/exercises/videostore/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + + nl.oose.dea + Videostore + 1.0-SNAPSHOT + + + + junit + junit + 4.12 + + + diff --git a/exercises/videostore/src/main/java/Customer.java b/exercises/videostore/src/main/java/Customer.java deleted file mode 100755 index e0a489f..0000000 --- a/exercises/videostore/src/main/java/Customer.java +++ /dev/null @@ -1,45 +0,0 @@ -import java.util.*; - -public class Customer { - private String _name; - private Vector _rentals =new Vector(); - - public Customer(String name) { - _name = name; - } - public void addRental(Rental arg) { - _rentals.addElement(arg); - } - public String getName() { - return _name; - } - public String statement() { - double totalAmount = 0; - int frequentRenterPoints = 0; - Enumeration rentals = _rentals.elements(); - String result = "Rental Record for " + getName() + "\n"; - while (rentals.hasMoreElements()) { - Rental each = (Rental) rentals.nextElement(); - // add frequent renter points - frequentRenterPoints ++; - // add bonus for a two day new release rental - if ((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) && - each.getDaysRented() > 1) frequentRenterPoints++; - //show figures for this rental - result += "\t" + each.getMovie().getTitle()+ "\t" + - String.valueOf(each.getCharge()) + "\n"; - totalAmount += each.getCharge(); - } - // add footer lines - result += "Amount owed is "+String.valueOf(totalAmount) + "\n"; - result += "You earned "+String.valueOf(frequentRenterPoints) - + " frequent renter points\n"; - return result; - } - public static void main(String[] args) { - Customer cust = new Customer("Jan Janssen"); - cust.addRental(new Rental (new Movie("SpongeBob", Movie.NEW_RELEASE), 2)); - cust.addRental(new Rental (new Movie("Ice Age 3", Movie.CHILDRENS), 3)); - System.out.println(cust.statement()); - } -} diff --git a/exercises/videostore/src/main/java/Movie.java b/exercises/videostore/src/main/java/Movie.java deleted file mode 100755 index 15aef94..0000000 --- a/exercises/videostore/src/main/java/Movie.java +++ /dev/null @@ -1,22 +0,0 @@ -public class Movie { - public static final int CHILDRENS=2; - public static final int REGULAR=0; - public static final int NEW_RELEASE=1; - - private String _title; - private int _priceCode; - - public Movie(String title, int priceCode) { - _title=title; - _priceCode = priceCode; - } - public int getPriceCode() { - return _priceCode; - } - public void setPriceCode(int arg) { - _priceCode = arg; - } - public String getTitle() { - return _title; - } -} diff --git a/exercises/videostore/src/main/java/Rental.java b/exercises/videostore/src/main/java/Rental.java deleted file mode 100755 index babbb7c..0000000 --- a/exercises/videostore/src/main/java/Rental.java +++ /dev/null @@ -1,35 +0,0 @@ -public class Rental { - private Movie _movie; - private int _daysRented; - - public Rental(Movie movie, int daysRented) { - _movie = movie; - _daysRented = daysRented ; - } - public int getDaysRented() { - return _daysRented ; - } - public Movie getMovie() { - return _movie; - } - public double getCharge() { - double result = 0; - switch (getMovie().getPriceCode()) { - case Movie.REGULAR: - result += 2; - if (getDaysRented() > 2) - result +=(getDaysRented()-2) * 1.5; - break; - case Movie.NEW_RELEASE: - result += getDaysRented() * 3; - break; - case Movie.CHILDRENS: - result += 1.5; - if (getDaysRented() > 3) - result +=(getDaysRented()-3) * 1.5; - break; - } - return result ; - } -} - diff --git a/exercises/videostore/src/main/java/nl/oose/dea/videostore/ChildrensMovie.java b/exercises/videostore/src/main/java/nl/oose/dea/videostore/ChildrensMovie.java new file mode 100644 index 0000000..ef82896 --- /dev/null +++ b/exercises/videostore/src/main/java/nl/oose/dea/videostore/ChildrensMovie.java @@ -0,0 +1,19 @@ +package nl.oose.dea.videostore; + +public class ChildrensMovie extends Movie { + public ChildrensMovie(String title) { + super(title); + } + + public double determineAmount(int daysRented) { + double thisAmount = 1.5; + if (daysRented > 3) + thisAmount += (daysRented - 3) * 1.5; + + return thisAmount; + } + + public int determineFrequentRenterPoints(int daysRented) { + return 1; + } +} diff --git a/exercises/videostore/src/main/java/nl/oose/dea/videostore/Movie.java b/exercises/videostore/src/main/java/nl/oose/dea/videostore/Movie.java new file mode 100755 index 0000000..a88d705 --- /dev/null +++ b/exercises/videostore/src/main/java/nl/oose/dea/videostore/Movie.java @@ -0,0 +1,18 @@ +package nl.oose.dea.videostore; + +public abstract class Movie +{ + private String title; + + public Movie(String title) { + this.title = title; + } + + public String getTitle () { + return title; + } + + public abstract double determineAmount(int daysRented); + + public abstract int determineFrequentRenterPoints(int daysRented); +} \ No newline at end of file diff --git a/exercises/videostore/src/main/java/nl/oose/dea/videostore/NewReleaseMovie.java b/exercises/videostore/src/main/java/nl/oose/dea/videostore/NewReleaseMovie.java new file mode 100644 index 0000000..6000637 --- /dev/null +++ b/exercises/videostore/src/main/java/nl/oose/dea/videostore/NewReleaseMovie.java @@ -0,0 +1,15 @@ +package nl.oose.dea.videostore; + +public class NewReleaseMovie extends Movie { + public NewReleaseMovie(String title) { + super(title); + } + + public double determineAmount(int daysRented) { + return daysRented * 3.0; + } + + public int determineFrequentRenterPoints(int daysRented) { + return (daysRented > 1) ? 2 : 1; + } +} diff --git a/exercises/videostore/src/main/java/nl/oose/dea/videostore/RegularMovie.java b/exercises/videostore/src/main/java/nl/oose/dea/videostore/RegularMovie.java new file mode 100644 index 0000000..6a17ccd --- /dev/null +++ b/exercises/videostore/src/main/java/nl/oose/dea/videostore/RegularMovie.java @@ -0,0 +1,19 @@ +package nl.oose.dea.videostore; + +public class RegularMovie extends Movie { + public RegularMovie(String title) { + super(title); + } + + public double determineAmount(int daysRented) { + double thisAmount = 2; + if (daysRented > 2) + thisAmount += (daysRented - 2) * 1.5; + + return thisAmount; + } + + public int determineFrequentRenterPoints(int daysRented) { + return 1; + } +} diff --git a/exercises/videostore/src/main/java/nl/oose/dea/videostore/Rental.java b/exercises/videostore/src/main/java/nl/oose/dea/videostore/Rental.java new file mode 100755 index 0000000..de88b90 --- /dev/null +++ b/exercises/videostore/src/main/java/nl/oose/dea/videostore/Rental.java @@ -0,0 +1,24 @@ +package nl.oose.dea.videostore; + +public class Rental +{ + private Movie movie; + private int daysRented; + + public Rental (Movie movie, int daysRented) { + this.movie = movie; + this.daysRented = daysRented; + } + + public String getTitle() { + return movie.getTitle(); + } + + public double determineAmount() { + return movie.determineAmount(daysRented); + } + + public int determineFrequentRenterPoints() { + return movie.determineFrequentRenterPoints(daysRented); + } +} \ No newline at end of file diff --git a/exercises/videostore/src/main/java/nl/oose/dea/videostore/RentalStatement.java b/exercises/videostore/src/main/java/nl/oose/dea/videostore/RentalStatement.java new file mode 100755 index 0000000..ca89da8 --- /dev/null +++ b/exercises/videostore/src/main/java/nl/oose/dea/videostore/RentalStatement.java @@ -0,0 +1,72 @@ +package nl.oose.dea.videostore; + +import java.util.ArrayList; +import java.util.List; + +public class RentalStatement { + private String name; + private List rentals = new ArrayList(); + private double totalAmount; + private int frequentRenterPoints; + + public RentalStatement(String customerName) { + this.name = customerName; + } + + public void addRental(Rental rental) { + rentals.add(rental); + } + + public String makeRentalStatement() { + clearTotals(); + return makeHeader() + makeRentalLines() + makeSummary(); + } + + private void clearTotals() { + totalAmount = 0; + frequentRenterPoints = 0; + } + + private String makeHeader() { + return "nl.oose.dea.videostore.Rental Record for " + getName() + "\n"; + } + + private String makeRentalLines() { + String rentalLines = ""; + + for (Rental rental : rentals) + rentalLines += makeRentalLine(rental); + + return rentalLines; + } + + private String makeRentalLine(Rental rental) { + double thisAmount = rental.determineAmount(); + frequentRenterPoints += rental.determineFrequentRenterPoints(); + totalAmount += thisAmount; + + return formatRentalLine(rental, thisAmount); + } + + private String formatRentalLine(Rental rental, double thisAmount) { + return "\t" + rental.getTitle() + "\t" + thisAmount + "\n"; + } + + private String makeSummary() { + return "You owed " + totalAmount + "\n" + + "You earned " + frequentRenterPoints + + " frequent renter points\n"; + } + + public String getName() { + return name; + } + + public double getAmountOwed() { + return totalAmount; + } + + public int getFrequentRenterPoints() { + return frequentRenterPoints; + } +} \ No newline at end of file diff --git a/exercises/videostore/src/test/java/nl/oose/dea/videostore/VideoStoreTest.java b/exercises/videostore/src/test/java/nl/oose/dea/videostore/VideoStoreTest.java new file mode 100755 index 0000000..d90f72b --- /dev/null +++ b/exercises/videostore/src/test/java/nl/oose/dea/videostore/VideoStoreTest.java @@ -0,0 +1,81 @@ +package nl.oose.dea.videostore; + +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class VideoStoreTest { + private static final double DELTA = 0.01; + private RentalStatement statement; + private Movie newRelease1; + private Movie newRelease2; + private Movie childrens; + private Movie regular1; + private Movie regular2; + private Movie regular3; + + + @Before + public void setUp() { + statement = new RentalStatement("nl.oose.dea.videostore.Customer Name"); + newRelease1 = new NewReleaseMovie("New Release 1"); + newRelease2 = new NewReleaseMovie("New Release 2"); + childrens = new ChildrensMovie("Childrens"); + regular1 = new RegularMovie("Regular 1"); + regular2 = new RegularMovie("Regular 2"); + regular3 = new RegularMovie("Regular 3"); + } + + private void assertAmountAndPointsForReport(double expectedAmount, int expectedPoints) { + assertEquals(expectedAmount, statement.getAmountOwed(), DELTA); + assertEquals(expectedPoints, statement.getFrequentRenterPoints()); + } + + @Test + public void testSingleNewReleaseStatement() { + statement.addRental(new Rental(newRelease1, 3)); + statement.makeRentalStatement(); + assertAmountAndPointsForReport(9.0, 2); + } + + @Test + public void testDualNewReleaseStatement() { + statement.addRental(new Rental(newRelease1, 3)); + statement.addRental(new Rental(newRelease2, 3)); + statement.makeRentalStatement(); + assertAmountAndPointsForReport(18.0, 4); + } + + @Test + public void testSingleChildrensStatement() { + statement.addRental(new Rental(childrens, 3)); + statement.makeRentalStatement(); + assertAmountAndPointsForReport(1.5, 1); + } + + @Test + public void testMultipleRegularStatement() { + statement.addRental(new Rental(regular1, 1)); + statement.addRental(new Rental(regular2, 2)); + statement.addRental(new Rental(regular3, 3)); + statement.makeRentalStatement(); + assertAmountAndPointsForReport(7.5, 3); + } + + @Test + public void testRentalStatementFormat() { + statement.addRental(new Rental(regular1, 1)); + statement.addRental(new Rental(regular2, 2)); + statement.addRental(new Rental(regular3, 3)); + + assertEquals( + "nl.oose.dea.videostore.Rental Record for nl.oose.dea.videostore.Customer Name\n" + + "\tRegular 1\t2.0\n" + + "\tRegular 2\t2.0\n" + + "\tRegular 3\t3.5\n" + + "You owed 7.5\n" + + "You earned 3 frequent renter points\n", + statement.makeRentalStatement()); + } +} \ No newline at end of file diff --git a/spring/SimpleSpringWithConfiguration/target/test-classes/nl/ica/ddoa/ddoa/springexample/MoppenVertellerTest.class b/spring/SimpleSpringWithConfiguration/target/test-classes/nl/ica/ddoa/ddoa/springexample/MoppenVertellerTest.class deleted file mode 100644 index 2289d10..0000000 Binary files a/spring/SimpleSpringWithConfiguration/target/test-classes/nl/ica/ddoa/ddoa/springexample/MoppenVertellerTest.class and /dev/null differ