From 10bbf988ead88e92ab00223631313ffa58337c53 Mon Sep 17 00:00:00 2001 From: Kamil Pietruszka Date: Sun, 17 Jan 2016 13:45:33 +0100 Subject: [PATCH 001/123] issue #333 factory kit pattern introduced --- factory-kit/index.md | 31 +++++ factory-kit/pom.xml | 21 ++++ .../java/com/iluwatar/factorykit/App.java | 15 +++ .../java/com/iluwatar/factorykit/Axe.java | 7 ++ .../java/com/iluwatar/factorykit/Bow.java | 7 ++ .../java/com/iluwatar/factorykit/Builder.java | 7 ++ .../java/com/iluwatar/factorykit/Spear.java | 7 ++ .../java/com/iluwatar/factorykit/Sword.java | 7 ++ .../java/com/iluwatar/factorykit/Weapon.java | 4 + .../iluwatar/factorykit/WeaponFactory.java | 16 +++ .../com/iluwatar/factorykit/WeaponType.java | 8 ++ .../com/iluwatar/factorykit/app/AppTest.java | 13 +++ .../factorykit/factorykit/FactoryKitTest.java | 58 +++++++++ .../factory/method/FactoryMethodTest.java | 110 +++++++++--------- pom.xml | 1 + 15 files changed, 255 insertions(+), 57 deletions(-) create mode 100644 factory-kit/index.md create mode 100644 factory-kit/pom.xml create mode 100644 factory-kit/src/main/java/com/iluwatar/factorykit/App.java create mode 100644 factory-kit/src/main/java/com/iluwatar/factorykit/Axe.java create mode 100644 factory-kit/src/main/java/com/iluwatar/factorykit/Bow.java create mode 100644 factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java create mode 100644 factory-kit/src/main/java/com/iluwatar/factorykit/Spear.java create mode 100644 factory-kit/src/main/java/com/iluwatar/factorykit/Sword.java create mode 100644 factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java create mode 100644 factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java create mode 100644 factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java create mode 100644 factory-kit/src/test/java/com/iluwatar/factorykit/app/AppTest.java create mode 100644 factory-kit/src/test/java/com/iluwatar/factorykit/factorykit/FactoryKitTest.java diff --git a/factory-kit/index.md b/factory-kit/index.md new file mode 100644 index 000000000..63809ecc3 --- /dev/null +++ b/factory-kit/index.md @@ -0,0 +1,31 @@ +--- +layout: pattern +title: Factory Kit +folder: factory-kit +permalink: /patterns/factory-kit/ +categories: Creational +tags: + - Java + - Difficulty-Beginner + - Functional +--- + +## Also known as +Virtual Constructor + +## Intent +Define factory of immutable content with separated builder and factory interfaces. + +![alt text](./etc/factory-kit_1.png "Factory Kit") + +## Applicability +Use the Factory Kit pattern when + +* a class can't anticipate the class of objects it must create +* you just want a new instance of custom builder instead of global one +* a class wants its subclasses to specify the objects it creates +* classes delegate responsibility to one of several helper subclasses, and you want to localize the knowledge of which helper subclass is the delegate + +## Credits + +* [Design Pattern Reloaded by Remi Forax: ](https://www.youtube.com/watch?v=-k2X7guaArU) diff --git a/factory-kit/pom.xml b/factory-kit/pom.xml new file mode 100644 index 000000000..451d74b1b --- /dev/null +++ b/factory-kit/pom.xml @@ -0,0 +1,21 @@ + + + + java-design-patterns + com.iluwatar + 1.10.0-SNAPSHOT + + 4.0.0 + + + junit + junit + test + + + factory-kit + + + \ No newline at end of file diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/App.java b/factory-kit/src/main/java/com/iluwatar/factorykit/App.java new file mode 100644 index 000000000..572b24630 --- /dev/null +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/App.java @@ -0,0 +1,15 @@ +package com.iluwatar.factorykit; + +public class App { + + public static void main(String[] args) { + WeaponFactory factory = WeaponFactory.factory(builder -> { + builder.add(WeaponType.SWORD, Sword::new); + builder.add(WeaponType.AXE, Axe::new); + builder.add(WeaponType.SPEAR, Spear::new); + builder.add(WeaponType.BOW, Bow::new); + }); + Weapon axe = factory.create(WeaponType.AXE); + System.out.println(axe); + } +} diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Axe.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Axe.java new file mode 100644 index 000000000..8a3ca587b --- /dev/null +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Axe.java @@ -0,0 +1,7 @@ +package com.iluwatar.factorykit; + +public class Axe implements Weapon { + @Override public String toString() { + return "Axe{}"; + } +} diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Bow.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Bow.java new file mode 100644 index 000000000..aac272513 --- /dev/null +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Bow.java @@ -0,0 +1,7 @@ +package com.iluwatar.factorykit; + +/** + * Created by crossy on 2016-01-16. + */ +public class Bow implements Weapon { +} diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java new file mode 100644 index 000000000..e20795a1f --- /dev/null +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java @@ -0,0 +1,7 @@ +package com.iluwatar.factorykit; + +import java.util.function.Supplier; + +public interface Builder { + void add(WeaponType name, Supplier supplier); +} diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Spear.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Spear.java new file mode 100644 index 000000000..9bbb41915 --- /dev/null +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Spear.java @@ -0,0 +1,7 @@ +package com.iluwatar.factorykit; + +public class Spear implements Weapon { + @Override public String toString() { + return "Spear{}"; + } +} diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Sword.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Sword.java new file mode 100644 index 000000000..f6e5c5a3e --- /dev/null +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Sword.java @@ -0,0 +1,7 @@ +package com.iluwatar.factorykit; + +public class Sword implements Weapon { + @Override public String toString() { + return "Sword{}"; + } +} diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java new file mode 100644 index 000000000..039628f3d --- /dev/null +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java @@ -0,0 +1,4 @@ +package com.iluwatar.factorykit; + +public interface Weapon { +} diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java new file mode 100644 index 000000000..e77e2023b --- /dev/null +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java @@ -0,0 +1,16 @@ +package com.iluwatar.factorykit; + +import java.util.HashMap; +import java.util.function.Consumer; +import java.util.function.Supplier; + +public interface WeaponFactory { + + Weapon create(WeaponType name); + + static WeaponFactory factory(Consumer consumer) { + HashMap> map = new HashMap<>(); + consumer.accept(map::put); + return name -> map.get(name).get(); + } +} diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java new file mode 100644 index 000000000..1db668b0e --- /dev/null +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java @@ -0,0 +1,8 @@ +package com.iluwatar.factorykit; + +/** + * Created by crossy on 2016-01-16. + */ +public enum WeaponType { + SWORD, AXE, BOW, SPEAR +} diff --git a/factory-kit/src/test/java/com/iluwatar/factorykit/app/AppTest.java b/factory-kit/src/test/java/com/iluwatar/factorykit/app/AppTest.java new file mode 100644 index 000000000..9dbb8444e --- /dev/null +++ b/factory-kit/src/test/java/com/iluwatar/factorykit/app/AppTest.java @@ -0,0 +1,13 @@ +package com.iluwatar.factorykit.app; + +import com.iluwatar.factorykit.App; +import org.junit.Test; + +public class AppTest { + + @Test public void test() { + String[] args = {}; + App.main(args); + } +} + diff --git a/factory-kit/src/test/java/com/iluwatar/factorykit/factorykit/FactoryKitTest.java b/factory-kit/src/test/java/com/iluwatar/factorykit/factorykit/FactoryKitTest.java new file mode 100644 index 000000000..088b54ba9 --- /dev/null +++ b/factory-kit/src/test/java/com/iluwatar/factorykit/factorykit/FactoryKitTest.java @@ -0,0 +1,58 @@ +package com.iluwatar.factorykit.factorykit; + +import com.iluwatar.factorykit.*; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +/** + * Created by crossy on 2016-01-16. + */ +public class FactoryKitTest { + + private WeaponFactory factory; + + @Before public void init() { + factory = WeaponFactory.factory(builder -> { + builder.add(WeaponType.SPEAR, Spear::new); + builder.add(WeaponType.AXE, Axe::new); + builder.add(WeaponType.SWORD, Sword::new); + }); + } + + /** + * Testing {@link WeaponFactory} to produce a SPEAR asserting that the Weapon is an instance of {@link Spear} + */ + @Test public void testSpearWeapon() { + Weapon weapon = factory.create(WeaponType.SPEAR); + verifyWeapon(weapon, Spear.class); + } + + /** + * Testing {@link WeaponFactory} to produce a AXE asserting that the Weapon is an instance of {@link Axe} + */ + @Test public void testAxeWeapon() { + Weapon weapon = factory.create(WeaponType.AXE); + verifyWeapon(weapon, Axe.class); + } + + + /** + * Testing {@link WeaponFactory} to produce a SWORD asserting that the Weapon is an instance of {@link Sword} + */ + @Test public void testWeapon() { + Weapon weapon = factory.create(WeaponType.SWORD); + verifyWeapon(weapon, Sword.class); + } + + /** + * This method asserts that the weapon object that is passed is an instance of the clazz + * + * @param weapon weapon object which is to be verified + * @param clazz expected class of the weapon + */ + private void verifyWeapon(Weapon weapon, Class clazz) { + assertTrue("Weapon must be an object of: " + clazz.getName(), clazz.isInstance(weapon)); + } +} diff --git a/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java index a6786a717..6a9b03d2e 100644 --- a/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java +++ b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java @@ -1,79 +1,75 @@ package com.iluwatar.factory.method; +import org.junit.Test; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import org.junit.Test; - /** * The Factory Method is a creational design pattern which uses factory methods to deal with the * problem of creating objects without specifying the exact class of object that will be created. * This is done by creating objects via calling a factory method either specified in an interface * and implemented by child classes, or implemented in a base class and optionally overridden by * derived classes—rather than by calling a constructor. - * - *

Factory produces the object of its liking. + *

+ *

Factory produces the object of its liking. * The weapon {@link Weapon} manufactured by the * blacksmith depends on the kind of factory implementation it is referring to. *

*/ public class FactoryMethodTest { - /** - * Testing {@link OrcBlacksmith} to produce a SPEAR asserting that the Weapon is an instance - * of {@link OrcWeapon}. - */ - @Test - public void testOrcBlacksmithWithSpear() { - Blacksmith blacksmith = new OrcBlacksmith(); - Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR); - verifyWeapon(weapon, WeaponType.SPEAR, OrcWeapon.class); - } + /** + * Testing {@link OrcBlacksmith} to produce a SPEAR asserting that the Weapon is an instance + * of {@link OrcWeapon}. + */ + @Test public void testOrcBlacksmithWithSpear() { + Blacksmith blacksmith = new OrcBlacksmith(); + Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR); + verifyWeapon(weapon, WeaponType.SPEAR, OrcWeapon.class); + } - /** - * Testing {@link OrcBlacksmith} to produce a AXE asserting that the Weapon is an instance - * of {@link OrcWeapon}. - */ - @Test - public void testOrcBlacksmithWithAxe() { - Blacksmith blacksmith = new OrcBlacksmith(); - Weapon weapon = blacksmith.manufactureWeapon(WeaponType.AXE); - verifyWeapon(weapon, WeaponType.AXE, OrcWeapon.class); - } + /** + * Testing {@link OrcBlacksmith} to produce a AXE asserting that the Weapon is an instance + * of {@link OrcWeapon}. + */ + @Test public void testOrcBlacksmithWithAxe() { + Blacksmith blacksmith = new OrcBlacksmith(); + Weapon weapon = blacksmith.manufactureWeapon(WeaponType.AXE); + verifyWeapon(weapon, WeaponType.AXE, OrcWeapon.class); + } - /** - * Testing {@link ElfBlacksmith} to produce a SHORT_SWORD asserting that the Weapon is an - * instance of {@link ElfWeapon}. - */ - @Test - public void testElfBlacksmithWithShortSword() { - Blacksmith blacksmith = new ElfBlacksmith(); - Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SHORT_SWORD); - verifyWeapon(weapon, WeaponType.SHORT_SWORD, ElfWeapon.class); - } + /** + * Testing {@link ElfBlacksmith} to produce a SHORT_SWORD asserting that the Weapon is an + * instance of {@link ElfWeapon}. + */ + @Test public void testElfBlacksmithWithShortSword() { + Blacksmith blacksmith = new ElfBlacksmith(); + Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SHORT_SWORD); + verifyWeapon(weapon, WeaponType.SHORT_SWORD, ElfWeapon.class); + } - /** - * Testing {@link ElfBlacksmith} to produce a SPEAR asserting that the Weapon is an instance - * of {@link ElfWeapon}. - */ - @Test - public void testElfBlacksmithWithSpear() { - Blacksmith blacksmith = new ElfBlacksmith(); - Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR); - verifyWeapon(weapon, WeaponType.SPEAR, ElfWeapon.class); - } + /** + * Testing {@link ElfBlacksmith} to produce a SPEAR asserting that the Weapon is an instance + * of {@link ElfWeapon}. + */ + @Test public void testElfBlacksmithWithSpear() { + Blacksmith blacksmith = new ElfBlacksmith(); + Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR); + verifyWeapon(weapon, WeaponType.SPEAR, ElfWeapon.class); + } - /** - * This method asserts that the weapon object that is passed is an instance of the clazz and the - * weapon is of type expectedWeaponType. - * - * @param weapon weapon object which is to be verified - * @param expectedWeaponType expected WeaponType of the weapon - * @param clazz expected class of the weapon - */ - private void verifyWeapon(Weapon weapon, WeaponType expectedWeaponType, Class clazz) { - assertTrue("Weapon must be an object of: " + clazz.getName(), clazz.isInstance(weapon)); - assertEquals("Weapon must be of weaponType: " + clazz.getName(), expectedWeaponType, - weapon.getWeaponType()); - } + /** + * This method asserts that the weapon object that is passed is an instance of the clazz and the + * weapon is of type expectedWeaponType. + * + * @param weapon weapon object which is to be verified + * @param expectedWeaponType expected WeaponType of the weapon + * @param clazz expected class of the weapon + */ + private void verifyWeapon(Weapon weapon, WeaponType expectedWeaponType, Class clazz) { + assertTrue("Weapon must be an object of: " + clazz.getName(), clazz.isInstance(weapon)); + assertEquals("Weapon must be of weaponType: " + clazz.getName(), expectedWeaponType, + weapon.getWeaponType()); + } } diff --git a/pom.xml b/pom.xml index d2b02fdf7..dbe19088a 100644 --- a/pom.xml +++ b/pom.xml @@ -93,6 +93,7 @@ publish-subscribe delegation event-driven-architecture + factory-kit From 64b89ecb595cb1a6d36aee8623fe0e7b800781eb Mon Sep 17 00:00:00 2001 From: JuhoKang Date: Sat, 23 Jan 2016 10:06:57 +0900 Subject: [PATCH 002/123] Create project for value-object pattern --- pom.xml | 17 +++++---- value-object/value-object/pom.xml | 24 ++++++++++++ .../java/com/iluwatar/value/object/App.java | 13 +++++++ .../com/iluwatar/value/object/AppTest.java | 38 +++++++++++++++++++ 4 files changed, 84 insertions(+), 8 deletions(-) create mode 100644 value-object/value-object/pom.xml create mode 100644 value-object/value-object/src/main/java/com/iluwatar/value/object/App.java create mode 100644 value-object/value-object/src/test/java/com/iluwatar/value/object/AppTest.java diff --git a/pom.xml b/pom.xml index d2b02fdf7..54bfaab29 100644 --- a/pom.xml +++ b/pom.xml @@ -93,6 +93,7 @@ publish-subscribe delegation event-driven-architecture + value-object @@ -172,8 +173,8 @@ - org.eclipse.m2e @@ -229,10 +230,10 @@ org.jacoco jacoco-maven-plugin ${jacoco.version} - - @@ -327,8 +328,8 @@ exclude-pmd.properties - - + + @@ -341,5 +342,5 @@ - + diff --git a/value-object/value-object/pom.xml b/value-object/value-object/pom.xml new file mode 100644 index 000000000..f70118bc3 --- /dev/null +++ b/value-object/value-object/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.10.0-SNAPSHOT + + value-object + + + junit + junit + test + + + org.mockito + mockito-core + test + + + diff --git a/value-object/value-object/src/main/java/com/iluwatar/value/object/App.java b/value-object/value-object/src/main/java/com/iluwatar/value/object/App.java new file mode 100644 index 000000000..ec30d22fc --- /dev/null +++ b/value-object/value-object/src/main/java/com/iluwatar/value/object/App.java @@ -0,0 +1,13 @@ +package com.iluwatar.value.object; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + } +} diff --git a/value-object/value-object/src/test/java/com/iluwatar/value/object/AppTest.java b/value-object/value-object/src/test/java/com/iluwatar/value/object/AppTest.java new file mode 100644 index 000000000..4b614462c --- /dev/null +++ b/value-object/value-object/src/test/java/com/iluwatar/value/object/AppTest.java @@ -0,0 +1,38 @@ +package com.iluwatar.value.object; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +/** + * Unit test for simple App. + */ +public class AppTest + extends TestCase +{ + /** + * Create the test case + * + * @param testName name of the test case + */ + public AppTest( String testName ) + { + super( testName ); + } + + /** + * @return the suite of tests being tested + */ + public static Test suite() + { + return new TestSuite( AppTest.class ); + } + + /** + * Rigourous Test :-) + */ + public void testApp() + { + assertTrue( true ); + } +} From 5ad99be224166a664706058f2845fa2a48cca6b5 Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Mon, 25 Jan 2016 21:10:58 +0000 Subject: [PATCH 003/123] #354 Add maven model for feature toggle design pattern --- feature-toggle/pom.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 feature-toggle/pom.xml diff --git a/feature-toggle/pom.xml b/feature-toggle/pom.xml new file mode 100644 index 000000000..71aa837de --- /dev/null +++ b/feature-toggle/pom.xml @@ -0,0 +1,15 @@ + + + + java-design-patterns + com.iluwatar + 1.10.0-SNAPSHOT + + 4.0.0 + + feature-toggle + + + \ No newline at end of file From cf10bd1d05da1254ccbf36a4d4673f8fe585f1e0 Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Mon, 25 Jan 2016 21:11:26 +0000 Subject: [PATCH 004/123] #354 Add maven model for feature toggle design pattern --- feature-toggle/pom.xml | 24 ++++++++++++++++++++++++ pom.xml | 1 + 2 files changed, 25 insertions(+) diff --git a/feature-toggle/pom.xml b/feature-toggle/pom.xml index 71aa837de..98c140f37 100644 --- a/feature-toggle/pom.xml +++ b/feature-toggle/pom.xml @@ -1,4 +1,28 @@ + + diff --git a/pom.xml b/pom.xml index c929f2945..68208288d 100644 --- a/pom.xml +++ b/pom.xml @@ -91,6 +91,7 @@ publish-subscribe delegation event-driven-architecture + feature-toggle From d7526fc7c0ecff5dc2d56768ecde3f878f935fa5 Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Mon, 25 Jan 2016 21:14:24 +0000 Subject: [PATCH 005/123] #354 Add maven model for feature toggle design pattern --- abstract-factory/index.md | 13 +- adapter/index.md | 13 +- async-method-invocation/index.md | 8 +- bridge/index.md | 12 +- builder/index.md | 10 +- business-delegate/index.md | 6 +- caching/index.md | 8 +- callback/index.md | 8 +- chain/index.md | 10 +- command/index.md | 15 +- composite/index.md | 10 +- dao/index.md | 8 +- decorator/etc/decorator.png | Bin 8109 -> 29945 bytes decorator/etc/decorator.ucls | 45 ++-- decorator/etc/decorator_1.png | Bin 24245 -> 0 bytes decorator/index.md | 13 +- .../main/java/com/iluwatar/decorator/App.java | 4 +- .../{SmartTroll.java => SmartHostile.java} | 12 +- ...rtTrollTest.java => SmartHostileTest.java} | 6 +- delegation/index.md | 13 +- dependency-injection/index.md | 6 +- double-checked-locking/index.md | 6 +- double-dispatch/index.md | 8 +- event-aggregator/index.md | 8 +- event-driven-architecture/index.md | 11 +- execute-around/index.md | 6 +- facade/index.md | 8 +- factory-method/index.md | 11 +- fluentinterface/index.md | 13 +- flux/index.md | 8 +- flyweight/index.md | 10 +- front-controller/index.md | 10 +- half-sync-half-async/index.md | 10 +- intercepting-filter/index.md | 10 +- interpreter/index.md | 8 +- iterator/index.md | 13 +- layers/index.md | 9 +- lazy-loading/index.md | 8 +- mediator/index.md | 8 +- memento/index.md | 13 +- message-channel/index.md | 12 +- model-view-controller/index.md | 8 +- model-view-presenter/index.md | 8 +- monostate/index.md | 10 +- multiton/index.md | 6 +- naked-objects/index.md | 10 +- null-object/index.md | 6 +- object-pool/index.md | 6 +- observer/index.md | 15 +- poison-pill/index.md | 8 +- pom.xml | 16 +- private-class-data/index.md | 6 +- producer-consumer/index.md | 6 +- property/index.md | 8 +- prototype/index.md | 10 +- proxy/index.md | 15 +- publish-subscribe/index.md | 10 +- reactor/index.md | 10 +- reader-writer-lock/etc/reader-writer-lock.png | Bin 0 -> 39623 bytes .../etc/reader-writer-lock.ucls | 86 +++++++ reader-writer-lock/index.md | 29 +++ reader-writer-lock/pom.xml | 24 ++ .../com/iluwatar/reader/writer/lock/App.java | 56 +++++ .../iluwatar/reader/writer/lock/Reader.java | 40 ++++ .../reader/writer/lock/ReaderWriterLock.java | 211 ++++++++++++++++++ .../iluwatar/reader/writer/lock/Writer.java | 40 ++++ .../iluwatar/reader/writer/lock/AppTest.java | 16 ++ .../writer/lock/ReaderAndWriterTest.java | 81 +++++++ .../reader/writer/lock/ReaderTest.java | 50 +++++ .../reader/writer/lock/StdOutTest.java | 53 +++++ .../reader/writer/lock/WriterTest.java | 50 +++++ repository/index.md | 11 +- .../index.md | 6 +- servant/index.md | 6 +- service-layer/index.md | 8 +- service-locator/index.md | 10 +- singleton/index.md | 12 +- specification/index.md | 8 +- state/index.md | 11 +- step-builder/index.md | 8 +- strategy/index.md | 11 +- template-method/index.md | 8 +- thread-pool/index.md | 6 +- tolerant-reader/index.md | 8 +- twin/index.md | 8 +- visitor/index.md | 10 +- 86 files changed, 1165 insertions(+), 270 deletions(-) delete mode 100644 decorator/etc/decorator_1.png rename decorator/src/main/java/com/iluwatar/decorator/{SmartTroll.java => SmartHostile.java} (56%) rename decorator/src/test/java/com/iluwatar/decorator/{SmartTrollTest.java => SmartHostileTest.java} (85%) create mode 100644 reader-writer-lock/etc/reader-writer-lock.png create mode 100644 reader-writer-lock/etc/reader-writer-lock.ucls create mode 100644 reader-writer-lock/index.md create mode 100644 reader-writer-lock/pom.xml create mode 100644 reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/App.java create mode 100644 reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Reader.java create mode 100644 reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java create mode 100644 reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Writer.java create mode 100644 reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/AppTest.java create mode 100644 reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderAndWriterTest.java create mode 100644 reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderTest.java create mode 100644 reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/StdOutTest.java create mode 100644 reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/WriterTest.java diff --git a/abstract-factory/index.md b/abstract-factory/index.md index f31ed2d01..485599b98 100644 --- a/abstract-factory/index.md +++ b/abstract-factory/index.md @@ -10,24 +10,27 @@ tags: - Difficulty-Intermediate --- -**Also known as:** Kit +## Also known as +Kit -**Intent:** Provide an interface for creating families of related or dependent +## Intent +Provide an interface for creating families of related or dependent objects without specifying their concrete classes. ![alt text](./etc/abstract-factory_1.png "Abstract Factory") -**Applicability:** Use the Abstract Factory pattern when +## Applicability +Use the Abstract Factory pattern when * a system should be independent of how its products are created, composed and represented * a system should be configured with one of multiple families of products * a family of related product objects is designed to be used together, and you need to enforce this constraint * you want to provide a class library of products, and you want to reveal just their interfaces, not their implementations -**Real world examples:** +## Real world examples * [javax.xml.parsers.DocumentBuilderFactory](http://docs.oracle.com/javase/8/docs/api/javax/xml/parsers/DocumentBuilderFactory.html) -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/adapter/index.md b/adapter/index.md index f77018e45..4263eb322 100644 --- a/adapter/index.md +++ b/adapter/index.md @@ -10,24 +10,27 @@ tags: - Difficulty-Beginner --- -**Also known as:** Wrapper +## Also known as +Wrapper -**Intent:** Convert the interface of a class into another interface the clients +## Intent +Convert the interface of a class into another interface the clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces. ![alt text](./etc/adapter.png "Adapter") -**Applicability:** Use the Adapter pattern when +## Applicability +Use the Adapter pattern when * you want to use an existing class, and its interface does not match the one you need * you want to create a reusable class that cooperates with unrelated or unforeseen classes, that is, classes that don't necessarily have compatible interfaces * you need to use several existing subclasses, but it's impractical to adapt their interface by subclassing every one. An object adapter can adapt the interface of its parent class. -**Real world examples:** +## Real world examples * [java.util.Arrays#asList()](http://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#asList%28T...%29) -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/async-method-invocation/index.md b/async-method-invocation/index.md index b9fadb886..93c0249d9 100644 --- a/async-method-invocation/index.md +++ b/async-method-invocation/index.md @@ -10,21 +10,23 @@ tags: - Functional --- -**Intent:** Asynchronous method invocation is pattern where the calling thread +## Intent +Asynchronous method invocation is pattern where the calling thread is not blocked while waiting results of tasks. The pattern provides parallel processing of multiple independent tasks and retrieving the results via callbacks or waiting until everything is done. ![alt text](./etc/async-method-invocation.png "Async Method Invocation") -**Applicability:** Use async method invocation pattern when +## Applicability +Use async method invocation pattern when * you have multiple independent tasks that can run in parallel * you need to improve the performance of a group of sequential tasks * you have limited amount of processing capacity or long running tasks and the caller should not wait the tasks to be ready -**Real world examples:** +## Real world examples * [FutureTask](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/FutureTask.html), [CompletableFuture](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html) and [ExecutorService](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html) (Java) * [Task-based Asynchronous Pattern](https://msdn.microsoft.com/en-us/library/hh873175.aspx) (.NET) diff --git a/bridge/index.md b/bridge/index.md index 008325ce5..49dad14e4 100644 --- a/bridge/index.md +++ b/bridge/index.md @@ -10,15 +10,17 @@ tags: - Difficulty-Intermediate --- -**Also known as:** Handle/Body +## Also known as +Handle/Body -**Intent:** Decouple an abstraction from its implementation so that the two can +## Intent +Decouple an abstraction from its implementation so that the two can vary independently. - ![alt text](./etc/bridge.png "Bridge") -**Applicability:** Use the Bridge pattern when +## Applicability +Use the Bridge pattern when * you want to avoid a permanent binding between an abstraction and its implementation. This might be the case, for example, when the implementation must be selected or switched at run-time. * both the abstractions and their implementations should be extensible by subclassing. In this case, the Bridge pattern lets you combine the different abstractions and implementations and extend them independently @@ -26,6 +28,6 @@ vary independently. * you have a proliferation of classes. Such a class hierarchy indicates the need for splitting an object into two parts. Rumbaugh uses the term "nested generalizations" to refer to such class hierarchies * you want to share an implementation among multiple objects (perhaps using reference counting), and this fact should be hidden from the client. A simple example is Coplien's String class, in which multiple objects can share the same string representation. -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/builder/index.md b/builder/index.md index 8f299d116..05056e7c9 100644 --- a/builder/index.md +++ b/builder/index.md @@ -10,22 +10,24 @@ tags: - Difficulty-Intermediate --- -**Intent:** Separate the construction of a complex object from its +## Intent +Separate the construction of a complex object from its representation so that the same construction process can create different representations. ![alt text](./etc/builder_1.png "Builder") -**Applicability:** Use the Builder pattern when +## Applicability +Use the Builder pattern when * the algorithm for creating a complex object should be independent of the parts that make up the object and how they're assembled * the construction process must allow different representations for the object that's constructed -**Real world examples:** +## Real world examples * [java.lang.StringBuilder](http://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html) * [Apache Camel builders](https://github.com/apache/camel/tree/0e195428ee04531be27a0b659005e3aa8d159d23/camel-core/src/main/java/org/apache/camel/builder) -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/business-delegate/index.md b/business-delegate/index.md index 0b28a5a2f..7d548da11 100644 --- a/business-delegate/index.md +++ b/business-delegate/index.md @@ -9,14 +9,16 @@ tags: - Difficulty-Intermediate --- -**Intent:** The Business Delegate pattern adds an abstraction layer between +## Intent +The Business Delegate pattern adds an abstraction layer between presentation and business tiers. By using the pattern we gain loose coupling between the tiers and encapsulate knowledge about how to locate, connect to, and interact with the business objects that make up the application. ![alt text](./etc/business-delegate.png "Business Delegate") -**Applicability:** Use the Business Delegate pattern when +## Applicability +Use the Business Delegate pattern when * you want loose coupling between presentation and business tiers * you want to orchestrate calls to multiple business services diff --git a/caching/index.md b/caching/index.md index d15fbb7d9..2b89d0559 100644 --- a/caching/index.md +++ b/caching/index.md @@ -10,17 +10,19 @@ tags: - Performance --- -**Intent:** To avoid expensive re-acquisition of resources by not releasing +## Intent +To avoid expensive re-acquisition of resources by not releasing the resources immediately after their use. The resources retain their identity, are kept in some fast-access storage, and are re-used to avoid having to acquire them again. ![alt text](./etc/caching.png "Caching") -**Applicability:** Use the Caching pattern(s) when +## Applicability +Use the Caching pattern(s) when * Repetitious acquisition, initialization, and release of the same resource causes unnecessary performance overhead. -**Credits** +## Credits * [Write-through, write-around, write-back: Cache explained](http://www.computerweekly.com/feature/Write-through-write-around-write-back-Cache-explained) * [Read-Through, Write-Through, Write-Behind, and Refresh-Ahead Caching](https://docs.oracle.com/cd/E15357_01/coh.360/e15723/cache_rtwtwbra.htm#COHDG5177) diff --git a/callback/index.md b/callback/index.md index a70da1ff4..be73dc78f 100644 --- a/callback/index.md +++ b/callback/index.md @@ -11,16 +11,18 @@ tags: - Idiom --- -**Intent:** Callback is a piece of executable code that is passed as an +## Intent +Callback is a piece of executable code that is passed as an argument to other code, which is expected to call back (execute) the argument at some convenient time. ![alt text](./etc/callback.png "Callback") -**Applicability:** Use the Callback pattern when +## Applicability +Use the Callback pattern when * when some arbitrary synchronous or asynchronous action must be performed after execution of some defined activity. -**Real world examples:** +## Real world examples * [CyclicBarrier] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html#CyclicBarrier%28int,%20java.lang.Runnable%29) constructor can accept callback that will be triggered every time when barrier is tripped. diff --git a/chain/index.md b/chain/index.md index 5432b51b6..ef18f6f64 100644 --- a/chain/index.md +++ b/chain/index.md @@ -10,23 +10,25 @@ tags: - Difficulty-Intermediate --- -**Intent:** Avoid coupling the sender of a request to its receiver by giving +## Intent +Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it. ![alt text](./etc/chain_1.png "Chain of Responsibility") -**Applicability:** Use Chain of Responsibility when +## Applicability +Use Chain of Responsibility when * more than one object may handle a request, and the handler isn't known a priori. The handler should be ascertained automatically * you want to issue a request to one of several objects without specifying the receiver explicitly * the set of objects that can handle a request should be specified dynamically -**Real world examples:** +## Real world examples * [java.util.logging.Logger#log()](http://docs.oracle.com/javase/8/docs/api/java/util/logging/Logger.html#log%28java.util.logging.Level,%20java.lang.String%29) * [Apache Commons Chain](https://commons.apache.org/proper/commons-chain/index.html) -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/command/index.md b/command/index.md index 4052a8ae7..2b9311537 100644 --- a/command/index.md +++ b/command/index.md @@ -10,15 +10,18 @@ tags: - Difficulty-Intermediate --- -**Also known as:** Action, Transaction +## Also known as +Action, Transaction -**Intent:** Encapsulate a request as an object, thereby letting you +## Intent +Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations. ![alt text](./etc/command.png "Command") -**Applicability:** Use the Command pattern when you want to +## Applicability +Use the Command pattern when you want to * parameterize objects by an action to perform. You can express such parameterization in a procedural language with a callback function, that is, a function that's registered somewhere to be called at a later point. Commands are an object-oriented replacement for callbacks. * specify, queue, and execute requests at different times. A Command object can have a lifetime independent of the original request. If the receiver of a request can be represented in an address space-independent way, then you can transfer a command object for the request to a different process and fulfill the request there @@ -26,16 +29,16 @@ support undoable operations. * support logging changes so that they can be reapplied in case of a system crash. By augmenting the Command interface with load and store operations, you can keep a persistent log of changes. Recovering from a crash involves reloading logged commands from disk and re-executing them with the execute operation * structure a system around high-level operations build on primitive operations. Such a structure is common in information systems that support transactions. A transaction encapsulates a set of changes to data. The Command pattern offers a way to model transactions. Commands have a common interface, letting you invoke all transactions the same way. The pattern also makes it easy to extend the system with new transactions -**Typical Use Case:** +## Typical Use Case * to keep a history of requests * implement callback functionality * implement the undo functionality -**Real world examples:** +## Real world examples * [java.lang.Runnable](http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html) -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/composite/index.md b/composite/index.md index bf5a920ac..8b980292d 100644 --- a/composite/index.md +++ b/composite/index.md @@ -10,22 +10,24 @@ tags: - Difficulty-Intermediate --- -**Intent:** Compose objects into tree structures to represent part-whole +## Intent +Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly. ![alt text](./etc/composite_1.png "Composite") -**Applicability:** Use the Composite pattern when +## Applicability +Use the Composite pattern when * you want to represent part-whole hierarchies of objects * you want clients to be able to ignore the difference between compositions of objects and individual objects. Clients will treat all objects in the composite structure uniformly -**Real world examples:** +## Real world examples * [java.awt.Container](http://docs.oracle.com/javase/8/docs/api/java/awt/Container.html) and [java.awt.Component](http://docs.oracle.com/javase/8/docs/api/java/awt/Component.html) * [Apache Wicket](https://github.com/apache/wicket) component tree, see [Component](https://github.com/apache/wicket/blob/91e154702ab1ff3481ef6cbb04c6044814b7e130/wicket-core/src/main/java/org/apache/wicket/Component.java) and [MarkupContainer](https://github.com/apache/wicket/blob/b60ec64d0b50a611a9549809c9ab216f0ffa3ae3/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java) -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/dao/index.md b/dao/index.md index 91f6dc776..785a1c362 100644 --- a/dao/index.md +++ b/dao/index.md @@ -9,16 +9,18 @@ tags: - Difficulty-Beginner --- -**Intent:** Object provides an abstract interface to some type of database or +## Intent +Object provides an abstract interface to some type of database or other persistence mechanism. ![alt text](./etc/dao.png "Data Access Object") -**Applicability:** Use the Data Access Object in any of the following situations +## Applicability +Use the Data Access Object in any of the following situations * when you want to consolidate how the data layer is accessed * when you want to avoid writing multiple data retrieval/persistence layers -**Credits:** +## Credits * [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) diff --git a/decorator/etc/decorator.png b/decorator/etc/decorator.png index 1e4bfdac2b201b9d0a7277f4ebc531102a411327..47a87b20b33dd4964ad94d7309bd63eb7b828d70 100644 GIT binary patch literal 29945 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 literal 8109 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 G!T%5UTm=aL diff --git a/decorator/etc/decorator.ucls b/decorator/etc/decorator.ucls index 7adb8c3a6..a5353d4ec 100644 --- a/decorator/etc/decorator.ucls +++ b/decorator/etc/decorator.ucls @@ -1,18 +1,18 @@ - + - + - - + + @@ -21,29 +21,46 @@ - + - + + + + + + + + + + + + - - - - + + + + - - + + + + + + diff --git a/decorator/etc/decorator_1.png b/decorator/etc/decorator_1.png deleted file mode 100644 index 5a7afe2d1a2ccdc7c23f748e35df829385a13ce8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24245 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 diff --git a/decorator/index.md b/decorator/index.md index ca6c7bb50..5494ca944 100644 --- a/decorator/index.md +++ b/decorator/index.md @@ -10,20 +10,23 @@ tags: - Difficulty-Beginner --- -**Also known as:** Wrapper +## Also known as +Wrapper -**Intent:** Attach additional responsibilities to an object dynamically. +## Intent +Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality. -![alt text](./etc/decorator_1.png "Decorator") +![alt text](./etc/decorator.png "Decorator") -**Applicability:** Use Decorator +## Applicability +Use Decorator * to add responsibilities to individual objects dynamically and transparently, that is, without affecting other objects * for responsibilities that can be withdrawn * when extension by subclassing is impractical. Sometimes a large number of independent extensions are possible and would produce an explosion of subclasses to support every combination. Or a class definition may be hidden or otherwise unavailable for subclassing -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/decorator/src/main/java/com/iluwatar/decorator/App.java b/decorator/src/main/java/com/iluwatar/decorator/App.java index d58d3b61a..242e72d11 100644 --- a/decorator/src/main/java/com/iluwatar/decorator/App.java +++ b/decorator/src/main/java/com/iluwatar/decorator/App.java @@ -8,7 +8,7 @@ package com.iluwatar.decorator; * runtime. *

* In this example we show how the simple {@link Troll} first attacks and then flees the battle. - * Then we decorate the {@link Troll} with a {@link SmartTroll} and perform the attack again. You + * Then we decorate the {@link Troll} with a {@link SmartHostile} and perform the attack again. You * can see how the behavior changes after the decoration. * */ @@ -30,7 +30,7 @@ public class App { // change the behavior of the simple troll by adding a decorator System.out.println("\nA smart looking troll surprises you."); - Hostile smart = new SmartTroll(troll); + Hostile smart = new SmartHostile(troll); smart.attack(); smart.fleeBattle(); System.out.printf("Smart troll power %d.\n", smart.getAttackPower()); diff --git a/decorator/src/main/java/com/iluwatar/decorator/SmartTroll.java b/decorator/src/main/java/com/iluwatar/decorator/SmartHostile.java similarity index 56% rename from decorator/src/main/java/com/iluwatar/decorator/SmartTroll.java rename to decorator/src/main/java/com/iluwatar/decorator/SmartHostile.java index 93927237d..93f494688 100644 --- a/decorator/src/main/java/com/iluwatar/decorator/SmartTroll.java +++ b/decorator/src/main/java/com/iluwatar/decorator/SmartHostile.java @@ -1,34 +1,34 @@ package com.iluwatar.decorator; /** - * SmartTroll is a decorator for {@link Hostile} objects. The calls to the {@link Hostile} interface + * SmartHostile is a decorator for {@link Hostile} objects. The calls to the {@link Hostile} interface * are intercepted and decorated. Finally the calls are delegated to the decorated {@link Hostile} * object. * */ -public class SmartTroll implements Hostile { +public class SmartHostile implements Hostile { private Hostile decorated; - public SmartTroll(Hostile decorated) { + public SmartHostile(Hostile decorated) { this.decorated = decorated; } @Override public void attack() { - System.out.println("The troll throws a rock at you!"); + System.out.println("It throws a rock at you!"); decorated.attack(); } @Override public int getAttackPower() { - // decorated troll power + 20 because it is smart + // decorated hostile's power + 20 because it is smart return decorated.getAttackPower() + 20; } @Override public void fleeBattle() { - System.out.println("The troll calls for help!"); + System.out.println("It calls for help!"); decorated.fleeBattle(); } } diff --git a/decorator/src/test/java/com/iluwatar/decorator/SmartTrollTest.java b/decorator/src/test/java/com/iluwatar/decorator/SmartHostileTest.java similarity index 85% rename from decorator/src/test/java/com/iluwatar/decorator/SmartTrollTest.java rename to decorator/src/test/java/com/iluwatar/decorator/SmartHostileTest.java index faafc4a82..e5be32eae 100644 --- a/decorator/src/test/java/com/iluwatar/decorator/SmartTrollTest.java +++ b/decorator/src/test/java/com/iluwatar/decorator/SmartHostileTest.java @@ -11,15 +11,15 @@ import static org.mockito.internal.verification.VerificationModeFactory.times; * * @author Jeroen Meulemeester */ -public class SmartTrollTest { +public class SmartHostileTest { @Test - public void testSmartTroll() throws Exception { + public void testSmartHostile() throws Exception { // Create a normal troll first, but make sure we can spy on it later on. final Hostile simpleTroll = spy(new Troll()); // Now we want to decorate the troll to make it smarter ... - final Hostile smartTroll = new SmartTroll(simpleTroll); + final Hostile smartTroll = new SmartHostile(simpleTroll); assertEquals(30, smartTroll.getAttackPower()); verify(simpleTroll, times(1)).getAttackPower(); diff --git a/delegation/index.md b/delegation/index.md index 2064a5bf7..e5c0c6376 100644 --- a/delegation/index.md +++ b/delegation/index.md @@ -9,19 +9,22 @@ tags: - Difficulty-Beginner --- -**Also known as:** Proxy Pattern +## Also known as +Proxy Pattern -**Intent:** It is a technique where an object expresses certain behavior to the outside but in +## Intent +It is a technique where an object expresses certain behavior to the outside but in reality delegates responsibility for implementing that behaviour to an associated object. ![alt text](./etc/delegation.png "Delegate") -**Applicability:** Use the Delegate pattern in order to achieve the following +## Applicability +Use the Delegate pattern in order to achieve the following * Reduce the coupling of methods to their class * Components that behave identically, but realize that this situation can change in the future. -**Credits** +## Credits * [Delegate Pattern: Wikipedia ](https://en.wikipedia.org/wiki/Delegation_pattern) -* [Proxy Pattern: Wikipedia ](https://en.wikipedia.org/wiki/Proxy_pattern) \ No newline at end of file +* [Proxy Pattern: Wikipedia ](https://en.wikipedia.org/wiki/Proxy_pattern) diff --git a/dependency-injection/index.md b/dependency-injection/index.md index 4caa30c94..735f589b1 100644 --- a/dependency-injection/index.md +++ b/dependency-injection/index.md @@ -9,7 +9,8 @@ tags: - Difficulty-Beginner --- -**Intent:** Dependency Injection is a software design pattern in which one or +## Intent +Dependency Injection is a software design pattern in which one or more dependencies (or services) are injected, or passed by reference, into a dependent object (or client) and are made part of the client's state. The pattern separates the creation of a client's dependencies from its own @@ -18,7 +19,8 @@ inversion of control and single responsibility principles. ![alt text](./etc/dependency-injection.png "Dependency Injection") -**Applicability:** Use the Dependency Injection pattern when +## Applicability +Use the Dependency Injection pattern when * when you need to remove knowledge of concrete implementation from object * to enable unit testing of classes in isolation using mock objects or stubs diff --git a/double-checked-locking/index.md b/double-checked-locking/index.md index 05ec2006f..da1fdd1a2 100644 --- a/double-checked-locking/index.md +++ b/double-checked-locking/index.md @@ -10,14 +10,16 @@ tags: - Idiom --- -**Intent:** Reduce the overhead of acquiring a lock by first testing the +## Intent +Reduce the overhead of acquiring a lock by first testing the locking criterion (the "lock hint") without actually acquiring the lock. Only if the locking criterion check indicates that locking is required does the actual locking logic proceed. ![alt text](./etc/double_checked_locking_1.png "Double Checked Locking") -**Applicability:** Use the Double Checked Locking pattern when +## Applicability +Use the Double Checked Locking pattern when * there is a concurrent access in object creation, e.g. singleton, where you want to create single instance of the same class and checking if it's null or not maybe not be enough when there are two or more threads that checks if instance is null or not. * there is a concurrent access on a method where method's behaviour changes according to the some constraints and these constraint change within this method. diff --git a/double-dispatch/index.md b/double-dispatch/index.md index a660e0f88..ae87208a2 100644 --- a/double-dispatch/index.md +++ b/double-dispatch/index.md @@ -10,15 +10,17 @@ tags: - Idiom --- -**Intent:** Double Dispatch pattern is a way to create maintainable dynamic +## Intent +Double Dispatch pattern is a way to create maintainable dynamic behavior based on receiver and parameter types. ![alt text](./etc/double-dispatch.png "Double Dispatch") -**Applicability:** Use the Double Dispatch pattern when +## Applicability +Use the Double Dispatch pattern when * the dynamic behavior is not defined only based on receiving object's type but also on the receiving method's parameter type. -**Real world examples:** +## Real world examples * [ObjectOutputStream](https://docs.oracle.com/javase/8/docs/api/java/io/ObjectOutputStream.html) diff --git a/event-aggregator/index.md b/event-aggregator/index.md index 05e94e0de..5462a2a5d 100644 --- a/event-aggregator/index.md +++ b/event-aggregator/index.md @@ -9,7 +9,8 @@ tags: - Difficulty-Beginner --- -**Intent:** A system with lots of objects can lead to complexities when a +## Intent +A system with lots of objects can lead to complexities when a client wants to subscribe to events. The client has to find and register for each object individually, if each object has multiple events then each event requires a separate subscription. An Event Aggregator acts as a single source @@ -18,7 +19,8 @@ allowing clients to register with just the aggregator. ![alt text](./etc/classes.png "Event Aggregator") -**Applicability:** Use the Event Aggregator pattern when +## Applicability +Use the Event Aggregator pattern when * Event Aggregator is a good choice when you have lots of objects that are potential event sources. Rather than have the observer deal with registering @@ -26,6 +28,6 @@ allowing clients to register with just the aggregator. Aggregator. As well as simplifying registration, a Event Aggregator also simplifies the memory management issues in using observers. -**Credits:** +## Credits * [Martin Fowler - Event Aggregator](http://martinfowler.com/eaaDev/EventAggregator.html) diff --git a/event-driven-architecture/index.md b/event-driven-architecture/index.md index 6c2ae99c6..7c786b76c 100644 --- a/event-driven-architecture/index.md +++ b/event-driven-architecture/index.md @@ -3,25 +3,26 @@ title: Event Driven Architecture folder: event-driven-architecture permalink: /patterns/event-driven-architecture - -**Intent:** Send and notify state changes of your objects to other applications using an Event-driven Architecture. +## Intent +Send and notify state changes of your objects to other applications using an Event-driven Architecture. ![alt text](./etc/eda.png "Event Driven Architecture") -**Applicability:** Use an Event-driven architecture when +## Applicability +Use an Event-driven architecture when * you want to create a loosely coupled system * you want to build a more responsive system * you want a system that is easier to extend -**Real world examples:** +## Real world examples * SendGrid, an email API, sends events whenever an email is processed, delivered, opened etc... (https://sendgrid.com/docs/API_Reference/Webhooks/event.html) * Chargify, a billing API, exposes payment activity through various events (https://docs.chargify.com/api-events) * Amazon's AWS Lambda, lets you execute code in response to events such as changes to Amazon S3 buckets, updates to an Amazon DynamoDB table, or custom events generated by your applications or devices. (https://aws.amazon.com/lambda) * MySQL runs triggers based on events such as inserts and update events happening on database tables. -**Credits:** +## Credits * [Event-driven architecture - Wikipedia](http://www.computerweekly.com/feature/Write-through-write-around-write-back-Cache-explained) * [Fundamental Components of an Event-Driven Architecture](http://giocc.com/fundamental-components-of-an-event-driven-architecture.html) diff --git a/execute-around/index.md b/execute-around/index.md index 8e62d5a8c..ec543bdc7 100644 --- a/execute-around/index.md +++ b/execute-around/index.md @@ -10,13 +10,15 @@ tags: - Idiom --- -**Intent:** Execute Around idiom frees the user from certain actions that +## Intent +Execute Around idiom frees the user from certain actions that should always be executed before and after the business method. A good example of this is resource allocation and deallocation leaving the user to specify only what to do with the resource. ![alt text](./etc/execute-around.png "Execute Around") -**Applicability:** Use the Execute Around idiom when +## Applicability +Use the Execute Around idiom when * you use an API that requires methods to be called in pairs such as open/close or allocate/deallocate. diff --git a/facade/index.md b/facade/index.md index 9ad9cb985..c416552c7 100644 --- a/facade/index.md +++ b/facade/index.md @@ -10,17 +10,19 @@ tags: - Difficulty-Beginner --- -**Intent:** Provide a unified interface to a set of interfaces in a subsystem. +## Intent +Provide a unified interface to a set of interfaces in a subsystem. Facade defines a higher-level interface that makes the subsystem easier to use. ![alt text](./etc/facade_1.png "Facade") -**Applicability:** Use the Facade pattern when +## Applicability +Use the Facade pattern when * you want to provide a simple interface to a complex subsystem. Subsystems often get more complex as they evolve. Most patterns, when applied, result in more and smaller classes. This makes the subsystem more reusable and easier to customize, but it also becomes harder to use for clients that don't need to customize it. A facade can provide a simple default view of the subsystem that is good enough for most clients. Only clients needing more customizability will need to look beyond the facade. * there are many dependencies between clients and the implementation classes of an abstraction. Introduce a facade to decouple the subsystem from clients and other subsystems, thereby promoting subsystem independence and portability. * you want to layer your subsystems. Use a facade to define an entry point to each subsystem level. If subsystems are dependent, the you can simplify the dependencies between them by making them communicate with each other solely through their facades -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/factory-method/index.md b/factory-method/index.md index 3568a1109..42237883d 100644 --- a/factory-method/index.md +++ b/factory-method/index.md @@ -10,20 +10,23 @@ tags: - Gang Of Four --- -**Also known as:** Virtual Constructor +## Also known as +Virtual Constructor -**Intent:** Define an interface for creating an object, but let subclasses +## Intent +Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses. ![alt text](./etc/factory-method_1.png "Factory Method") -**Applicability:** Use the Factory Method pattern when +## Applicability +Use the Factory Method pattern when * a class can't anticipate the class of objects it must create * a class wants its subclasses to specify the objects it creates * classes delegate responsibility to one of several helper subclasses, and you want to localize the knowledge of which helper subclass is the delegate -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/fluentinterface/index.md b/fluentinterface/index.md index 0cabed598..767792da7 100644 --- a/fluentinterface/index.md +++ b/fluentinterface/index.md @@ -10,9 +10,10 @@ tags: - Functional --- -**Intent:** A fluent interface provides an easy-readable, flowing interface, that often mimics a domain specific language. Using this pattern results in code that can be read nearly as human language. +## Intent +A fluent interface provides an easy-readable, flowing interface, that often mimics a domain specific language. Using this pattern results in code that can be read nearly as human language. -**Implementation:** +## Implementation A fluent interface can be implemented using any of @@ -22,13 +23,13 @@ A fluent interface can be implemented using any of ![Fluent Interface](./etc/fluentinterface.png "Fluent Interface") - -**Applicability:** Use the Fluent Interface pattern when +## Applicability +Use the Fluent Interface pattern when * you provide an API that would benefit from a DSL-like usage * you have objects that are difficult to configure or use -**Real world examples:** +## Real world examples * [Java 8 Stream API](http://www.oracle.com/technetwork/articles/java/ma14-java-se-8-streams-2177646.html) * [Google Guava FluentInterable](https://github.com/google/guava/wiki/FunctionalExplained) @@ -36,7 +37,7 @@ A fluent interface can be implemented using any of * [Mockito](http://mockito.org/) * [Java Hamcrest](http://code.google.com/p/hamcrest/wiki/Tutorial) -**Credits** +## Credits * [Fluent Interface - Martin Fowler](http://www.martinfowler.com/bliki/FluentInterface.html) * [Evolutionary architecture and emergent design: Fluent interfaces - Neal Ford](http://www.ibm.com/developerworks/library/j-eaed14/) diff --git a/flux/index.md b/flux/index.md index c1ef0b4f9..7ac312c44 100644 --- a/flux/index.md +++ b/flux/index.md @@ -9,17 +9,19 @@ tags: - Difficulty-Intermediate --- -**Intent:** Flux eschews MVC in favor of a unidirectional data flow. When a +## Intent +Flux eschews MVC in favor of a unidirectional data flow. When a user interacts with a view, the view propagates an action through a central dispatcher, to the various stores that hold the application's data and business logic, which updates all of the views that are affected. ![alt text](./etc/flux.png "Flux") -**Applicability:** Use the Flux pattern when +## Applicability +Use the Flux pattern when * you want to focus on creating explicit and understandable update paths for your application's data, which makes tracing changes during development simpler and makes bugs easier to track down and fix. -**Credits:** +## Credits * [Flux - Application architecture for building user interfaces](http://facebook.github.io/flux/) diff --git a/flyweight/index.md b/flyweight/index.md index 41a45f555..a98dced8e 100644 --- a/flyweight/index.md +++ b/flyweight/index.md @@ -11,12 +11,14 @@ tags: - Performance --- -**Intent:** Use sharing to support large numbers of fine-grained objects +## Intent +Use sharing to support large numbers of fine-grained objects efficiently. ![alt text](./etc/flyweight_1.png "Flyweight") -**Applicability:** The Flyweight pattern's effectiveness depends heavily on how +## Applicability +The Flyweight pattern's effectiveness depends heavily on how and where it's used. Apply the Flyweight pattern when all of the following are true @@ -26,10 +28,10 @@ true * many groups of objects may be replaced by relatively few shared objects once extrinsic state is removed * the application doesn't depend on object identity. Since flyweight objects may be shared, identity tests will return true for conceptually distinct objects. -**Real world examples:** +## Real world examples * [java.lang.Integer#valueOf(int)](http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#valueOf%28int%29) -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/front-controller/index.md b/front-controller/index.md index 603bfef2b..a462a08e0 100644 --- a/front-controller/index.md +++ b/front-controller/index.md @@ -9,23 +9,25 @@ tags: - Difficulty-Intermediate --- -**Intent:** Introduce a common handler for all requests for a web site. This +## Intent +Introduce a common handler for all requests for a web site. This way we can encapsulate common functionality such as security, internationalization, routing and logging in a single place. ![alt text](./etc/front-controller.png "Front Controller") -**Applicability:** Use the Front Controller pattern when +## Applicability +Use the Front Controller pattern when * you want to encapsulate common request handling functionality in single place * you want to implements dynamic request handling i.e. change routing without modifying code * make web server configuration portable, you only need to register the handler web server specific way -**Real world examples:** +## Real world examples * [Apache Struts](https://struts.apache.org/) -**Credits:** +## Credits * [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) * [Presentation Tier Patterns](http://www.javagyan.com/tutorials/corej2eepatterns/presentation-tier-patterns) diff --git a/half-sync-half-async/index.md b/half-sync-half-async/index.md index 5eb93c058..8a091f813 100644 --- a/half-sync-half-async/index.md +++ b/half-sync-half-async/index.md @@ -9,13 +9,15 @@ tags: - Difficulty-Intermediate --- -**Intent:** The Half-Sync/Half-Async pattern decouples synchronous I/O from +## Intent +The Half-Sync/Half-Async pattern decouples synchronous I/O from asynchronous I/O in a system to simplify concurrent programming effort without degrading execution efficiency. ![Half-Sync/Half-Async class diagram](./etc/half-sync-half-async.png) -**Applicability:** Use Half-Sync/Half-Async pattern when +## Applicability +Use Half-Sync/Half-Async pattern when * a system possesses following characteristics: * the system must perform tasks in response to external events that occur asynchronously, like hardware interrupts in OS @@ -23,13 +25,13 @@ degrading execution efficiency. * the higher level tasks in the system can be simplified significantly if I/O is performed synchronously. * one or more tasks in a system must run in a single thread of control, while other tasks may benefit from multi-threading. -**Real world examples:** +## Real world examples * [BSD Unix networking subsystem](http://www.cs.wustl.edu/~schmidt/PDF/PLoP-95.pdf) * [Real Time CORBA](http://www.omg.org/news/meetings/workshops/presentations/realtime2001/4-3_Pyarali_thread-pool.pdf) * [Android AsyncTask framework](http://developer.android.com/reference/android/os/AsyncTask.html) -**Credits:** +## Credits * [Douglas C. Schmidt and Charles D. Cranor - Half Sync/Half Async](http://www.cs.wustl.edu/~schmidt/PDF/PLoP-95.pdf) * [Pattern Oriented Software Architecture Vol I-V](http://www.amazon.com/Pattern-Oriented-Software-Architecture-Volume-Patterns/dp/0471958697) diff --git a/intercepting-filter/index.md b/intercepting-filter/index.md index 3aa70ba02..327f091b1 100644 --- a/intercepting-filter/index.md +++ b/intercepting-filter/index.md @@ -9,22 +9,24 @@ tags: - Difficulty-Intermediate --- -**Intent:** Provide pluggable filters to conduct necessary pre-processing and +## Intent +Provide pluggable filters to conduct necessary pre-processing and post-processing to requests from a client to a target ![alt text](./etc/intercepting-filter.png "Intercepting Filter") -**Applicability:** Use the Intercepting Filter pattern when +## Applicability +Use the Intercepting Filter pattern when * a system uses pre-processing or post-processing requests * a system should do the authentication/ authorization/ logging or tracking of request and then pass the requests to corresponding handlers * you want a modular approach to configuring pre-processing and post-processing schemes -**Real world examples:** +## Real world examples * [Struts 2 - Interceptors](https://struts.apache.org/docs/interceptors.html) -**Credits:** +## Credits * [TutorialsPoint - Intercepting Filter](http://www.tutorialspoint.com/design_pattern/intercepting_filter_pattern.htm) * [Presentation Tier Patterns](http://www.javagyan.com/tutorials/corej2eepatterns/presentation-tier-patterns) diff --git a/interpreter/index.md b/interpreter/index.md index dd6a7eda2..87c1c47f7 100644 --- a/interpreter/index.md +++ b/interpreter/index.md @@ -10,19 +10,21 @@ tags: - Difficulty-Intermediate --- -**Intent:** Given a language, define a representation for its grammar along +## Intent +Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language. ![alt text](./etc/interpreter_1.png "Interpreter") -**Applicability:** Use the Interpreter pattern when there is a language to +## Applicability +Use the Interpreter pattern when there is a language to interpret, and you can represent statements in the language as abstract syntax trees. The Interpreter pattern works best when * the grammar is simple. For complex grammars, the class hierarchy for the grammar becomes large and unmanageable. Tools such as parser generators are a better alternative in such cases. They can interpret expressions without building abstract syntax trees, which can save space and possibly time * efficiency is not a critical concern. The most efficient interpreters are usually not implemented by interpreting parse trees directly but by first translating them into another form. For example, regular expressions are often transformed into state machines. But even then, the translator can be implemented by the Interpreter pattern, so the pattern is still applicable -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/iterator/index.md b/iterator/index.md index fe6c1fe35..d6be7758d 100644 --- a/iterator/index.md +++ b/iterator/index.md @@ -10,23 +10,26 @@ tags: - Gang Of Four --- -**Also known as:** Cursor +## Also known as +Cursor -**Intent:** Provide a way to access the elements of an aggregate object +## Intent +Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation. ![alt text](./etc/iterator_1.png "Iterator") -**Applicability:** Use the Iterator pattern +## Applicability +Use the Iterator pattern * to access an aggregate object's contents without exposing its internal representation * to support multiple traversals of aggregate objects * to provide a uniform interface for traversing different aggregate structures -**Real world examples:** +## Real world examples * [java.util.Iterator](http://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html) -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/layers/index.md b/layers/index.md index 5f746d4d2..8e8eda366 100644 --- a/layers/index.md +++ b/layers/index.md @@ -10,18 +10,19 @@ tags: - Spring --- -**Intent:** Layers is an architectural style where software responsibilities are +## Intent +Layers is an architectural style where software responsibilities are divided among the different layers of the application. ![alt text](./etc/layers.png "Layers") -**Applicability:** Use the Layers architecture when +## Applicability +Use the Layers architecture when * you want clearly divide software responsibilities into differents parts of the program * you want to prevent a change from propagating throughout the application * you want to make your application more maintainable and testable -**Credits:** +## Credits * [Pattern Oriented Software Architecture Vol I-V](http://www.amazon.com/Pattern-Oriented-Software-Architecture-Volume-Patterns/dp/0471958697) - diff --git a/lazy-loading/index.md b/lazy-loading/index.md index 6f2501b7e..8a06700d3 100644 --- a/lazy-loading/index.md +++ b/lazy-loading/index.md @@ -11,17 +11,19 @@ tags: - Performance --- -**Intent:** Lazy loading is a design pattern commonly used to defer +## Intent +Lazy loading is a design pattern commonly used to defer initialization of an object until the point at which it is needed. It can contribute to efficiency in the program's operation if properly and appropriately used. ![alt text](./etc/lazy-loading.png "Lazy Loading") -**Applicability:** Use the Lazy Loading idiom when +## Applicability +Use the Lazy Loading idiom when * eager loading is expensive or the object to be loaded might not be needed at all -**Real world examples:** +## Real world examples * JPA annotations @OneToOne, @OneToMany, @ManyToOne, @ManyToMany and fetch = FetchType.LAZY diff --git a/mediator/index.md b/mediator/index.md index cb4ce7fb1..c7a0478c8 100644 --- a/mediator/index.md +++ b/mediator/index.md @@ -10,18 +10,20 @@ tags: - Difficulty-Intermediate --- -**Intent:** Define an object that encapsulates how a set of objects interact. +## Intent +Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently. ![alt text](./etc/mediator_1.png "Mediator") -**Applicability:** Use the Mediator pattern when +## Applicability +Use the Mediator pattern when * a set of objects communicate in well-defined but complex ways. The resulting interdependencies are unstructured and difficult to understand * reusing an object is difficult because it refers to and communicates with many other objects * a behavior that's distributed between several classes should be customizable without a lot of subclassing -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/memento/index.md b/memento/index.md index 7322aef50..463b5fec0 100644 --- a/memento/index.md +++ b/memento/index.md @@ -10,22 +10,25 @@ tags: - Difficulty-Intermediate --- -**Also known as:** Token +## Also known as +Token -**Intent:** Without violating encapsulation, capture and externalize an +## Intent +Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later. ![alt text](./etc/memento.png "Memento") -**Applicability:** Use the Memento pattern when +## Applicability +Use the Memento pattern when * a snapshot of an object's state must be saved so that it can be restored to that state later, and * a direct interface to obtaining the state would expose implementation details and break the object's encapsulation -**Real world examples:** +## Real world examples * [java.util.Date](http://docs.oracle.com/javase/8/docs/api/java/util/Date.html) -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/message-channel/index.md b/message-channel/index.md index 3b742a983..8aebd0157 100644 --- a/message-channel/index.md +++ b/message-channel/index.md @@ -7,18 +7,20 @@ categories: Integration tags: - Java - EIP - - Camel + - Apache Camel™ --- -**Intent:** When two applications communicate using a messaging system they do it by using logical addresses +## Intent +When two applications communicate using a messaging system they do it by using logical addresses of the system, so called Message Channels. ![alt text](./etc/message-channel.png "Message Channel") -**Applicability:** Use the Message Channel pattern when +## Applicability +Use the Message Channel pattern when * two or more applications need to communicate using a messaging system -**Real world examples:** +## Real world examples -* [akka-camel](http://doc.akka.io/docs/akka/snapshot/scala/camel.html) +* [akka-camel](http://doc.akka.io/docs/akka/snapshot/scala/camel.html) \ No newline at end of file diff --git a/model-view-controller/index.md b/model-view-controller/index.md index 3d1d3e929..bc96f7ab1 100644 --- a/model-view-controller/index.md +++ b/model-view-controller/index.md @@ -9,18 +9,20 @@ tags: - Difficulty-Intermediate --- -**Intent:** Separate the user interface into three interconnected components: +## Intent +Separate the user interface into three interconnected components: the model, the view and the controller. Let the model manage the data, the view display the data and the controller mediate updating the data and redrawing the display. ![alt text](./etc/model-view-controller.png "Model-View-Controller") -**Applicability:** Use the Model-View-Controller pattern when +## Applicability +Use the Model-View-Controller pattern when * you want to clearly separate the domain data from its user interface representation -**Credits:** +## Credits * [Trygve Reenskaug - Model-view-controller](http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) * [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) diff --git a/model-view-presenter/index.md b/model-view-presenter/index.md index a65a9a651..a3b921ce4 100644 --- a/model-view-presenter/index.md +++ b/model-view-presenter/index.md @@ -9,17 +9,19 @@ tags: - Difficulty-Intermediate --- -**Intent:** Apply a "Separation of Concerns" principle in a way that allows +## Intent +Apply a "Separation of Concerns" principle in a way that allows developers to build and test user interfaces. ![alt text](./etc/model-view-presenter_1.png "Model-View-Presenter") -**Applicability:** Use the Model-View-Presenter in any of the following +## Applicability +Use the Model-View-Presenter in any of the following situations * when you want to improve the "Separation of Concerns" principle in presentation logic * when a user interface development and testing is necessary. -**Real world examples:** +## Real world examples * [MVP4J](https://github.com/amineoualialami/mvp4j) diff --git a/monostate/index.md b/monostate/index.md index 4176af3ce..415d13f0e 100644 --- a/monostate/index.md +++ b/monostate/index.md @@ -9,22 +9,24 @@ tags: - Difficulty-Beginner --- -**Intent:** Enforces a behaviour like sharing the same state amongst all instances. +## Intent +Enforces a behaviour like sharing the same state amongst all instances. ![alt text](./etc/monostate.png "MonoState") -**Applicability:** Use the Monostate pattern when +## Applicability +Use the Monostate pattern when * The same state must be shared across all instances of a class. * Typically this pattern might be used everywhere a Singleton might be used. Singleton usage however is not transparent, Monostate usage is. * Monostate has one major advantage over singleton. The subclasses might decorate the shared state as they wish and hence can provide dynamically different behaviour than the base class. -**Typical Use Case:** +## Typical Use Case * the logging class * managing a connection to a database * file manager -**Real world examples:** +## Real world examples Yet to see this. diff --git a/multiton/index.md b/multiton/index.md index 6491de442..68fb6bbc6 100644 --- a/multiton/index.md +++ b/multiton/index.md @@ -9,11 +9,13 @@ tags: - Difficulty-Beginner --- -**Intent:** Ensure a class only has limited number of instances, and provide a +## Intent +Ensure a class only has limited number of instances, and provide a global point of access to them. ![alt text](./etc/multiton.png "Multiton") -**Applicability:** Use the Multiton pattern when +## Applicability +Use the Multiton pattern when * there must be specific number of instances of a class, and they must be accessible to clients from a well-known access point diff --git a/naked-objects/index.md b/naked-objects/index.md index e3dd09a81..eb1c083b1 100644 --- a/naked-objects/index.md +++ b/naked-objects/index.md @@ -9,22 +9,24 @@ tags: - Difficulty-Expert --- -**Intent:** The Naked Objects architectural pattern is well suited for rapid +## Intent +The Naked Objects architectural pattern is well suited for rapid prototyping. Using the pattern, you only need to write the domain objects, everything else is autogenerated by the framework. ![alt text](./etc/naked-objects.png "Naked Objects") -**Applicability:** Use the Naked Objects pattern when +## Applicability +Use the Naked Objects pattern when * you are prototyping and need fast development cycle * an autogenerated user interface is good enough * you want to automatically publish the domain as REST services -**Real world examples:** +## Real world examples * [Apache Isis](https://isis.apache.org/) -**Credits:** +## Credits * [Richard Pawson - Naked Objects](http://downloads.nakedobjects.net/resources/Pawson%20thesis.pdf) diff --git a/null-object/index.md b/null-object/index.md index 6b659b5cc..b5fb279db 100644 --- a/null-object/index.md +++ b/null-object/index.md @@ -9,7 +9,8 @@ tags: - Difficulty-Beginner --- -**Intent:** In most object-oriented languages, such as Java or C#, references +## Intent +In most object-oriented languages, such as Java or C#, references may be null. These references need to be checked to ensure they are not null before invoking any methods, because methods typically cannot be invoked on null references. Instead of using a null reference to convey absence of an @@ -20,6 +21,7 @@ Object is very predictable and has no side effects: it does nothing. ![alt text](./etc/null-object.png "Null Object") -**Applicability:** Use the Null Object pattern when +## Applicability +Use the Null Object pattern when * you want to avoid explicit null checks and keep the algorithm elegant and easy to read. diff --git a/object-pool/index.md b/object-pool/index.md index 0d37041c3..cf36d9880 100644 --- a/object-pool/index.md +++ b/object-pool/index.md @@ -10,14 +10,16 @@ tags: - Performance --- -**Intent:** When objects are expensive to create and they are needed only for +## Intent +When objects are expensive to create and they are needed only for short periods of time it is advantageous to utilize the Object Pool pattern. The Object Pool provides a cache for instantiated objects tracking which ones are in use and which are available. ![alt text](./etc/object-pool.png "Object Pool") -**Applicability:** Use the Object Pool pattern when +## Applicability +Use the Object Pool pattern when * the objects are expensive to create (allocation cost) * you need a large number of short-lived objects (memory fragmentation) diff --git a/observer/index.md b/observer/index.md index ea1667ef5..7e83e899d 100644 --- a/observer/index.md +++ b/observer/index.md @@ -10,28 +10,31 @@ tags: - Gang Of Four --- -**Also known as:** Dependents, Publish-Subscribe +## Also known as +Dependents, Publish-Subscribe -**Intent:** Define a one-to-many dependency between objects so that when one +## Intent +Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. ![alt text](./etc/observer_1.png "Observer") -**Applicability:** Use the Observer pattern in any of the following situations +## Applicability +Use the Observer pattern in any of the following situations * when an abstraction has two aspects, one dependent on the other. Encapsulating these aspects in separate objects lets you vary and reuse them independently * when a change to one object requires changing others, and you don't know how many objects need to be changed * when an object should be able to notify other objects without making assumptions about who these objects are. In other words, you don't want these objects tightly coupled -**Typical Use Case:** +## Typical Use Case * changing in one object leads to a change in other objects -**Real world examples:** +## Real world examples * [java.util.Observer](http://docs.oracle.com/javase/8/docs/api/java/util/Observer.html) -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/poison-pill/index.md b/poison-pill/index.md index 90dff3c36..eb37c5ada 100644 --- a/poison-pill/index.md +++ b/poison-pill/index.md @@ -9,15 +9,17 @@ tags: - Difficulty-Intermediate --- -**Intent:** Poison Pill is known predefined data item that allows to provide +## Intent +Poison Pill is known predefined data item that allows to provide graceful shutdown for separate distributed consumption process. ![alt text](./etc/poison-pill.png "Poison Pill") -**Applicability:** Use the Poison Pill idiom when +## Applicability +Use the Poison Pill idiom when * need to send signal from one thread/process to another to terminate -**Real world examples:** +## Real world examples * [akka.actor.PoisonPill](http://doc.akka.io/docs/akka/2.1.4/java/untyped-actors.html) diff --git a/pom.xml b/pom.xml index 68208288d..772ef721c 100644 --- a/pom.xml +++ b/pom.xml @@ -11,18 +11,19 @@ UTF-8 5.0.1.Final - 4.1.7.RELEASE - 1.9.0.RELEASE - 1.4.188 + 4.2.4.RELEASE + 1.9.2.RELEASE + 1.4.190 4.12 3.0 4.0.0 0.7.2.201409121644 1.4 - 2.15.3 + 2.16.1 1.2.17 - 18.0 - 1.14.0 + 19.0 + 1.15.1 + 1.10.19 abstract-factory @@ -61,6 +62,7 @@ intercepting-filter producer-consumer poison-pill + reader-writer-lock lazy-loading service-layer specification @@ -145,7 +147,7 @@ org.mockito mockito-core - 1.10.19 + ${mockito.version} test diff --git a/private-class-data/index.md b/private-class-data/index.md index 4c09df0d0..981208fa3 100644 --- a/private-class-data/index.md +++ b/private-class-data/index.md @@ -10,12 +10,14 @@ tags: - Idiom --- -**Intent:** Private Class Data design pattern seeks to reduce exposure of +## Intent +Private Class Data design pattern seeks to reduce exposure of attributes by limiting their visibility. It reduces the number of class attributes by encapsulating them in single Data object. ![alt text](./etc/private-class-data.png "Private Class Data") -**Applicability:** Use the Private Class Data pattern when +## Applicability +Use the Private Class Data pattern when * you want to prevent write access to class data members diff --git a/producer-consumer/index.md b/producer-consumer/index.md index 124c98a2a..c666ab12e 100644 --- a/producer-consumer/index.md +++ b/producer-consumer/index.md @@ -10,13 +10,15 @@ tags: - I/O --- -**Intent:** Producer Consumer Design pattern is a classic concurrency pattern which reduces +## Intent +Producer Consumer Design pattern is a classic concurrency pattern which reduces coupling between Producer and Consumer by separating Identification of work with Execution of Work. ![alt text](./etc/producer-consumer.png "Producer Consumer") -**Applicability:** Use the Producer Consumer idiom when +## Applicability +Use the Producer Consumer idiom when * decouple system by separate work in two process produce and consume. * addresses the issue of different timing require to produce work or consuming work diff --git a/property/index.md b/property/index.md index 9949239c1..0ac5c7a6c 100644 --- a/property/index.md +++ b/property/index.md @@ -9,15 +9,17 @@ tags: - Difficulty-Beginner --- -**Intent:** Create hierarchy of objects and new objects using already existing +## Intent +Create hierarchy of objects and new objects using already existing objects as parents. ![alt text](./etc/property.png "Property") -**Applicability:** Use the Property pattern when +## Applicability +Use the Property pattern when * when you like to have objects with dynamic set of fields and prototype inheritance -**Real world examples:** +## Real world examples * [JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain) prototype inheritance diff --git a/prototype/index.md b/prototype/index.md index 457c2f46a..632daca93 100644 --- a/prototype/index.md +++ b/prototype/index.md @@ -10,21 +10,23 @@ tags: - Difficulty-Beginner --- -**Intent:** Specify the kinds of objects to create using a prototypical +## Intent +Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype. ![alt text](./etc/prototype_1.png "Prototype") -**Applicability:** Use the Prototype pattern when a system should be independent of how its products are created, composed and represented; and +## Applicability +Use the Prototype pattern when a system should be independent of how its products are created, composed and represented; and * when the classes to instantiate are specified at run-time, for example, by dynamic loading; or * to avoid building a class hierarchy of factories that parallels the class hierarchy of products; or * when instances of a class can have one of only a few different combinations of state. It may be more convenient to install a corresponding number of prototypes and clone them rather than instantiating the class manually, each time with the appropriate state -**Real world examples:** +## Real world examples * [java.lang.Object#clone()](http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone%28%29) -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/proxy/index.md b/proxy/index.md index 2f16527a8..a3e03708e 100644 --- a/proxy/index.md +++ b/proxy/index.md @@ -10,14 +10,17 @@ tags: - Difficulty-Beginner --- -**Also known as:** Surrogate +## Also known as +Surrogate -**Intent:** Provide a surrogate or placeholder for another object to control +## Intent +Provide a surrogate or placeholder for another object to control access to it. ![alt text](./etc/proxy_1.png "Proxy") -**Applicability:** Proxy is applicable whenever there is a need for a more +## Applicability +Proxy is applicable whenever there is a need for a more versatile or sophisticated reference to an object than a simple pointer. Here are several common situations in which the Proxy pattern is applicable @@ -25,7 +28,7 @@ are several common situations in which the Proxy pattern is applicable * a virtual proxy creates expensive objects on demand. * a protection proxy controls access to the original object. Protection proxies are useful when objects should have different access rights. -**Typical Use Case:** +## Typical Use Case * control access to another object * lazy initialization @@ -33,11 +36,11 @@ are several common situations in which the Proxy pattern is applicable * facilitate network connection * to count references to an object -**Real world examples:** +## Real world examples * [java.lang.reflect.Proxy](http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Proxy.html) * [Apache Commons Proxy](https://commons.apache.org/proper/commons-proxy/) -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/publish-subscribe/index.md b/publish-subscribe/index.md index cd1ad3971..bd83e37fb 100644 --- a/publish-subscribe/index.md +++ b/publish-subscribe/index.md @@ -7,13 +7,15 @@ categories: Integration tags: - Java - EIP - - Camel + - Apache Camel™ --- -**Intent:** Broadcast messages from sender to all the interested receivers. +## Intent +Broadcast messages from sender to all the interested receivers. ![alt text](./etc/publish-subscribe.png "Publish Subscribe Channel") -**Applicability:** Use the Publish Subscribe Channel pattern when +## Applicability +Use the Publish Subscribe Channel pattern when -* two or more applications need to communicate using a messaging system for broadcasts. +* two or more applications need to communicate using a messaging system for broadcasts. \ No newline at end of file diff --git a/reactor/index.md b/reactor/index.md index 9071413d8..b9ba98948 100644 --- a/reactor/index.md +++ b/reactor/index.md @@ -10,21 +10,23 @@ tags: - I/O --- -**Intent:** The Reactor design pattern handles service requests that are delivered concurrently to an application by one or more clients. The application can register specific handlers for processing which are called by reactor on specific events. Dispatching of event handlers is performed by an initiation dispatcher, which manages the registered event handlers. Demultiplexing of service requests is performed by a synchronous event demultiplexer. +## Intent +The Reactor design pattern handles service requests that are delivered concurrently to an application by one or more clients. The application can register specific handlers for processing which are called by reactor on specific events. Dispatching of event handlers is performed by an initiation dispatcher, which manages the registered event handlers. Demultiplexing of service requests is performed by a synchronous event demultiplexer. ![Reactor](./etc/reactor.png "Reactor") -**Applicability:** Use Reactor pattern when +## Applicability +Use Reactor pattern when * a server application needs to handle concurrent service requests from multiple clients. * a server application needs to be available for receiving requests from new clients even when handling older client requests. * a server must maximize throughput, minimize latency and use CPU efficiently without blocking. -**Real world examples:** +## Real world examples * [Spring Reactor](http://projectreactor.io/) -**Credits** +## Credits * [Douglas C. Schmidt - Reactor](https://www.dre.vanderbilt.edu/~schmidt/PDF/Reactor.pdf) * [Pattern Oriented Software Architecture Vol I-V](http://www.amazon.com/Pattern-Oriented-Software-Architecture-Volume-Patterns/dp/0471958697) diff --git a/reader-writer-lock/etc/reader-writer-lock.png b/reader-writer-lock/etc/reader-writer-lock.png new file mode 100644 index 0000000000000000000000000000000000000000..f7b6005309263d2dc8baf7505fd68091a580011b GIT binary patch literal 39623 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 literal 0 HcmV?d00001 diff --git a/reader-writer-lock/etc/reader-writer-lock.ucls b/reader-writer-lock/etc/reader-writer-lock.ucls new file mode 100644 index 000000000..920904e76 --- /dev/null +++ b/reader-writer-lock/etc/reader-writer-lock.ucls @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/reader-writer-lock/index.md b/reader-writer-lock/index.md new file mode 100644 index 000000000..91d16892c --- /dev/null +++ b/reader-writer-lock/index.md @@ -0,0 +1,29 @@ +--- +layout: pattern +title: Reader Writer Lock +folder: reader-writer-lock +permalink: /patterns/reader-writer-lock/ +categories: Concurrent +tags: +- Java +--- + +**Intent:** + +Suppose we have a shared memory area with the basic constraints detailed above. It is possible to protect the shared data behind a mutual exclusion mutex, in which case no two threads can access the data at the same time. However, this solution is suboptimal, because it is possible that a reader R1 might have the lock, and then another reader R2 requests access. It would be foolish for R2 to wait until R1 was done before starting its own read operation; instead, R2 should start right away. This is the motivation for the Reader Writer Lock pattern. + +![alt text](./etc/reader-writer-lock.png "Reader writer lock") + +**Applicability:** + +Application need to increase the performance of resource synchronize for multiple thread, in particularly there are mixed read/write operations. + +**Real world examples:** + +* [Java Reader Writer Lock](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReadWriteLock.html) + +**Credits** + +* [Readers–writer lock](https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock) + +* [Readers–writers_problem](https://en.wikipedia.org/wiki/Readers%E2%80%93writers_problem) \ No newline at end of file diff --git a/reader-writer-lock/pom.xml b/reader-writer-lock/pom.xml new file mode 100644 index 000000000..14b17011d --- /dev/null +++ b/reader-writer-lock/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.10.0-SNAPSHOT + + reader-writer-lock + + + junit + junit + test + + + org.mockito + mockito-core + test + + + + diff --git a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/App.java b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/App.java new file mode 100644 index 000000000..b11b11be7 --- /dev/null +++ b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/App.java @@ -0,0 +1,56 @@ +package com.iluwatar.reader.writer.lock; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.stream.IntStream; + +/** + * + * In a multiple thread applications, the threads may try to synchronize the shared resources + * regardless of read or write operation. It leads to a low performance especially in a "read more + * write less" system as indeed the read operations are thread-safe to another read operation. + *

+ * Reader writer lock is a synchronization primitive that try to resolve this problem. This pattern + * allows concurrent access for read-only operations, while write operations require exclusive + * access. This means that multiple threads can read the data in parallel but an exclusive lock is + * needed for writing or modifying data. When a writer is writing the data, all other writers or + * readers will be blocked until the writer is finished writing. + * + *

+ * This example use two mutex to demonstrate the concurrent access of multiple readers and writers. + * + * + * @author hongshuwei@gmail.com + */ +public class App { + + /** + * Program entry point + * + * @param args command line args + */ + public static void main(String[] args) { + + ExecutorService executeService = Executors.newFixedThreadPool(10); + ReaderWriterLock lock = new ReaderWriterLock(); + + // Start 5 readers + IntStream.range(0, 5) + .forEach(i -> executeService.submit(new Reader("Reader " + i, lock.readLock()))); + + // Start 5 writers + IntStream.range(0, 5) + .forEach(i -> executeService.submit(new Writer("Writer " + i, lock.writeLock()))); + // In the system console, it can see that the read operations are executed concurrently while + // write operations are exclusive. + executeService.shutdown(); + try { + executeService.awaitTermination(5, TimeUnit.SECONDS); + } catch (InterruptedException e) { + System.out.println("Error waiting for ExecutorService shutdown"); + } + + } + +} diff --git a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Reader.java b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Reader.java new file mode 100644 index 000000000..214528080 --- /dev/null +++ b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Reader.java @@ -0,0 +1,40 @@ +package com.iluwatar.reader.writer.lock; + +import java.util.concurrent.locks.Lock; + +/** + * Reader class, read when it acquired the read lock + */ +public class Reader implements Runnable { + + private Lock readLock; + + private String name; + + public Reader(String name, Lock readLock) { + this.name = name; + this.readLock = readLock; + } + + @Override + public void run() { + readLock.lock(); + try { + read(); + } catch (InterruptedException e) { + e.printStackTrace(); + } finally { + readLock.unlock(); + } + } + + /** + * Simulate the read operation + * + */ + public void read() throws InterruptedException { + System.out.println(name + " begin"); + Thread.sleep(250); + System.out.println(name + " finish"); + } +} diff --git a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java new file mode 100644 index 000000000..b7edd149c --- /dev/null +++ b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java @@ -0,0 +1,211 @@ +package com.iluwatar.reader.writer.lock; + +import java.util.HashSet; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.Condition; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReadWriteLock; + +/** + * Class responsible for control the access for reader or writer + * + * Allows multiple readers to hold the lock at same time, but if any writer holds the lock then + * readers wait. If reader holds the lock then writer waits. This lock is not fair. + */ +public class ReaderWriterLock implements ReadWriteLock { + + + private Object readerMutex = new Object(); + + private int currentReaderCount = 0; + + /** + * Global mutex is used to indicate that whether reader or writer gets the lock in the moment. + *

+ * 1. When it contains the reference of {@link readerLock}, it means that the lock is acquired by + * the reader, another reader can also do the read operation concurrently.
+ * 2. When it contains the reference of reference of {@link writerLock}, it means that the lock is + * acquired by the writer exclusively, no more reader or writer can get the lock. + *

+ * This is the most important field in this class to control the access for reader/writer. + */ + private Set globalMutex = new HashSet<>(); + + private ReadLock readerLock = new ReadLock(); + private WriteLock writerLock = new WriteLock(); + + @Override + public Lock readLock() { + return readerLock; + } + + @Override + public Lock writeLock() { + return writerLock; + } + + /** + * return true when globalMutex hold the reference of writerLock + */ + private boolean doesWriterOwnThisLock() { + return globalMutex.contains(writerLock); + } + + /** + * return true when globalMutex hold the reference of readerLock + */ + private boolean doesReaderOwnThisLock() { + return globalMutex.contains(readerLock); + } + + /** + * Nobody get the lock when globalMutex contains nothing + * + */ + private boolean isLockFree() { + return globalMutex.isEmpty(); + } + + private void waitUninterruptibly(Object o) { + try { + o.wait(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + /** + * Reader Lock, can be access for more than one reader concurrently if no writer get the lock + */ + private class ReadLock implements Lock { + + @Override + public void lock() { + + synchronized (readerMutex) { + + currentReaderCount++; + if (currentReaderCount == 1) { + // Try to get the globalMutex lock for the first reader + synchronized (globalMutex) { + while (true) { + // If the no one get the lock or the lock is locked by reader, just set the reference + // to the globalMutex to indicate that the lock is locked by Reader. + if (isLockFree() || doesReaderOwnThisLock()) { + globalMutex.add(this); + break; + } else { + // If lock is acquired by the write, let the thread wait until the writer release + // the lock + waitUninterruptibly(globalMutex); + } + } + } + + } + } + } + + @Override + public void unlock() { + + synchronized (readerMutex) { + currentReaderCount--; + // Release the lock only when it is the last reader, it is ensure that the lock is released + // when all reader is completely. + if (currentReaderCount == 0) { + synchronized (globalMutex) { + // Notify the waiter, mostly the writer + globalMutex.remove(this); + globalMutex.notifyAll(); + } + } + } + + } + + @Override + public void lockInterruptibly() throws InterruptedException { + throw new UnsupportedOperationException(); + } + + @Override + public boolean tryLock() { + throw new UnsupportedOperationException(); + } + + @Override + public boolean tryLock(long time, TimeUnit unit) throws InterruptedException { + throw new UnsupportedOperationException(); + } + + @Override + public Condition newCondition() { + throw new UnsupportedOperationException(); + } + + } + + /** + * Writer Lock, can only be accessed by one writer concurrently + */ + private class WriteLock implements Lock { + + @Override + public void lock() { + + synchronized (globalMutex) { + + while (true) { + // When there is no one acquired the lock, just put the writeLock reference to the + // globalMutex to indicate that the lock is acquired by one writer. + // It is ensure that writer can only get the lock when no reader/writer acquired the lock. + if (isLockFree()) { + globalMutex.add(this); + break; + } else if (doesWriterOwnThisLock()) { + // Wait when other writer get the lock + waitUninterruptibly(globalMutex); + } else if (doesReaderOwnThisLock()) { + // Wait when other reader get the lock + waitUninterruptibly(globalMutex); + } else { + throw new AssertionError("it should never reach here"); + } + } + } + } + + @Override + public void unlock() { + + synchronized (globalMutex) { + globalMutex.remove(this); + // Notify the waiter, other writer or reader + globalMutex.notifyAll(); + } + } + + @Override + public void lockInterruptibly() throws InterruptedException { + throw new UnsupportedOperationException(); + } + + @Override + public boolean tryLock() { + throw new UnsupportedOperationException(); + } + + @Override + public boolean tryLock(long time, TimeUnit unit) throws InterruptedException { + throw new UnsupportedOperationException(); + } + + @Override + public Condition newCondition() { + throw new UnsupportedOperationException(); + } + } + +} diff --git a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Writer.java b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Writer.java new file mode 100644 index 000000000..ae7b17080 --- /dev/null +++ b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Writer.java @@ -0,0 +1,40 @@ +package com.iluwatar.reader.writer.lock; + +import java.util.concurrent.locks.Lock; + +/** + * Writer class, write when it acquired the write lock + */ +public class Writer implements Runnable { + + private Lock writeLock = null; + + private String name; + + public Writer(String name, Lock writeLock) { + this.name = name; + this.writeLock = writeLock; + } + + + @Override + public void run() { + writeLock.lock(); + try { + write(); + } catch (InterruptedException e) { + e.printStackTrace(); + } finally { + writeLock.unlock(); + } + } + + /** + * Simulate the write operation + */ + public void write() throws InterruptedException { + System.out.println(name + " begin"); + Thread.sleep(250); + System.out.println(name + " finish"); + } +} diff --git a/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/AppTest.java b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/AppTest.java new file mode 100644 index 000000000..5dd6feaab --- /dev/null +++ b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/AppTest.java @@ -0,0 +1,16 @@ +package com.iluwatar.reader.writer.lock; + +import org.junit.Test; + +/** + * Application test + */ +public class AppTest { + + @Test + public void test() throws Exception { + String[] args = {}; + App.main(args); + + } +} diff --git a/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderAndWriterTest.java b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderAndWriterTest.java new file mode 100644 index 000000000..e29f57889 --- /dev/null +++ b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderAndWriterTest.java @@ -0,0 +1,81 @@ +package com.iluwatar.reader.writer.lock; + +import static org.mockito.Mockito.inOrder; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +import org.junit.Test; +import org.mockito.InOrder; + +/** + * @author hongshuwei@gmail.com + */ +public class ReaderAndWriterTest extends StdOutTest { + + + + /** + * Verify reader and writer can only get the lock to read and write orderly + */ + @Test + public void testReadAndWrite() throws Exception { + + ReaderWriterLock lock = new ReaderWriterLock(); + + Reader reader1 = new Reader("Reader 1", lock.readLock()); + Writer writer1 = new Writer("Writer 1", lock.writeLock()); + + ExecutorService executeService = Executors.newFixedThreadPool(2); + executeService.submit(reader1); + // Let reader1 execute first + Thread.sleep(150); + executeService.submit(writer1); + + executeService.shutdown(); + try { + executeService.awaitTermination(10, TimeUnit.SECONDS); + } catch (InterruptedException e) { + System.out.println("Error waiting for ExecutorService shutdown"); + } + + final InOrder inOrder = inOrder(getStdOutMock()); + inOrder.verify(getStdOutMock()).println("Reader 1 begin"); + inOrder.verify(getStdOutMock()).println("Reader 1 finish"); + inOrder.verify(getStdOutMock()).println("Writer 1 begin"); + inOrder.verify(getStdOutMock()).println("Writer 1 finish"); + } + + /** + * Verify reader and writer can only get the lock to read and write orderly + */ + @Test + public void testWriteAndRead() throws Exception { + + ExecutorService executeService = Executors.newFixedThreadPool(2); + ReaderWriterLock lock = new ReaderWriterLock(); + + Reader reader1 = new Reader("Reader 1", lock.readLock()); + Writer writer1 = new Writer("Writer 1", lock.writeLock()); + + executeService.submit(writer1); + // Let writer1 execute first + Thread.sleep(150); + executeService.submit(reader1); + + executeService.shutdown(); + try { + executeService.awaitTermination(10, TimeUnit.SECONDS); + } catch (InterruptedException e) { + System.out.println("Error waiting for ExecutorService shutdown"); + } + + final InOrder inOrder = inOrder(getStdOutMock()); + inOrder.verify(getStdOutMock()).println("Writer 1 begin"); + inOrder.verify(getStdOutMock()).println("Writer 1 finish"); + inOrder.verify(getStdOutMock()).println("Reader 1 begin"); + inOrder.verify(getStdOutMock()).println("Reader 1 finish"); + } +} + diff --git a/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderTest.java b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderTest.java new file mode 100644 index 000000000..e76fe29c2 --- /dev/null +++ b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderTest.java @@ -0,0 +1,50 @@ +package com.iluwatar.reader.writer.lock; + +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.spy; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +import org.junit.Test; +import org.mockito.InOrder; + +/** + * @author hongshuwei@gmail.com + */ +public class ReaderTest extends StdOutTest { + + /** + * Verify that multiple readers can get the read lock concurrently + */ + @Test + public void testRead() throws Exception { + + ExecutorService executeService = Executors.newFixedThreadPool(2); + ReaderWriterLock lock = new ReaderWriterLock(); + + Reader reader1 = spy(new Reader("Reader 1", lock.readLock())); + Reader reader2 = spy(new Reader("Reader 2", lock.readLock())); + + executeService.submit(reader1); + Thread.sleep(150); + executeService.submit(reader2); + + executeService.shutdown(); + try { + executeService.awaitTermination(10, TimeUnit.SECONDS); + } catch (InterruptedException e) { + System.out.println("Error waiting for ExecutorService shutdown"); + } + + // Read operation will hold the read lock 250 milliseconds, so here we prove that multiple reads + // can be performed in the same time. + final InOrder inOrder = inOrder(getStdOutMock()); + inOrder.verify(getStdOutMock()).println("Reader 1 begin"); + inOrder.verify(getStdOutMock()).println("Reader 2 begin"); + inOrder.verify(getStdOutMock()).println("Reader 1 finish"); + inOrder.verify(getStdOutMock()).println("Reader 2 finish"); + + } +} diff --git a/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/StdOutTest.java b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/StdOutTest.java new file mode 100644 index 000000000..762574b66 --- /dev/null +++ b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/StdOutTest.java @@ -0,0 +1,53 @@ +package com.iluwatar.reader.writer.lock; + +import org.junit.After; +import org.junit.Before; + +import java.io.PrintStream; + +import static org.mockito.Mockito.mock; + +/** + * Date: 12/10/15 - 8:37 PM + * + * @author Jeroen Meulemeester + */ +public abstract class StdOutTest { + + /** + * The mocked standard out {@link PrintStream}, required since some actions don't have any + * influence on accessible objects, except for writing to std-out using {@link System#out} + */ + private final PrintStream stdOutMock = mock(PrintStream.class); + + /** + * Keep the original std-out so it can be restored after the test + */ + private final PrintStream stdOutOrig = System.out; + + /** + * Inject the mocked std-out {@link PrintStream} into the {@link System} class before each test + */ + @Before + public void setUp() { + System.setOut(this.stdOutMock); + } + + /** + * Removed the mocked std-out {@link PrintStream} again from the {@link System} class + */ + @After + public void tearDown() { + System.setOut(this.stdOutOrig); + } + + /** + * Get the mocked stdOut {@link PrintStream} + * + * @return The stdOut print stream mock, renewed before each test + */ + final PrintStream getStdOutMock() { + return this.stdOutMock; + } + +} diff --git a/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/WriterTest.java b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/WriterTest.java new file mode 100644 index 000000000..ed37bf3e5 --- /dev/null +++ b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/WriterTest.java @@ -0,0 +1,50 @@ +package com.iluwatar.reader.writer.lock; + +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.spy; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +import org.junit.Test; +import org.mockito.InOrder; + +/** + * @author hongshuwei@gmail.com + */ +public class WriterTest extends StdOutTest { + + /** + * Verify that multiple writers will get the lock in order. + */ + @Test + public void testWrite() throws Exception { + + ExecutorService executeService = Executors.newFixedThreadPool(2); + ReaderWriterLock lock = new ReaderWriterLock(); + + Writer writer1 = spy(new Writer("Writer 1", lock.writeLock())); + Writer writer2 = spy(new Writer("Writer 2", lock.writeLock())); + + executeService.submit(writer1); + // Let write1 execute first + Thread.sleep(150); + executeService.submit(writer2); + + executeService.shutdown(); + try { + executeService.awaitTermination(10, TimeUnit.SECONDS); + } catch (InterruptedException e) { + System.out.println("Error waiting for ExecutorService shutdown"); + } + // Write operation will hold the write lock 250 milliseconds, so here we verify that when two + // writer execute concurrently, the second writer can only writes only when the first one is + // finished. + final InOrder inOrder = inOrder(getStdOutMock()); + inOrder.verify(getStdOutMock()).println("Writer 1 begin"); + inOrder.verify(getStdOutMock()).println("Writer 1 finish"); + inOrder.verify(getStdOutMock()).println("Writer 2 begin"); + inOrder.verify(getStdOutMock()).println("Writer 2 finish"); + } +} diff --git a/repository/index.md b/repository/index.md index 697c708f9..67b3ea44e 100644 --- a/repository/index.md +++ b/repository/index.md @@ -10,7 +10,8 @@ tags: - Spring --- -**Intent:** Repository layer is added between the domain and data mapping +## Intent +Repository layer is added between the domain and data mapping layers to isolate domain objects from details of the database access code and to minimize scattering and duplication of query code. The Repository pattern is especially useful in systems where number of domain classes is large or heavy @@ -18,19 +19,19 @@ querying is utilized. ![alt text](./etc/repository.png "Repository") -**Applicability:** Use the Repository pattern when +## Applicability +Use the Repository pattern when * the number of domain objects is large * you want to avoid duplication of query code * you want to keep the database querying code in single place * you have multiple data sources -**Real world examples:** +## Real world examples * [Spring Data](http://projects.spring.io/spring-data/) -**Credits:** +## Credits * [Don’t use DAO, use Repository](http://thinkinginobjects.com/2012/08/26/dont-use-dao-use-repository/) * [Advanced Spring Data JPA - Specifications and Querydsl](https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/) - diff --git a/resource-acquisition-is-initialization/index.md b/resource-acquisition-is-initialization/index.md index e808783fb..821f220d7 100644 --- a/resource-acquisition-is-initialization/index.md +++ b/resource-acquisition-is-initialization/index.md @@ -10,10 +10,12 @@ tags: - Idiom --- -**Intent:** Resource Acquisition Is Initialization pattern can be used to implement exception safe resource management. +## Intent +Resource Acquisition Is Initialization pattern can be used to implement exception safe resource management. ![alt text](./etc/resource-acquisition-is-initialization.png "Resource Acquisition Is Initialization") -**Applicability:** Use the Resource Acquisition Is Initialization pattern when +## Applicability +Use the Resource Acquisition Is Initialization pattern when * you have resources that must be closed in every condition diff --git a/servant/index.md b/servant/index.md index 9cf20a53e..895b87502 100644 --- a/servant/index.md +++ b/servant/index.md @@ -9,12 +9,14 @@ tags: - Difficulty-Beginner --- -**Intent:** Servant is used for providing some behavior to a group of classes. +## Intent +Servant is used for providing some behavior to a group of classes. Instead of defining that behavior in each class - or when we cannot factor out this behavior in the common parent class - it is defined once in the Servant. ![alt text](./etc/servant-pattern.png "Servant") -**Applicability:** Use the Servant pattern when +## Applicability +Use the Servant pattern when * when we want some objects to perform a common action and don't want to define this action as a method in every class. diff --git a/service-layer/index.md b/service-layer/index.md index 68f4f6130..9b685d4e3 100644 --- a/service-layer/index.md +++ b/service-layer/index.md @@ -9,7 +9,8 @@ tags: - Difficulty-Intermediate --- -**Intent:** Service Layer is an abstraction over domain logic. Typically +## Intent +Service Layer is an abstraction over domain logic. Typically applications require multiple kinds of interfaces to the data they store and logic they implement: data loaders, user interfaces, integration gateways, and others. Despite their different purposes, these interfaces often need common @@ -18,12 +19,13 @@ its business logic. The Service Layer fulfills this role. ![alt text](./etc/service-layer.png "Service Layer") -**Applicability:** Use the Service Layer pattern when +## Applicability +Use the Service Layer pattern when * you want to encapsulate domain logic under API * you need to implement multiple interfaces with common logic and data -**Credits:** +## Credits * [Martin Fowler - Service Layer](http://martinfowler.com/eaaCatalog/serviceLayer.html) * [Patterns of Enterprise Application Architecture](http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420) diff --git a/service-locator/index.md b/service-locator/index.md index 7357a0ac0..af4d8c3ac 100644 --- a/service-locator/index.md +++ b/service-locator/index.md @@ -10,12 +10,14 @@ tags: - Performance --- -**Intent:** Encapsulate the processes involved in obtaining a service with a +## Intent +Encapsulate the processes involved in obtaining a service with a strong abstraction layer. ![alt text](./etc/service-locator.png "Service Locator") -**Applicability:** The service locator pattern is applicable whenever we want +## Applicability +The service locator pattern is applicable whenever we want to locate/fetch various services using JNDI which, typically, is a redundant and expensive lookup. The service Locator pattern addresses this expensive lookup by making use of caching techniques ie. for the very first time a @@ -24,12 +26,12 @@ the relevant service and then finally caches this service object. Now, further lookups of the same service via Service Locator is done in its cache which improves the performance of application to great extent. -**Typical Use Case:** +## Typical Use Case * when network hits are expensive and time consuming * lookups of services are done quite frequently * large number of services are being used -**Credits:** +## Credits * [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) diff --git a/singleton/index.md b/singleton/index.md index 18c137448..dcbd63902 100644 --- a/singleton/index.md +++ b/singleton/index.md @@ -10,26 +10,28 @@ tags: - Difficulty-Beginner --- -**Intent:** Ensure a class only has one instance, and provide a global point of +## Intent +Ensure a class only has one instance, and provide a global point of access to it. ![alt text](./etc/singleton_1.png "Singleton") -**Applicability:** Use the Singleton pattern when +## Applicability +Use the Singleton pattern when * there must be exactly one instance of a class, and it must be accessible to clients from a well-known access point * when the sole instance should be extensible by subclassing, and clients should be able to use an extended instance without modifying their code -**Typical Use Case:** +## Typical Use Case * the logging class * managing a connection to a database * file manager -**Real world examples:** +## Real world examples * [java.lang.Runtime#getRuntime()](http://docs.oracle.com/javase/8/docs/api/java/lang/Runtime.html#getRuntime%28%29) -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/specification/index.md b/specification/index.md index f95c7921a..df6a4c3eb 100644 --- a/specification/index.md +++ b/specification/index.md @@ -9,18 +9,20 @@ tags: - Difficulty-Beginner --- -**Intent:** Specification pattern separates the statement of how to match a +## Intent +Specification pattern separates the statement of how to match a candidate, from the candidate object that it is matched against. As well as its usefulness in selection, it is also valuable for validation and for building to order ![alt text](./etc/specification.png "Specification") -**Applicability:** Use the Specification pattern when +## Applicability +Use the Specification pattern when * you need to select a subset of objects based on some criteria, and to refresh the selection at various times * you need to check that only suitable objects are used for a certain role (validation) -**Credits:** +## Credits * [Martin Fowler - Specifications](http://martinfowler.com/apsupp/spec.pdf) diff --git a/state/index.md b/state/index.md index 3beeb480a..f5cb189fd 100644 --- a/state/index.md +++ b/state/index.md @@ -10,18 +10,21 @@ tags: - Gang Of Four --- -**Also known as:** Objects for States +## Also known as +Objects for States -**Intent:** Allow an object to alter its behavior when its internal state +## Intent +Allow an object to alter its behavior when its internal state changes. The object will appear to change its class. ![alt text](./etc/state_1.png "State") -**Applicability:** Use the State pattern in either of the following cases +## Applicability +Use the State pattern in either of the following cases * an object's behavior depends on its state, and it must change its behavior at run-time depending on that state * operations have large, multipart conditional statements that depend on the object's state. This state is usually represented by one or more enumerated constants. Often, several operations will contain this same conditional structure. The State pattern puts each branch of the conditional in a separate class. This lets you treat the object's state as an object in its own right that can vary independently from other objects. -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/step-builder/index.md b/step-builder/index.md index 7ca93c276..bc636e37a 100644 --- a/step-builder/index.md +++ b/step-builder/index.md @@ -9,13 +9,15 @@ tags: - Difficulty-Intermediate --- -**Intent:** An extension of the Builder pattern that fully guides the user through the creation of the object with no chances of confusion. +## Intent +An extension of the Builder pattern that fully guides the user through the creation of the object with no chances of confusion. The user experience will be much more improved by the fact that he will only see the next step methods available, NO build method until is the right time to build the object. ![alt text](./etc/step-builder.png "Step Builder") -**Applicability:** Use the Step Builder pattern when the algorithm for creating a complex object should be independent of the parts that make up the object and how they're assembled the construction process must allow different representations for the object that's constructed when in the process of constructing the order is important. +## Applicability +Use the Step Builder pattern when the algorithm for creating a complex object should be independent of the parts that make up the object and how they're assembled the construction process must allow different representations for the object that's constructed when in the process of constructing the order is important. -**Credits:** +## Credits * [Marco Castigliego - Step Builder](http://rdafbn.blogspot.co.uk/2012/07/step-builder-pattern_28.html) diff --git a/strategy/index.md b/strategy/index.md index 288276015..9b35b806d 100644 --- a/strategy/index.md +++ b/strategy/index.md @@ -10,21 +10,24 @@ tags: - Gang Of Four --- -**Also known as:** Policy +## Also known as +Policy -**Intent:** Define a family of algorithms, encapsulate each one, and make them +## Intent +Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it. ![alt text](./etc/strategy_1.png "Strategy") -**Applicability:** Use the Strategy pattern when +## Applicability +Use the Strategy pattern when * many related classes differ only in their behavior. Strategies provide a way to configure a class either one of many behaviors * you need different variants of an algorithm. for example, you might define algorithms reflecting different space/time trade-offs. Strategies can be used when these variants are implemented as a class hierarchy of algorithms * an algorithm uses data that clients shouldn't know about. Use the Strategy pattern to avoid exposing complex, algorithm-specific data structures * a class defines many behaviors, and these appear as multiple conditional statements in its operations. Instead of many conditionals, move related conditional branches into their own Strategy class -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/template-method/index.md b/template-method/index.md index 8b8b7878e..ad972f06b 100644 --- a/template-method/index.md +++ b/template-method/index.md @@ -10,18 +10,20 @@ tags: - Gang Of Four --- -**Intent:** Define the skeleton of an algorithm in an operation, deferring some +## Intent +Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure. ![alt text](./etc/template-method_1.png "Template Method") -**Applicability:** The Template Method pattern should be used +## Applicability +The Template Method pattern should be used * to implement the invariant parts of an algorithm once and leave it up to subclasses to implement the behavior that can vary * when common behavior among subclasses should be factored and localized in a common class to avoid code duplication. This is good example of "refactoring to generalize" as described by Opdyke and Johnson. You first identify the differences in the existing code and then separate the differences into new operations. Finally, you replace the differing code with a template method that calls one of these new operations * to control subclasses extensions. You can define a template method that calls "hook" operations at specific points, thereby permitting extensions only at those points -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) diff --git a/thread-pool/index.md b/thread-pool/index.md index d4b61607d..9806fa8e0 100644 --- a/thread-pool/index.md +++ b/thread-pool/index.md @@ -10,7 +10,8 @@ tags: - Performance --- -**Intent:** It is often the case that tasks to be executed are short-lived and +## Intent +It is often the case that tasks to be executed are short-lived and the number of tasks is large. Creating a new thread for each task would make the system spend more time creating and destroying the threads than executing the actual tasks. Thread Pool solves this problem by reusing existing threads @@ -18,6 +19,7 @@ and eliminating the latency of creating new threads. ![alt text](./etc/thread-pool.png "Thread Pool") -**Applicability:** Use the Thread Pool pattern when +## Applicability +Use the Thread Pool pattern when * you have a large number of short-lived tasks to be executed in parallel diff --git a/tolerant-reader/index.md b/tolerant-reader/index.md index 895886f77..be0085f2c 100644 --- a/tolerant-reader/index.md +++ b/tolerant-reader/index.md @@ -9,17 +9,19 @@ tags: - Difficulty-Beginner --- -**Intent:** Tolerant Reader is an integration pattern that helps creating +## Intent +Tolerant Reader is an integration pattern that helps creating robust communication systems. The idea is to be as tolerant as possible when reading data from another service. This way, when the communication schema changes, the readers must not break. ![alt text](./etc/tolerant-reader.png "Tolerant Reader") -**Applicability:** Use the Tolerant Reader pattern when +## Applicability +Use the Tolerant Reader pattern when * the communication schema can evolve and change and yet the receiving side should not break -**Credits:** +## Credits * [Martin Fowler - Tolerant Reader](http://martinfowler.com/bliki/TolerantReader.html) diff --git a/twin/index.md b/twin/index.md index e0e449047..3795236bb 100644 --- a/twin/index.md +++ b/twin/index.md @@ -9,16 +9,18 @@ tags: - Difficulty-Intermediate --- -**Intent:** Twin pattern is a design pattern which provides a standard solution to simulate multiple +## Intent + Twin pattern is a design pattern which provides a standard solution to simulate multiple inheritance in java ![alt text](./etc/twin.png "Twin") -**Applicability:** Use the Twin idiom when +## Applicability +Use the Twin idiom when * to simulate multiple inheritance in a language that does not support this feature. * to avoid certain problems of multiple inheritance such as name clashes. -**Credits:** +## Credits * [Twin – A Design Pattern for Modeling Multiple Inheritance](http://www.ssw.uni-linz.ac.at/Research/Papers/Moe99/Paper.pdf) diff --git a/visitor/index.md b/visitor/index.md index 760f2c705..c1e24a624 100644 --- a/visitor/index.md +++ b/visitor/index.md @@ -10,22 +10,24 @@ tags: - Gang Of Four --- -**Intent:** Represent an operation to be performed on the elements of an object +## Intent +Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates. ![alt text](./etc/visitor_1.png "Visitor") -**Applicability:** Use the Visitor pattern when +## Applicability +Use the Visitor pattern when * an object structure contains many classes of objects with differing interfaces, and you want to perform operations on these objects that depend on their concrete classes * many distinct and unrelated operations need to be performed on objects in an object structure, and you want to avoid "polluting" their classes with these operations. Visitor lets you keep related operations together by defining them in one class. When the object structure is shared by many applications, use Visitor to put operations in just those applications that need them * the classes defining the object structure rarely change, but you often want to define new operations over the structure. Changing the object structure classes requires redefining the interface to all visitors, which is potentially costly. If the object structure classes change often, then it's probably better to define the operations in those classes -**Real world examples:** +## Real world examples * [Apache Wicket](https://github.com/apache/wicket) component tree, see [MarkupContainer](https://github.com/apache/wicket/blob/b60ec64d0b50a611a9549809c9ab216f0ffa3ae3/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java) -**Credits** +## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) From 89e0e3e73e55d8bcab5154e196cd66c2013393ae Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Mon, 25 Jan 2016 21:16:35 +0000 Subject: [PATCH 006/123] #354 Remove generated copyright banner --- feature-toggle/pom.xml | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/feature-toggle/pom.xml b/feature-toggle/pom.xml index 98c140f37..249d999a1 100644 --- a/feature-toggle/pom.xml +++ b/feature-toggle/pom.xml @@ -1,27 +1,4 @@ - Date: Mon, 25 Jan 2016 21:29:05 +0000 Subject: [PATCH 007/123] #354 Add Blank index.md --- feature-toggle/index.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 feature-toggle/index.md diff --git a/feature-toggle/index.md b/feature-toggle/index.md new file mode 100644 index 000000000..e69de29bb From d00bfae5ee6da9c97a6a3489facd509243d103e7 Mon Sep 17 00:00:00 2001 From: Mohammed Ezzat Date: Tue, 26 Jan 2016 19:55:32 +0200 Subject: [PATCH 008/123] pmd:ConsecutiveAppendsShouldReuse - Consecutive Appends Should Reuse --- .../main/java/com/iluwatar/builder/Hero.java | 20 ++++++++----------- .../java/com/iluwatar/dao/CustomerTest.java | 12 +++++------ .../com/iluwatar/stepbuilder/Character.java | 16 +++++++-------- 3 files changed, 22 insertions(+), 26 deletions(-) diff --git a/builder/src/main/java/com/iluwatar/builder/Hero.java b/builder/src/main/java/com/iluwatar/builder/Hero.java index cf7289d51..ef56c86d5 100644 --- a/builder/src/main/java/com/iluwatar/builder/Hero.java +++ b/builder/src/main/java/com/iluwatar/builder/Hero.java @@ -42,29 +42,25 @@ public class Hero { public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("This is a "); - sb.append(profession); - sb.append(" named "); - sb.append(name); + sb.append("This is a ") + .append(profession) + .append(" named ") + .append(name); if (hairColor != null || hairType != null) { sb.append(" with "); if (hairColor != null) { - sb.append(hairColor); - sb.append(" "); + sb.append(hairColor).append(" "); } if (hairType != null) { - sb.append(hairType); - sb.append(" "); + sb.append(hairType).append(" "); } sb.append(hairType != HairType.BALD ? "hair" : "head"); } if (armor != null) { - sb.append(" wearing "); - sb.append(armor); + sb.append(" wearing ").append(armor); } if (weapon != null) { - sb.append(" and wielding a "); - sb.append(weapon); + sb.append(" and wielding a ").append(weapon); } sb.append("."); return sb.toString(); diff --git a/dao/src/test/java/com/iluwatar/dao/CustomerTest.java b/dao/src/test/java/com/iluwatar/dao/CustomerTest.java index 8511a577b..7d988e855 100644 --- a/dao/src/test/java/com/iluwatar/dao/CustomerTest.java +++ b/dao/src/test/java/com/iluwatar/dao/CustomerTest.java @@ -63,12 +63,12 @@ public class CustomerTest { @Test public void testToString() { final StringBuffer buffer = new StringBuffer(); - buffer.append("Customer{id="); - buffer.append("" + customer.getId()); - buffer.append(", firstName='"); - buffer.append(customer.getFirstName()); - buffer.append("\', lastName='"); - buffer.append(customer.getLastName() + "\'}"); + buffer.append("Customer{id=") + .append("" + customer.getId()) + .append(", firstName='") + .append(customer.getFirstName()) + .append("\', lastName='") + .append(customer.getLastName() + "\'}"); assertEquals(buffer.toString(), customer.toString()); } } diff --git a/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java b/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java index e29b85019..259ce22e7 100644 --- a/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java +++ b/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java @@ -69,14 +69,14 @@ public class Character { @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("This is a "); - sb.append(fighterClass != null ? fighterClass : wizardClass); - sb.append(" named "); - sb.append(name); - sb.append(" armed with a "); - sb.append(weapon != null ? weapon : spell != null ? spell : "with nothing"); - sb.append(abilities != null ? (" and wielding " + abilities + " abilities") : ""); - sb.append("."); + sb.append("This is a ") + .append(fighterClass != null ? fighterClass : wizardClass) + .append(" named ") + .append(name) + .append(" armed with a ") + .append(weapon != null ? weapon : spell != null ? spell : "with nothing") + .append(abilities != null ? (" and wielding " + abilities + " abilities") : "") + .append("."); return sb.toString(); } } From 72733acfc67055300a3ebf5352d2467ca8c4ad19 Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Tue, 26 Jan 2016 18:41:08 +0000 Subject: [PATCH 009/123] #354 added usergroup for version of feature toggle --- feature-toggle/pom.xml | 8 ++++ .../com/iluwatar/featuretoggle/user/User.java | 7 ++++ .../featuretoggle/user/UserGroup.java | 37 +++++++++++++++++++ .../featuretoggle/user/UserGroupTest.java | 37 +++++++++++++++++++ 4 files changed, 89 insertions(+) create mode 100644 feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java create mode 100644 feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java create mode 100644 feature-toggle/src/main/test/com/iluwatar/featuretoggle/user/UserGroupTest.java diff --git a/feature-toggle/pom.xml b/feature-toggle/pom.xml index 249d999a1..9a2b04de3 100644 --- a/feature-toggle/pom.xml +++ b/feature-toggle/pom.xml @@ -13,4 +13,12 @@ feature-toggle + + + junit + junit + test + + + \ No newline at end of file diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java new file mode 100644 index 000000000..f25747997 --- /dev/null +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java @@ -0,0 +1,7 @@ +package com.iluwatar.featuretoggle.user; + +/** + * Created by joseph on 26/01/16. + */ +public class User { +} diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java new file mode 100644 index 000000000..315c88b45 --- /dev/null +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java @@ -0,0 +1,37 @@ +package com.iluwatar.featuretoggle.user; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by joseph on 26/01/16. + */ +public class UserGroup { + + private static List freeGroup = new ArrayList<>(); + private static List paidGroup = new ArrayList<>(); + + public static void addUserToFreeGroup(final User user){ + if(paidGroup.contains(user)){ + throw new IllegalArgumentException("User all ready member of paid group."); + }else{ + if(!freeGroup.contains(user)){ + freeGroup.add(user); + } + } + } + + public static void addUserToPaidGroup(final User user){ + if(freeGroup.contains(user)){ + throw new IllegalArgumentException("User all ready member of free group."); + }else{ + if(!paidGroup.contains(user)){ + paidGroup.add(user); + } + } + } + + public static boolean isPaid(User user) { + return paidGroup.contains(user); + } +} diff --git a/feature-toggle/src/main/test/com/iluwatar/featuretoggle/user/UserGroupTest.java b/feature-toggle/src/main/test/com/iluwatar/featuretoggle/user/UserGroupTest.java new file mode 100644 index 000000000..f74d79064 --- /dev/null +++ b/feature-toggle/src/main/test/com/iluwatar/featuretoggle/user/UserGroupTest.java @@ -0,0 +1,37 @@ +package com.iluwatar.featuretoggle.user; + +import org.junit.Test; + +import static junit.framework.TestCase.assertFalse; +import static org.junit.Assert.assertTrue; + +public class UserGroupTest { + + @Test + public void testAddUserToFreeGroup() throws Exception { + User user = new User(); + UserGroup.addUserToFreeGroup(user); + assertFalse(UserGroup.isPaid(user)); + } + + @Test + public void testAddUserToPaidGroup() throws Exception { + User user = new User(); + UserGroup.addUserToPaidGroup(user); + assertTrue(UserGroup.isPaid(user)); + } + + @Test(expected = IllegalArgumentException.class) + public void testAddUserToPaidWhenOnFree() throws Exception { + User user = new User(); + UserGroup.addUserToFreeGroup(user); + UserGroup.addUserToPaidGroup(user); + } + + @Test(expected = IllegalArgumentException.class) + public void testAddUserToFreeWhenOnPaid() throws Exception { + User user = new User(); + UserGroup.addUserToPaidGroup(user); + UserGroup.addUserToFreeGroup(user); + } +} \ No newline at end of file From a1ede8980f5d68e960b8a03eae9bebd33bb45e7b Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Tue, 26 Jan 2016 18:49:25 +0000 Subject: [PATCH 010/123] #354 Added WelcomeMessage Service and Tests for tier example of featureToggle --- .../featuretoggle/pattern/Service.java | 11 ++++++ .../TieredFeatureToggleVersion.java | 21 ++++++++++ .../TieredFeatureToggleVersionTest.java | 39 +++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java create mode 100644 feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java create mode 100644 feature-toggle/src/main/test/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java new file mode 100644 index 000000000..058a8f59a --- /dev/null +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java @@ -0,0 +1,11 @@ +package com.iluwatar.featuretoggle.pattern; + +import com.iluwatar.featuretoggle.user.User; + +/** + * Created by joseph on 26/01/16. + */ +public interface Service { + + public String getWelcomeMessage(User user); +} diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java new file mode 100644 index 000000000..3a27453b1 --- /dev/null +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java @@ -0,0 +1,21 @@ +package com.iluwatar.featuretoggle.pattern.tieredversion; + +import com.iluwatar.featuretoggle.pattern.Service; +import com.iluwatar.featuretoggle.user.User; +import com.iluwatar.featuretoggle.user.UserGroup; + +/** + * Created by joseph on 26/01/16. + */ +public class TieredFeatureToggleVersion implements Service { + + @Override + public String getWelcomeMessage(User user) { + if(UserGroup.isPaid(user)){ + return "You're amazing thanks for paying for this awesome software."; + } + + return "I suppose you can use this software."; + } + +} diff --git a/feature-toggle/src/main/test/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java b/feature-toggle/src/main/test/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java new file mode 100644 index 000000000..b793c4614 --- /dev/null +++ b/feature-toggle/src/main/test/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java @@ -0,0 +1,39 @@ +package com.iluwatar.featuretoggle.pattern.tieredversion; + +import com.iluwatar.featuretoggle.pattern.Service; +import com.iluwatar.featuretoggle.user.User; +import com.iluwatar.featuretoggle.user.UserGroup; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Created by joseph on 26/01/16. + */ +public class TieredFeatureToggleVersionTest { + + User paidUser = new User(); + User freeUser = new User(); + + @Before + public void setUp() throws Exception { + UserGroup.addUserToPaidGroup(paidUser); + UserGroup.addUserToFreeGroup(freeUser); + + } + + @Test + public void testGetWelcomeMessageForPaidUser() throws Exception { + Service service = new TieredFeatureToggleVersion(); + String welcomeMessage = service.getWelcomeMessage(paidUser); + assertEquals("You're amazing thanks for paying for this awesome software.",welcomeMessage); + } + + @Test + public void testGetWelcomeMessageForFreeUser() throws Exception { + Service service = new TieredFeatureToggleVersion(); + String welcomeMessage = service.getWelcomeMessage(freeUser); + assertEquals("I suppose you can use this software.",welcomeMessage); + } +} \ No newline at end of file From 32f9cf3ab1ece2cbf2061b537fb5b4491aa2755e Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Tue, 26 Jan 2016 18:58:35 +0000 Subject: [PATCH 011/123] #354 Some clean up and show the difference between paid and free a bit more. --- .../featuretoggle/pattern/Service.java | 7 +++---- .../TieredFeatureToggleVersion.java | 5 +---- .../com/iluwatar/featuretoggle/user/User.java | 13 +++++++++--- .../featuretoggle/user/UserGroup.java | 3 --- .../TieredFeatureToggleVersionTest.java | 21 ++++++++----------- .../featuretoggle/user/UserGroupTest.java | 8 +++---- 6 files changed, 27 insertions(+), 30 deletions(-) diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java index 058a8f59a..e87983145 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java @@ -2,10 +2,9 @@ package com.iluwatar.featuretoggle.pattern; import com.iluwatar.featuretoggle.user.User; -/** - * Created by joseph on 26/01/16. - */ + public interface Service { - public String getWelcomeMessage(User user); + String getWelcomeMessage(User user); + } diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java index 3a27453b1..16e7c5da7 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java @@ -4,15 +4,12 @@ import com.iluwatar.featuretoggle.pattern.Service; import com.iluwatar.featuretoggle.user.User; import com.iluwatar.featuretoggle.user.UserGroup; -/** - * Created by joseph on 26/01/16. - */ public class TieredFeatureToggleVersion implements Service { @Override public String getWelcomeMessage(User user) { if(UserGroup.isPaid(user)){ - return "You're amazing thanks for paying for this awesome software."; + return "You're amazing " + user.getName() + ". Thanks for paying for this awesome software."; } return "I suppose you can use this software."; diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java index f25747997..a712e4f02 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java @@ -1,7 +1,14 @@ package com.iluwatar.featuretoggle.user; -/** - * Created by joseph on 26/01/16. - */ public class User { + + private String name; + + public User(String name) { + this.name = name; + } + + public String getName() { + return name; + } } diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java index 315c88b45..92b94f678 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java @@ -3,9 +3,6 @@ package com.iluwatar.featuretoggle.user; import java.util.ArrayList; import java.util.List; -/** - * Created by joseph on 26/01/16. - */ public class UserGroup { private static List freeGroup = new ArrayList<>(); diff --git a/feature-toggle/src/main/test/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java b/feature-toggle/src/main/test/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java index b793c4614..66b6bfc41 100644 --- a/feature-toggle/src/main/test/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java +++ b/feature-toggle/src/main/test/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java @@ -8,32 +8,29 @@ import org.junit.Test; import static org.junit.Assert.*; -/** - * Created by joseph on 26/01/16. - */ public class TieredFeatureToggleVersionTest { - User paidUser = new User(); - User freeUser = new User(); + final User paidUser = new User("Jamie Coder"); + final User freeUser = new User("Alan Defect"); + final Service service = new TieredFeatureToggleVersion(); @Before public void setUp() throws Exception { UserGroup.addUserToPaidGroup(paidUser); UserGroup.addUserToFreeGroup(freeUser); - } @Test public void testGetWelcomeMessageForPaidUser() throws Exception { - Service service = new TieredFeatureToggleVersion(); - String welcomeMessage = service.getWelcomeMessage(paidUser); - assertEquals("You're amazing thanks for paying for this awesome software.",welcomeMessage); + final String welcomeMessage = service.getWelcomeMessage(paidUser); + final String expected = "You're amazing Jamie Coder. Thanks for paying for this awesome software."; + assertEquals(expected,welcomeMessage); } @Test public void testGetWelcomeMessageForFreeUser() throws Exception { - Service service = new TieredFeatureToggleVersion(); - String welcomeMessage = service.getWelcomeMessage(freeUser); - assertEquals("I suppose you can use this software.",welcomeMessage); + final String welcomeMessage = service.getWelcomeMessage(freeUser); + final String expected = "I suppose you can use this software."; + assertEquals(expected,welcomeMessage); } } \ No newline at end of file diff --git a/feature-toggle/src/main/test/com/iluwatar/featuretoggle/user/UserGroupTest.java b/feature-toggle/src/main/test/com/iluwatar/featuretoggle/user/UserGroupTest.java index f74d79064..372e58c19 100644 --- a/feature-toggle/src/main/test/com/iluwatar/featuretoggle/user/UserGroupTest.java +++ b/feature-toggle/src/main/test/com/iluwatar/featuretoggle/user/UserGroupTest.java @@ -9,28 +9,28 @@ public class UserGroupTest { @Test public void testAddUserToFreeGroup() throws Exception { - User user = new User(); + User user = new User("Free User"); UserGroup.addUserToFreeGroup(user); assertFalse(UserGroup.isPaid(user)); } @Test public void testAddUserToPaidGroup() throws Exception { - User user = new User(); + User user = new User("Paid User"); UserGroup.addUserToPaidGroup(user); assertTrue(UserGroup.isPaid(user)); } @Test(expected = IllegalArgumentException.class) public void testAddUserToPaidWhenOnFree() throws Exception { - User user = new User(); + User user = new User("Paid User"); UserGroup.addUserToFreeGroup(user); UserGroup.addUserToPaidGroup(user); } @Test(expected = IllegalArgumentException.class) public void testAddUserToFreeWhenOnPaid() throws Exception { - User user = new User(); + User user = new User("Free User"); UserGroup.addUserToPaidGroup(user); UserGroup.addUserToFreeGroup(user); } From 91b2379fd0d767bc2456b4d5a7fa9498f2fd2785 Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Tue, 26 Jan 2016 19:20:28 +0000 Subject: [PATCH 012/123] #354 Fixed CheckStyle Issues --- feature-toggle/pom.xml | 16 +++--- .../featuretoggle/pattern/Service.java | 2 +- .../TieredFeatureToggleVersion.java | 14 ++--- .../com/iluwatar/featuretoggle/user/User.java | 14 ++--- .../featuretoggle/user/UserGroup.java | 53 +++++++++++-------- .../TieredFeatureToggleVersionTest.java | 42 +++++++-------- .../featuretoggle/user/UserGroupTest.java | 48 ++++++++--------- 7 files changed, 100 insertions(+), 89 deletions(-) diff --git a/feature-toggle/pom.xml b/feature-toggle/pom.xml index 9a2b04de3..c6dde055d 100644 --- a/feature-toggle/pom.xml +++ b/feature-toggle/pom.xml @@ -1,7 +1,7 @@ - java-design-patterns @@ -14,11 +14,11 @@ - - junit - junit - test - + + junit + junit + test + - + \ No newline at end of file diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java index e87983145..843ee173f 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java @@ -5,6 +5,6 @@ import com.iluwatar.featuretoggle.user.User; public interface Service { - String getWelcomeMessage(User user); + String getWelcomeMessage(User user); } diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java index 16e7c5da7..8411339ef 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java @@ -6,13 +6,13 @@ import com.iluwatar.featuretoggle.user.UserGroup; public class TieredFeatureToggleVersion implements Service { - @Override - public String getWelcomeMessage(User user) { - if(UserGroup.isPaid(user)){ - return "You're amazing " + user.getName() + ". Thanks for paying for this awesome software."; - } - - return "I suppose you can use this software."; + @Override + public String getWelcomeMessage(User user) { + if (UserGroup.isPaid(user)) { + return "You're amazing " + user.getName() + ". Thanks for paying for this awesome software."; } + return "I suppose you can use this software."; + } + } diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java index a712e4f02..732d06c61 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java @@ -2,13 +2,13 @@ package com.iluwatar.featuretoggle.user; public class User { - private String name; + private String name; - public User(String name) { - this.name = name; - } + public User(String name) { + this.name = name; + } - public String getName() { - return name; - } + public String getName() { + return name; + } } diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java index 92b94f678..1328afbc8 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java @@ -3,32 +3,43 @@ package com.iluwatar.featuretoggle.user; import java.util.ArrayList; import java.util.List; +/** + * Contains the lists of users of different groups paid and free + */ public class UserGroup { - private static List freeGroup = new ArrayList<>(); - private static List paidGroup = new ArrayList<>(); + private static List freeGroup = new ArrayList<>(); + private static List paidGroup = new ArrayList<>(); - public static void addUserToFreeGroup(final User user){ - if(paidGroup.contains(user)){ - throw new IllegalArgumentException("User all ready member of paid group."); - }else{ - if(!freeGroup.contains(user)){ - freeGroup.add(user); - } - } + /** + * + * @param user {@link User} to be added to the free group + */ + public static void addUserToFreeGroup(final User user) { + if (paidGroup.contains(user)) { + throw new IllegalArgumentException("User all ready member of paid group."); + } else { + if (!freeGroup.contains(user)) { + freeGroup.add(user); + } } + } - public static void addUserToPaidGroup(final User user){ - if(freeGroup.contains(user)){ - throw new IllegalArgumentException("User all ready member of free group."); - }else{ - if(!paidGroup.contains(user)){ - paidGroup.add(user); - } - } + /** + * + * @param user {@link User} to be added to the paid group + */ + public static void addUserToPaidGroup(final User user) { + if (freeGroup.contains(user)) { + throw new IllegalArgumentException("User all ready member of free group."); + } else { + if (!paidGroup.contains(user)) { + paidGroup.add(user); + } } + } - public static boolean isPaid(User user) { - return paidGroup.contains(user); - } + public static boolean isPaid(User user) { + return paidGroup.contains(user); + } } diff --git a/feature-toggle/src/main/test/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java b/feature-toggle/src/main/test/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java index 66b6bfc41..bf9487a2d 100644 --- a/feature-toggle/src/main/test/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java +++ b/feature-toggle/src/main/test/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java @@ -6,31 +6,31 @@ import com.iluwatar.featuretoggle.user.UserGroup; import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; public class TieredFeatureToggleVersionTest { - final User paidUser = new User("Jamie Coder"); - final User freeUser = new User("Alan Defect"); - final Service service = new TieredFeatureToggleVersion(); + final User paidUser = new User("Jamie Coder"); + final User freeUser = new User("Alan Defect"); + final Service service = new TieredFeatureToggleVersion(); - @Before - public void setUp() throws Exception { - UserGroup.addUserToPaidGroup(paidUser); - UserGroup.addUserToFreeGroup(freeUser); - } + @Before + public void setUp() throws Exception { + UserGroup.addUserToPaidGroup(paidUser); + UserGroup.addUserToFreeGroup(freeUser); + } - @Test - public void testGetWelcomeMessageForPaidUser() throws Exception { - final String welcomeMessage = service.getWelcomeMessage(paidUser); - final String expected = "You're amazing Jamie Coder. Thanks for paying for this awesome software."; - assertEquals(expected,welcomeMessage); - } + @Test + public void testGetWelcomeMessageForPaidUser() throws Exception { + final String welcomeMessage = service.getWelcomeMessage(paidUser); + final String expected = "You're amazing Jamie Coder. Thanks for paying for this awesome software."; + assertEquals(expected, welcomeMessage); + } - @Test - public void testGetWelcomeMessageForFreeUser() throws Exception { - final String welcomeMessage = service.getWelcomeMessage(freeUser); - final String expected = "I suppose you can use this software."; - assertEquals(expected,welcomeMessage); - } + @Test + public void testGetWelcomeMessageForFreeUser() throws Exception { + final String welcomeMessage = service.getWelcomeMessage(freeUser); + final String expected = "I suppose you can use this software."; + assertEquals(expected, welcomeMessage); + } } \ No newline at end of file diff --git a/feature-toggle/src/main/test/com/iluwatar/featuretoggle/user/UserGroupTest.java b/feature-toggle/src/main/test/com/iluwatar/featuretoggle/user/UserGroupTest.java index 372e58c19..0b3ca6ba4 100644 --- a/feature-toggle/src/main/test/com/iluwatar/featuretoggle/user/UserGroupTest.java +++ b/feature-toggle/src/main/test/com/iluwatar/featuretoggle/user/UserGroupTest.java @@ -7,31 +7,31 @@ import static org.junit.Assert.assertTrue; public class UserGroupTest { - @Test - public void testAddUserToFreeGroup() throws Exception { - User user = new User("Free User"); - UserGroup.addUserToFreeGroup(user); - assertFalse(UserGroup.isPaid(user)); - } + @Test + public void testAddUserToFreeGroup() throws Exception { + User user = new User("Free User"); + UserGroup.addUserToFreeGroup(user); + assertFalse(UserGroup.isPaid(user)); + } - @Test - public void testAddUserToPaidGroup() throws Exception { - User user = new User("Paid User"); - UserGroup.addUserToPaidGroup(user); - assertTrue(UserGroup.isPaid(user)); - } + @Test + public void testAddUserToPaidGroup() throws Exception { + User user = new User("Paid User"); + UserGroup.addUserToPaidGroup(user); + assertTrue(UserGroup.isPaid(user)); + } - @Test(expected = IllegalArgumentException.class) - public void testAddUserToPaidWhenOnFree() throws Exception { - User user = new User("Paid User"); - UserGroup.addUserToFreeGroup(user); - UserGroup.addUserToPaidGroup(user); - } + @Test(expected = IllegalArgumentException.class) + public void testAddUserToPaidWhenOnFree() throws Exception { + User user = new User("Paid User"); + UserGroup.addUserToFreeGroup(user); + UserGroup.addUserToPaidGroup(user); + } - @Test(expected = IllegalArgumentException.class) - public void testAddUserToFreeWhenOnPaid() throws Exception { - User user = new User("Free User"); - UserGroup.addUserToPaidGroup(user); - UserGroup.addUserToFreeGroup(user); - } + @Test(expected = IllegalArgumentException.class) + public void testAddUserToFreeWhenOnPaid() throws Exception { + User user = new User("Free User"); + UserGroup.addUserToPaidGroup(user); + UserGroup.addUserToFreeGroup(user); + } } \ No newline at end of file From d627b7af6b5992bda71a3436c73f8b41f7e13ca2 Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Tue, 26 Jan 2016 20:24:43 +0000 Subject: [PATCH 013/123] #354 Moved Tests to the correct area --- .../pattern/tieredversion/TieredFeatureToggleVersionTest.java | 0 .../java}/com/iluwatar/featuretoggle/user/UserGroupTest.java | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename feature-toggle/src/{main/test => test/java}/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java (100%) rename feature-toggle/src/{main/test => test/java}/com/iluwatar/featuretoggle/user/UserGroupTest.java (100%) diff --git a/feature-toggle/src/main/test/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java similarity index 100% rename from feature-toggle/src/main/test/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java rename to feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java diff --git a/feature-toggle/src/main/test/com/iluwatar/featuretoggle/user/UserGroupTest.java b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/user/UserGroupTest.java similarity index 100% rename from feature-toggle/src/main/test/com/iluwatar/featuretoggle/user/UserGroupTest.java rename to feature-toggle/src/test/java/com/iluwatar/featuretoggle/user/UserGroupTest.java From ba1d3a0fbfbeb09be8c7fa79dcf37777bc6eca32 Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Tue, 26 Jan 2016 21:08:28 +0000 Subject: [PATCH 014/123] #354 Added Configuration Based Example of Feature Toggle --- .../PropertiesFeatureToggleVersion.java | 27 ++++++++++++++++ .../TieredFeatureToggleVersion.java | 2 +- .../com/iluwatar/featuretoggle/user/User.java | 3 +- .../PropertiesFeatureToggleVersionTest.java | 31 +++++++++++++++++++ 4 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java create mode 100644 feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java new file mode 100644 index 000000000..bccf5bd6f --- /dev/null +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java @@ -0,0 +1,27 @@ +package com.iluwatar.featuretoggle.pattern.propertiesversion; + +import com.iluwatar.featuretoggle.pattern.Service; +import com.iluwatar.featuretoggle.user.User; + +import java.util.Properties; + +public class PropertiesFeatureToggleVersion implements Service { + + private Properties properties; + + public PropertiesFeatureToggleVersion(final Properties properties) { + this.properties = properties; + } + + @Override + public String getWelcomeMessage(final User user) { + + final boolean enhancedWelcome = (boolean) properties.get("enhancedWelcome"); + + if (enhancedWelcome) { + return "Welcome " + user + ". You're using the enhanced welcome message."; + } + + return "Welcome to the application."; + } +} diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java index 8411339ef..330015ac3 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java @@ -9,7 +9,7 @@ public class TieredFeatureToggleVersion implements Service { @Override public String getWelcomeMessage(User user) { if (UserGroup.isPaid(user)) { - return "You're amazing " + user.getName() + ". Thanks for paying for this awesome software."; + return "You're amazing " + user + ". Thanks for paying for this awesome software."; } return "I suppose you can use this software."; diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java index 732d06c61..12b4cc06e 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java @@ -8,7 +8,8 @@ public class User { this.name = name; } - public String getName() { + @Override + public String toString() { return name; } } diff --git a/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java new file mode 100644 index 000000000..de10480c3 --- /dev/null +++ b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java @@ -0,0 +1,31 @@ + +package com.iluwatar.featuretoggle.pattern.propertiesversion; + +import com.iluwatar.featuretoggle.pattern.Service; +import com.iluwatar.featuretoggle.user.User; +import org.junit.Test; + +import java.util.Properties; + +import static org.junit.Assert.assertEquals; + +public class PropertiesFeatureToggleVersionTest { + + @Test + public void testFeatureTurnedOn() throws Exception { + final Properties properties = new Properties(); + properties.put("enhancedWelcome",true); + Service service = new PropertiesFeatureToggleVersion(properties); + final String welcomeMessage = service.getWelcomeMessage(new User("Jamie No Code")); + assertEquals("Welcome Jamie No Code. You're using the enhanced welcome message.",welcomeMessage); + } + + @Test + public void testFeatureTurnedOff() throws Exception { + final Properties properties = new Properties(); + properties.put("enhancedWelcome",false); + Service service = new PropertiesFeatureToggleVersion(properties); + final String welcomeMessage = service.getWelcomeMessage(new User("Jamie No Code")); + assertEquals("Welcome to the application.",welcomeMessage); + } +} \ No newline at end of file From 4a49f82f2366e9e39f7298a11e7e09de6e82401c Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Tue, 26 Jan 2016 21:18:47 +0000 Subject: [PATCH 015/123] #354 add general boolean method to services for feature status. Change user.toString --- .../featuretoggle/pattern/Service.java | 2 ++ .../PropertiesFeatureToggleVersion.java | 25 +++++++++++++++---- .../TieredFeatureToggleVersion.java | 5 ++++ .../PropertiesFeatureToggleVersionTest.java | 4 +++ .../TieredFeatureToggleVersionTest.java | 6 +++++ 5 files changed, 37 insertions(+), 5 deletions(-) diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java index 843ee173f..c3849a45f 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java @@ -7,4 +7,6 @@ public interface Service { String getWelcomeMessage(User user); + boolean isEnhanced(); + } diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java index bccf5bd6f..aa795b975 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java @@ -7,21 +7,36 @@ import java.util.Properties; public class PropertiesFeatureToggleVersion implements Service { - private Properties properties; + private boolean isEnhanced; + /** + * + * @param properties {@link Properties} used to configure the service and toggle features. + */ public PropertiesFeatureToggleVersion(final Properties properties) { - this.properties = properties; + if (properties == null) { + throw new IllegalArgumentException("No Properties Provided."); + } else { + try { + isEnhanced = (boolean) properties.get("enhancedWelcome"); + } catch (Exception e) { + throw new IllegalArgumentException("Invalid Enhancement Settings Provided."); + } + } } @Override public String getWelcomeMessage(final User user) { - final boolean enhancedWelcome = (boolean) properties.get("enhancedWelcome"); - - if (enhancedWelcome) { + if (isEnhanced()) { return "Welcome " + user + ". You're using the enhanced welcome message."; } return "Welcome to the application."; } + + @Override + public boolean isEnhanced() { + return isEnhanced; + } } diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java index 330015ac3..2942618f1 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java @@ -15,4 +15,9 @@ public class TieredFeatureToggleVersion implements Service { return "I suppose you can use this software."; } + @Override + public boolean isEnhanced() { + return true; + } + } diff --git a/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java index de10480c3..7a07193c8 100644 --- a/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java +++ b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java @@ -8,6 +8,8 @@ import org.junit.Test; import java.util.Properties; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; public class PropertiesFeatureToggleVersionTest { @@ -16,6 +18,7 @@ public class PropertiesFeatureToggleVersionTest { final Properties properties = new Properties(); properties.put("enhancedWelcome",true); Service service = new PropertiesFeatureToggleVersion(properties); + assertTrue(service.isEnhanced()); final String welcomeMessage = service.getWelcomeMessage(new User("Jamie No Code")); assertEquals("Welcome Jamie No Code. You're using the enhanced welcome message.",welcomeMessage); } @@ -25,6 +28,7 @@ public class PropertiesFeatureToggleVersionTest { final Properties properties = new Properties(); properties.put("enhancedWelcome",false); Service service = new PropertiesFeatureToggleVersion(properties); + assertFalse(service.isEnhanced()); final String welcomeMessage = service.getWelcomeMessage(new User("Jamie No Code")); assertEquals("Welcome to the application.",welcomeMessage); } diff --git a/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java index bf9487a2d..f96e99ba0 100644 --- a/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java +++ b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java @@ -7,6 +7,7 @@ import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; public class TieredFeatureToggleVersionTest { @@ -33,4 +34,9 @@ public class TieredFeatureToggleVersionTest { final String expected = "I suppose you can use this software."; assertEquals(expected, welcomeMessage); } + + @Test + public void testIsEnhancedAlwaysTrueAsTiered() throws Exception { + assertTrue(service.isEnhanced()); + } } \ No newline at end of file From 77e14f00693114168853b62595144684ef87af07 Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Tue, 26 Jan 2016 23:38:28 +0000 Subject: [PATCH 016/123] #354 Add tests for Properties --- .../com/iluwatar/featuretoggle/user/UserGroup.java | 1 + .../PropertiesFeatureToggleVersionTest.java | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java index 1328afbc8..d3052ac21 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java @@ -11,6 +11,7 @@ public class UserGroup { private static List freeGroup = new ArrayList<>(); private static List paidGroup = new ArrayList<>(); + /** * * @param user {@link User} to be added to the free group diff --git a/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java index 7a07193c8..714eb5070 100644 --- a/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java +++ b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java @@ -13,6 +13,18 @@ import static org.junit.Assert.assertTrue; public class PropertiesFeatureToggleVersionTest { + @Test(expected = IllegalArgumentException.class) + public void testNullPropertiesPassed() throws Exception { + new PropertiesFeatureToggleVersion(null); + } + + @Test(expected = IllegalArgumentException.class) + public void testNonBooleanProperty() throws Exception { + final Properties properties = new Properties(); + properties.setProperty("enhancedWelcome","Something"); + new PropertiesFeatureToggleVersion(properties); + } + @Test public void testFeatureTurnedOn() throws Exception { final Properties properties = new Properties(); From 4e40cc38886cb9bec78cdd3d4e25592d547dfc12 Mon Sep 17 00:00:00 2001 From: Mohammed Ezzat Date: Wed, 27 Jan 2016 02:45:39 +0200 Subject: [PATCH 017/123] squid:S1488 - Local Variables should not be declared and then immediately returned or thrown --- caching/src/main/java/com/iluwatar/caching/DbManager.java | 4 +--- dao/src/main/java/com/iluwatar/dao/Customer.java | 3 +-- .../fluentiterable/lazy/LazyFluentIterable.java | 3 +-- .../src/main/java/domainapp/webapp/SimpleApplication.java | 6 ++---- 4 files changed, 5 insertions(+), 11 deletions(-) diff --git a/caching/src/main/java/com/iluwatar/caching/DbManager.java b/caching/src/main/java/com/iluwatar/caching/DbManager.java index bfde07103..5b2a1db25 100644 --- a/caching/src/main/java/com/iluwatar/caching/DbManager.java +++ b/caching/src/main/java/com/iluwatar/caching/DbManager.java @@ -72,9 +72,7 @@ public class DbManager { return null; } Document doc = iterable.first(); - UserAccount userAccount = - new UserAccount(userId, doc.getString("userName"), doc.getString("additionalInfo")); - return userAccount; + return new UserAccount(userId, doc.getString("userName"), doc.getString("additionalInfo")); } /** diff --git a/dao/src/main/java/com/iluwatar/dao/Customer.java b/dao/src/main/java/com/iluwatar/dao/Customer.java index ea13daf11..9abc233b0 100644 --- a/dao/src/main/java/com/iluwatar/dao/Customer.java +++ b/dao/src/main/java/com/iluwatar/dao/Customer.java @@ -66,7 +66,6 @@ public class Customer { @Override public int hashCode() { - int result = getId(); - return result; + return getId(); } } diff --git a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java index e887ad556..e72d1672a 100644 --- a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java +++ b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java @@ -204,8 +204,7 @@ public class LazyFluentIterable implements FluentIterable { */ @Override public List asList() { - List copy = FluentIterable.copyToList(iterable); - return copy; + return FluentIterable.copyToList(iterable); } @Override diff --git a/naked-objects/webapp/src/main/java/domainapp/webapp/SimpleApplication.java b/naked-objects/webapp/src/main/java/domainapp/webapp/SimpleApplication.java index a292a7779..89d316d20 100644 --- a/naked-objects/webapp/src/main/java/domainapp/webapp/SimpleApplication.java +++ b/naked-objects/webapp/src/main/java/domainapp/webapp/SimpleApplication.java @@ -118,8 +118,7 @@ public class SimpleApplication extends IsisWicketApplication { } catch (Exception e) { System.out.println(e); } - WebRequest request = super.newWebRequest(servletRequest, filterPath); - return request; + return super.newWebRequest(servletRequest, filterPath); } @Override @@ -150,8 +149,7 @@ public class SimpleApplication extends IsisWicketApplication { List readLines = Resources.readLines(Resources.getResource(contextClass, resourceName), Charset.defaultCharset()); - final String aboutText = Joiner.on("\n").join(readLines); - return aboutText; + return Joiner.on("\n").join(readLines); } catch (IOException e) { return "This is a simple app"; } From ab2aad32260a02e71c475b39c27b65d0c15df73b Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Wed, 27 Jan 2016 12:55:59 +0530 Subject: [PATCH 018/123] Work on #226, moved pattern specific references to respective patterns. And removed credits section from Home page. --- README.md | 12 ------------ adapter/index.md | 1 + builder/index.md | 1 + business-delegate/index.md | 3 +++ decorator/index.md | 2 ++ execute-around/index.md | 3 +++ lazy-loading/index.md | 3 +++ null-object/index.md | 3 +++ observer/index.md | 1 + publish-subscribe/index.md | 5 ++++- servant/index.md | 3 +++ singleton/index.md | 1 + strategy/index.md | 1 + 13 files changed, 26 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index f1ce0bfc7..8db718edb 100644 --- a/README.md +++ b/README.md @@ -41,18 +41,6 @@ patterns by any of the following approaches If you are willing to contribute to the project you will find the relevant information in our [developer wiki](https://github.com/iluwatar/java-design-patterns/wiki). We will help you and answer your questions in the [Gitter chatroom](https://gitter.im/iluwatar/java-design-patterns). -# Credits - -* [Effective Java (2nd Edition)](http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683) -* [Java Generics and Collections](http://www.amazon.com/Java-Generics-Collections-Maurice-Naftalin/dp/0596527756/) -* [Let's Modify the Objects-First Approach into Design-Patterns-First](http://edu.pecinovsky.cz/papers/2006_ITiCSE_Design_Patterns_First.pdf) -* [Pattern Languages of Program Design](http://www.amazon.com/Pattern-Languages-Program-Design-Coplien/dp/0201607344/ref=sr_1_1) -* [Presentation Tier Patterns](http://www.javagyan.com/tutorials/corej2eepatterns/presentation-tier-patterns) -* [Functional Programming in Java: Harnessing the Power of Java 8 Lambda Expressions](http://www.amazon.com/Functional-Programming-Java-Harnessing-Expressions/dp/1937785467/ref=sr_1_1) -* [Patterns of Enterprise Application Architecture](http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420) -* [Spring Data](http://www.amazon.com/Spring-Data-Mark-Pollack/dp/1449323952/ref=sr_1_1) -* [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) - # License This project is licensed under the terms of the MIT license. diff --git a/adapter/index.md b/adapter/index.md index 4263eb322..ea3baa7fa 100644 --- a/adapter/index.md +++ b/adapter/index.md @@ -34,3 +34,4 @@ Use the Adapter pattern when ## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) +* [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) diff --git a/builder/index.md b/builder/index.md index 05056e7c9..5d1f3d24d 100644 --- a/builder/index.md +++ b/builder/index.md @@ -31,3 +31,4 @@ Use the Builder pattern when ## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) +* [Effective Java (2nd Edition)](http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683) diff --git a/business-delegate/index.md b/business-delegate/index.md index 7d548da11..7d6df3346 100644 --- a/business-delegate/index.md +++ b/business-delegate/index.md @@ -23,3 +23,6 @@ Use the Business Delegate pattern when * you want loose coupling between presentation and business tiers * you want to orchestrate calls to multiple business services * you want to encapsulate service lookups and service calls + +##Credits +* [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) diff --git a/decorator/index.md b/decorator/index.md index 5494ca944..63795114c 100644 --- a/decorator/index.md +++ b/decorator/index.md @@ -30,3 +30,5 @@ Use Decorator ## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) +* [Functional Programming in Java: Harnessing the Power of Java 8 Lambda Expressions](http://www.amazon.com/Functional-Programming-Java-Harnessing-Expressions/dp/1937785467/ref=sr_1_1) +* [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) diff --git a/execute-around/index.md b/execute-around/index.md index ec543bdc7..784a02b15 100644 --- a/execute-around/index.md +++ b/execute-around/index.md @@ -22,3 +22,6 @@ only what to do with the resource. Use the Execute Around idiom when * you use an API that requires methods to be called in pairs such as open/close or allocate/deallocate. + +##Credits +* [Functional Programming in Java: Harnessing the Power of Java 8 Lambda Expressions](http://www.amazon.com/Functional-Programming-Java-Harnessing-Expressions/dp/1937785467/ref=sr_1_1) diff --git a/lazy-loading/index.md b/lazy-loading/index.md index 8a06700d3..d2c3db615 100644 --- a/lazy-loading/index.md +++ b/lazy-loading/index.md @@ -27,3 +27,6 @@ Use the Lazy Loading idiom when ## Real world examples * JPA annotations @OneToOne, @OneToMany, @ManyToOne, @ManyToMany and fetch = FetchType.LAZY + +##Credits +* [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) diff --git a/null-object/index.md b/null-object/index.md index b5fb279db..0ed28a0af 100644 --- a/null-object/index.md +++ b/null-object/index.md @@ -25,3 +25,6 @@ Object is very predictable and has no side effects: it does nothing. Use the Null Object pattern when * you want to avoid explicit null checks and keep the algorithm elegant and easy to read. + +## Credits +* [Pattern Languages of Program Design](http://www.amazon.com/Pattern-Languages-Program-Design-Coplien/dp/0201607344/ref=sr_1_1) diff --git a/observer/index.md b/observer/index.md index 7e83e899d..db6320a1d 100644 --- a/observer/index.md +++ b/observer/index.md @@ -38,3 +38,4 @@ Use the Observer pattern in any of the following situations ## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) +* [Java Generics and Collections](http://www.amazon.com/Java-Generics-Collections-Maurice-Naftalin/dp/0596527756/) diff --git a/publish-subscribe/index.md b/publish-subscribe/index.md index bd83e37fb..d3b04c82d 100644 --- a/publish-subscribe/index.md +++ b/publish-subscribe/index.md @@ -18,4 +18,7 @@ Broadcast messages from sender to all the interested receivers. ## Applicability Use the Publish Subscribe Channel pattern when -* two or more applications need to communicate using a messaging system for broadcasts. \ No newline at end of file +* two or more applications need to communicate using a messaging system for broadcasts. + +##Credits +* [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) diff --git a/servant/index.md b/servant/index.md index 895b87502..3e82ab2cf 100644 --- a/servant/index.md +++ b/servant/index.md @@ -20,3 +20,6 @@ this behavior in the common parent class - it is defined once in the Servant. Use the Servant pattern when * when we want some objects to perform a common action and don't want to define this action as a method in every class. + +## Credits +* [Let's Modify the Objects-First Approach into Design-Patterns-First](http://edu.pecinovsky.cz/papers/2006_ITiCSE_Design_Patterns_First.pdf) diff --git a/singleton/index.md b/singleton/index.md index dcbd63902..2a481f5c8 100644 --- a/singleton/index.md +++ b/singleton/index.md @@ -35,3 +35,4 @@ Use the Singleton pattern when ## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) +* [Effective Java (2nd Edition)](http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683) diff --git a/strategy/index.md b/strategy/index.md index 9b35b806d..f07397f67 100644 --- a/strategy/index.md +++ b/strategy/index.md @@ -31,3 +31,4 @@ Use the Strategy pattern when ## Credits * [Design Patterns: Elements of Reusable Object-Oriented Software](http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) +* [Functional Programming in Java: Harnessing the Power of Java 8 Lambda Expressions](http://www.amazon.com/Functional-Programming-Java-Harnessing-Expressions/dp/1937785467/ref=sr_1_1) From 7b61395bc1298c4d5a802580748ac557c2eea8d1 Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Wed, 27 Jan 2016 22:14:28 +0000 Subject: [PATCH 019/123] #358 Add Plugin for Auto License --- pom.xml | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index c929f2945..ff83355b7 100644 --- a/pom.xml +++ b/pom.xml @@ -8,21 +8,24 @@ 1.10.0-SNAPSHOT pom + 2014 + UTF-8 5.0.1.Final - 4.1.7.RELEASE - 1.9.0.RELEASE - 1.4.188 + 4.2.4.RELEASE + 1.9.2.RELEASE + 1.4.190 4.12 3.0 4.0.0 0.7.2.201409121644 1.4 - 2.15.3 + 2.16.1 1.2.17 - 18.0 - 1.14.0 + 19.0 + 1.15.1 + 1.10.19 abstract-factory @@ -61,6 +64,7 @@ intercepting-filter producer-consumer poison-pill + reader-writer-lock lazy-loading service-layer specification @@ -144,7 +148,7 @@ org.mockito mockito-core - 1.10.19 + ${mockito.version} test @@ -326,7 +330,29 @@ - + + + + com.mycila + license-maven-plugin + 2.11 + +
com/mycila/maven/plugin/license/templates/MIT.txt
+ + Ilkka Seppälä + + true +
+ + + install-format + install + + format + + + +
From 3d956960789de9dd6c805d99f5dddd2febac5abf Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Wed, 27 Jan 2016 22:20:42 +0000 Subject: [PATCH 020/123] #358 Added license to all files using plugin --- abstract-factory/pom.xml | 24 +++++++++++++++++++ .../com/iluwatar/abstractfactory/App.java | 22 +++++++++++++++++ .../com/iluwatar/abstractfactory/Army.java | 22 +++++++++++++++++ .../com/iluwatar/abstractfactory/Castle.java | 22 +++++++++++++++++ .../com/iluwatar/abstractfactory/ElfArmy.java | 22 +++++++++++++++++ .../iluwatar/abstractfactory/ElfCastle.java | 22 +++++++++++++++++ .../com/iluwatar/abstractfactory/ElfKing.java | 22 +++++++++++++++++ .../abstractfactory/ElfKingdomFactory.java | 22 +++++++++++++++++ .../com/iluwatar/abstractfactory/King.java | 22 +++++++++++++++++ .../abstractfactory/KingdomFactory.java | 22 +++++++++++++++++ .../com/iluwatar/abstractfactory/OrcArmy.java | 22 +++++++++++++++++ .../iluwatar/abstractfactory/OrcCastle.java | 22 +++++++++++++++++ .../com/iluwatar/abstractfactory/OrcKing.java | 22 +++++++++++++++++ .../abstractfactory/OrcKingdomFactory.java | 22 +++++++++++++++++ .../com/iluwatar/abstractfactory/AppTest.java | 22 +++++++++++++++++ adapter/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/adapter/App.java | 22 +++++++++++++++++ .../iluwatar/adapter/BattleFishingBoat.java | 22 +++++++++++++++++ .../java/com/iluwatar/adapter/BattleShip.java | 22 +++++++++++++++++ .../java/com/iluwatar/adapter/Captain.java | 22 +++++++++++++++++ .../com/iluwatar/adapter/FishingBoat.java | 22 +++++++++++++++++ .../iluwatar/adapter/AdapterPatternTest.java | 22 +++++++++++++++++ async-method-invocation/pom.xml | 24 +++++++++++++++++++ .../iluwatar/async/method/invocation/App.java | 22 +++++++++++++++++ .../method/invocation/AsyncCallback.java | 22 +++++++++++++++++ .../method/invocation/AsyncExecutor.java | 22 +++++++++++++++++ .../async/method/invocation/AsyncResult.java | 22 +++++++++++++++++ .../invocation/ThreadAsyncExecutor.java | 22 +++++++++++++++++ .../async/method/invocation/AppTest.java | 22 +++++++++++++++++ .../invocation/ThreadAsyncExecutorTest.java | 22 +++++++++++++++++ bridge/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/bridge/App.java | 22 +++++++++++++++++ .../iluwatar/bridge/BlindingMagicWeapon.java | 22 +++++++++++++++++ .../bridge/BlindingMagicWeaponImpl.java | 22 +++++++++++++++++ .../java/com/iluwatar/bridge/Excalibur.java | 22 +++++++++++++++++ .../iluwatar/bridge/FlyingMagicWeapon.java | 22 +++++++++++++++++ .../bridge/FlyingMagicWeaponImpl.java | 22 +++++++++++++++++ .../java/com/iluwatar/bridge/MagicWeapon.java | 22 +++++++++++++++++ .../com/iluwatar/bridge/MagicWeaponImpl.java | 22 +++++++++++++++++ .../java/com/iluwatar/bridge/Mjollnir.java | 22 +++++++++++++++++ .../bridge/SoulEatingMagicWeapon.java | 22 +++++++++++++++++ .../bridge/SoulEatingMagicWeaponImpl.java | 22 +++++++++++++++++ .../com/iluwatar/bridge/Stormbringer.java | 22 +++++++++++++++++ .../java/com/iluwatar/bridge/AppTest.java | 22 +++++++++++++++++ .../bridge/BlindingMagicWeaponTest.java | 22 +++++++++++++++++ .../bridge/FlyingMagicWeaponTest.java | 22 +++++++++++++++++ .../com/iluwatar/bridge/MagicWeaponTest.java | 22 +++++++++++++++++ .../bridge/SoulEatingMagicWeaponTest.java | 22 +++++++++++++++++ builder/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/builder/App.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/builder/Armor.java | 22 +++++++++++++++++ .../java/com/iluwatar/builder/HairColor.java | 22 +++++++++++++++++ .../java/com/iluwatar/builder/HairType.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/builder/Hero.java | 22 +++++++++++++++++ .../java/com/iluwatar/builder/Profession.java | 22 +++++++++++++++++ .../java/com/iluwatar/builder/Weapon.java | 22 +++++++++++++++++ .../java/com/iluwatar/builder/AppTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/builder/HeroTest.java | 22 +++++++++++++++++ business-delegate/pom.xml | 24 +++++++++++++++++++ .../com/iluwatar/business/delegate/App.java | 22 +++++++++++++++++ .../business/delegate/BusinessDelegate.java | 22 +++++++++++++++++ .../business/delegate/BusinessLookup.java | 22 +++++++++++++++++ .../business/delegate/BusinessService.java | 22 +++++++++++++++++ .../iluwatar/business/delegate/Client.java | 22 +++++++++++++++++ .../business/delegate/EjbService.java | 22 +++++++++++++++++ .../business/delegate/JmsService.java | 22 +++++++++++++++++ .../business/delegate/ServiceType.java | 22 +++++++++++++++++ .../delegate/BusinessDelegateTest.java | 22 +++++++++++++++++ caching/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/caching/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/caching/AppManager.java | 22 +++++++++++++++++ .../java/com/iluwatar/caching/CacheStore.java | 22 +++++++++++++++++ .../com/iluwatar/caching/CachingPolicy.java | 22 +++++++++++++++++ .../java/com/iluwatar/caching/DbManager.java | 22 +++++++++++++++++ .../java/com/iluwatar/caching/LruCache.java | 22 +++++++++++++++++ .../com/iluwatar/caching/UserAccount.java | 22 +++++++++++++++++ .../java/com/iluwatar/caching/AppTest.java | 22 +++++++++++++++++ callback/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/callback/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/callback/Callback.java | 22 +++++++++++++++++ .../com/iluwatar/callback/LambdasApp.java | 22 +++++++++++++++++ .../com/iluwatar/callback/SimpleTask.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/callback/Task.java | 22 +++++++++++++++++ .../java/com/iluwatar/callback/AppTest.java | 22 +++++++++++++++++ chain/pom.xml | 24 +++++++++++++++++++ .../src/main/java/com/iluwatar/chain/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/chain/OrcCommander.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/chain/OrcKing.java | 22 +++++++++++++++++ .../java/com/iluwatar/chain/OrcOfficer.java | 22 +++++++++++++++++ .../java/com/iluwatar/chain/OrcSoldier.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/chain/Request.java | 22 +++++++++++++++++ .../com/iluwatar/chain/RequestHandler.java | 22 +++++++++++++++++ .../java/com/iluwatar/chain/RequestType.java | 22 +++++++++++++++++ .../test/java/com/iluwatar/chain/AppTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/chain/OrcKingTest.java | 22 +++++++++++++++++ checkstyle-suppressions.xml | 24 +++++++++++++++++++ checkstyle.xml | 24 +++++++++++++++++++ command/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/command/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/command/Command.java | 22 +++++++++++++++++ .../java/com/iluwatar/command/Goblin.java | 22 +++++++++++++++++ .../iluwatar/command/InvisibilitySpell.java | 22 +++++++++++++++++ .../com/iluwatar/command/ShrinkSpell.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/command/Size.java | 22 +++++++++++++++++ .../java/com/iluwatar/command/Target.java | 22 +++++++++++++++++ .../java/com/iluwatar/command/Visibility.java | 22 +++++++++++++++++ .../java/com/iluwatar/command/Wizard.java | 22 +++++++++++++++++ .../com/iluwatar/command/CommandTest.java | 22 +++++++++++++++++ composite/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/composite/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/composite/Letter.java | 22 +++++++++++++++++ .../iluwatar/composite/LetterComposite.java | 22 +++++++++++++++++ .../com/iluwatar/composite/Messenger.java | 22 +++++++++++++++++ .../java/com/iluwatar/composite/Sentence.java | 22 +++++++++++++++++ .../java/com/iluwatar/composite/Word.java | 22 +++++++++++++++++ .../java/com/iluwatar/composite/AppTest.java | 22 +++++++++++++++++ .../com/iluwatar/composite/MessengerTest.java | 22 +++++++++++++++++ dao/pom.xml | 24 +++++++++++++++++++ dao/src/main/java/com/iluwatar/dao/App.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/dao/Customer.java | 22 +++++++++++++++++ .../java/com/iluwatar/dao/CustomerDao.java | 22 +++++++++++++++++ .../com/iluwatar/dao/CustomerDaoImpl.java | 22 +++++++++++++++++ dao/src/main/resources/log4j.xml | 24 +++++++++++++++++++ .../com/iluwatar/dao/CustomerDaoImplTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/dao/CustomerTest.java | 22 +++++++++++++++++ decorator/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/decorator/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/decorator/Hostile.java | 22 +++++++++++++++++ .../com/iluwatar/decorator/SmartHostile.java | 22 +++++++++++++++++ .../java/com/iluwatar/decorator/Troll.java | 22 +++++++++++++++++ .../java/com/iluwatar/decorator/AppTest.java | 22 +++++++++++++++++ .../iluwatar/decorator/SmartHostileTest.java | 22 +++++++++++++++++ .../com/iluwatar/decorator/TrollTest.java | 22 +++++++++++++++++ delegation/pom.xml | 24 +++++++++++++++++++ .../com/iluwatar/delegation/simple/App.java | 22 +++++++++++++++++ .../iluwatar/delegation/simple/Printer.java | 22 +++++++++++++++++ .../delegation/simple/PrinterController.java | 22 +++++++++++++++++ .../simple/printers/CanonPrinter.java | 22 +++++++++++++++++ .../simple/printers/EpsonPrinter.java | 22 +++++++++++++++++ .../delegation/simple/printers/HpPrinter.java | 22 +++++++++++++++++ .../iluwatar/delegation/simple/AppTest.java | 22 +++++++++++++++++ .../delegation/simple/DelegateTest.java | 22 +++++++++++++++++ dependency-injection/pom.xml | 24 +++++++++++++++++++ .../dependency/injection/AdvancedWizard.java | 22 +++++++++++++++++ .../iluwatar/dependency/injection/App.java | 22 +++++++++++++++++ .../dependency/injection/GuiceWizard.java | 22 +++++++++++++++++ .../dependency/injection/OldTobyTobacco.java | 22 +++++++++++++++++ .../injection/RivendellTobacco.java | 22 +++++++++++++++++ .../injection/SecondBreakfastTobacco.java | 22 +++++++++++++++++ .../dependency/injection/SimpleWizard.java | 22 +++++++++++++++++ .../dependency/injection/Tobacco.java | 22 +++++++++++++++++ .../dependency/injection/TobaccoModule.java | 22 +++++++++++++++++ .../iluwatar/dependency/injection/Wizard.java | 22 +++++++++++++++++ .../injection/AdvancedWizardTest.java | 22 +++++++++++++++++ .../dependency/injection/AppTest.java | 22 +++++++++++++++++ .../dependency/injection/GuiceWizardTest.java | 22 +++++++++++++++++ .../injection/SimpleWizardTest.java | 22 +++++++++++++++++ .../dependency/injection/StdOutTest.java | 22 +++++++++++++++++ double-checked-locking/pom.xml | 24 +++++++++++++++++++ .../iluwatar/doublechecked/locking/App.java | 22 +++++++++++++++++ .../doublechecked/locking/Inventory.java | 22 +++++++++++++++++ .../iluwatar/doublechecked/locking/Item.java | 22 +++++++++++++++++ .../doublechecked/locking/AppTest.java | 22 +++++++++++++++++ .../doublechecked/locking/InventoryTest.java | 22 +++++++++++++++++ double-dispatch/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/doubledispatch/App.java | 22 +++++++++++++++++ .../doubledispatch/FlamingAsteroid.java | 22 +++++++++++++++++ .../iluwatar/doubledispatch/GameObject.java | 22 +++++++++++++++++ .../iluwatar/doubledispatch/Meteoroid.java | 22 +++++++++++++++++ .../iluwatar/doubledispatch/Rectangle.java | 22 +++++++++++++++++ .../doubledispatch/SpaceStationIss.java | 22 +++++++++++++++++ .../doubledispatch/SpaceStationMir.java | 22 +++++++++++++++++ .../com/iluwatar/doubledispatch/AppTest.java | 22 +++++++++++++++++ .../doubledispatch/CollisionTest.java | 22 +++++++++++++++++ .../doubledispatch/FlamingAsteroidTest.java | 22 +++++++++++++++++ .../doubledispatch/MeteoroidTest.java | 22 +++++++++++++++++ .../doubledispatch/RectangleTest.java | 22 +++++++++++++++++ .../doubledispatch/SpaceStationIssTest.java | 22 +++++++++++++++++ .../doubledispatch/SpaceStationMirTest.java | 22 +++++++++++++++++ event-aggregator/pom.xml | 24 +++++++++++++++++++ .../com/iluwatar/event/aggregator/App.java | 22 +++++++++++++++++ .../com/iluwatar/event/aggregator/Event.java | 22 +++++++++++++++++ .../event/aggregator/EventEmitter.java | 22 +++++++++++++++++ .../event/aggregator/EventObserver.java | 22 +++++++++++++++++ .../event/aggregator/KingJoffrey.java | 22 +++++++++++++++++ .../iluwatar/event/aggregator/KingsHand.java | 22 +++++++++++++++++ .../event/aggregator/LordBaelish.java | 22 +++++++++++++++++ .../iluwatar/event/aggregator/LordVarys.java | 22 +++++++++++++++++ .../com/iluwatar/event/aggregator/Scout.java | 22 +++++++++++++++++ .../iluwatar/event/aggregator/Weekday.java | 22 +++++++++++++++++ .../iluwatar/event/aggregator/AppTest.java | 22 +++++++++++++++++ .../event/aggregator/EventEmitterTest.java | 22 +++++++++++++++++ .../iluwatar/event/aggregator/EventTest.java | 22 +++++++++++++++++ .../event/aggregator/KingJoffreyTest.java | 22 +++++++++++++++++ .../event/aggregator/KingsHandTest.java | 22 +++++++++++++++++ .../event/aggregator/LordBaelishTest.java | 22 +++++++++++++++++ .../event/aggregator/LordVarysTest.java | 22 +++++++++++++++++ .../iluwatar/event/aggregator/ScoutTest.java | 22 +++++++++++++++++ .../event/aggregator/WeekdayTest.java | 22 +++++++++++++++++ event-driven-architecture/pom.xml | 24 +++++++++++++++++++ .../src/main/java/com/iluwatar/eda/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/eda/event/Event.java | 22 +++++++++++++++++ .../iluwatar/eda/event/UserCreatedEvent.java | 22 +++++++++++++++++ .../iluwatar/eda/event/UserUpdatedEvent.java | 22 +++++++++++++++++ .../eda/framework/EventDispatcher.java | 22 +++++++++++++++++ .../com/iluwatar/eda/framework/Handler.java | 22 +++++++++++++++++ .../com/iluwatar/eda/framework/Message.java | 22 +++++++++++++++++ .../eda/handler/UserCreatedEventHandler.java | 22 +++++++++++++++++ .../eda/handler/UserUpdatedEventHandler.java | 22 +++++++++++++++++ .../java/com/iluwatar/eda/model/User.java | 22 +++++++++++++++++ .../eda/event/UserCreatedEventTest.java | 22 +++++++++++++++++ .../eda/framework/EventDispatcherTest.java | 22 +++++++++++++++++ exclude-pmd.properties | 23 ++++++++++++++++++ execute-around/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/execute/around/App.java | 22 +++++++++++++++++ .../execute/around/FileWriterAction.java | 22 +++++++++++++++++ .../execute/around/SimpleFileWriter.java | 22 +++++++++++++++++ .../com/iluwatar/execute/around/AppTest.java | 22 +++++++++++++++++ .../execute/around/SimpleFileWriterTest.java | 22 +++++++++++++++++ facade/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/facade/App.java | 22 +++++++++++++++++ .../iluwatar/facade/DwarvenCartOperator.java | 22 +++++++++++++++++ .../iluwatar/facade/DwarvenGoldDigger.java | 22 +++++++++++++++++ .../facade/DwarvenGoldmineFacade.java | 22 +++++++++++++++++ .../iluwatar/facade/DwarvenMineWorker.java | 22 +++++++++++++++++ .../iluwatar/facade/DwarvenTunnelDigger.java | 22 +++++++++++++++++ .../java/com/iluwatar/facade/AppTest.java | 22 +++++++++++++++++ .../facade/DwarvenGoldmineFacadeTest.java | 22 +++++++++++++++++ factory-method/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/factory/method/App.java | 22 +++++++++++++++++ .../iluwatar/factory/method/Blacksmith.java | 22 +++++++++++++++++ .../factory/method/ElfBlacksmith.java | 22 +++++++++++++++++ .../iluwatar/factory/method/ElfWeapon.java | 22 +++++++++++++++++ .../factory/method/OrcBlacksmith.java | 22 +++++++++++++++++ .../iluwatar/factory/method/OrcWeapon.java | 22 +++++++++++++++++ .../com/iluwatar/factory/method/Weapon.java | 22 +++++++++++++++++ .../iluwatar/factory/method/WeaponType.java | 22 +++++++++++++++++ .../factory/method/FactoryMethodTest.java | 22 +++++++++++++++++ fluentinterface/pom.xml | 24 +++++++++++++++++++ .../com/iluwatar/fluentinterface/app/App.java | 22 +++++++++++++++++ .../fluentiterable/FluentIterable.java | 22 +++++++++++++++++ .../lazy/DecoratingIterator.java | 22 +++++++++++++++++ .../lazy/LazyFluentIterable.java | 22 +++++++++++++++++ .../simple/SimpleFluentIterable.java | 22 +++++++++++++++++ .../iluwatar/fluentinterface/app/AppTest.java | 22 +++++++++++++++++ .../fluentiterable/FluentIterableTest.java | 22 +++++++++++++++++ .../lazy/LazyFluentIterableTest.java | 22 +++++++++++++++++ .../simple/SimpleFluentIterableTest.java | 22 +++++++++++++++++ flux/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/flux/action/Action.java | 22 +++++++++++++++++ .../com/iluwatar/flux/action/ActionType.java | 22 +++++++++++++++++ .../com/iluwatar/flux/action/Content.java | 22 +++++++++++++++++ .../iluwatar/flux/action/ContentAction.java | 22 +++++++++++++++++ .../com/iluwatar/flux/action/MenuAction.java | 22 +++++++++++++++++ .../com/iluwatar/flux/action/MenuItem.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/flux/app/App.java | 22 +++++++++++++++++ .../iluwatar/flux/dispatcher/Dispatcher.java | 22 +++++++++++++++++ .../com/iluwatar/flux/store/ContentStore.java | 22 +++++++++++++++++ .../com/iluwatar/flux/store/MenuStore.java | 22 +++++++++++++++++ .../java/com/iluwatar/flux/store/Store.java | 22 +++++++++++++++++ .../com/iluwatar/flux/view/ContentView.java | 22 +++++++++++++++++ .../java/com/iluwatar/flux/view/MenuView.java | 22 +++++++++++++++++ .../java/com/iluwatar/flux/view/View.java | 22 +++++++++++++++++ .../com/iluwatar/flux/action/ContentTest.java | 22 +++++++++++++++++ .../iluwatar/flux/action/MenuItemTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/flux/app/AppTest.java | 22 +++++++++++++++++ .../flux/dispatcher/DispatcherTest.java | 22 +++++++++++++++++ .../iluwatar/flux/store/ContentStoreTest.java | 22 +++++++++++++++++ .../iluwatar/flux/store/MenuStoreTest.java | 22 +++++++++++++++++ .../iluwatar/flux/view/ContentViewTest.java | 22 +++++++++++++++++ .../com/iluwatar/flux/view/MenuViewTest.java | 22 +++++++++++++++++ flyweight/pom.xml | 24 +++++++++++++++++++ .../com/iluwatar/flyweight/AlchemistShop.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/flyweight/App.java | 22 +++++++++++++++++ .../com/iluwatar/flyweight/HealingPotion.java | 22 +++++++++++++++++ .../iluwatar/flyweight/HolyWaterPotion.java | 22 +++++++++++++++++ .../flyweight/InvisibilityPotion.java | 22 +++++++++++++++++ .../com/iluwatar/flyweight/PoisonPotion.java | 22 +++++++++++++++++ .../java/com/iluwatar/flyweight/Potion.java | 22 +++++++++++++++++ .../com/iluwatar/flyweight/PotionFactory.java | 22 +++++++++++++++++ .../com/iluwatar/flyweight/PotionType.java | 22 +++++++++++++++++ .../iluwatar/flyweight/StrengthPotion.java | 22 +++++++++++++++++ .../iluwatar/flyweight/AlchemistShopTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/flyweight/AppTest.java | 22 +++++++++++++++++ front-controller/pom.xml | 24 +++++++++++++++++++ .../com/iluwatar/front/controller/App.java | 22 +++++++++++++++++ .../controller/ApplicationException.java | 22 +++++++++++++++++ .../front/controller/ArcherCommand.java | 22 +++++++++++++++++ .../iluwatar/front/controller/ArcherView.java | 22 +++++++++++++++++ .../front/controller/CatapultCommand.java | 22 +++++++++++++++++ .../front/controller/CatapultView.java | 22 +++++++++++++++++ .../iluwatar/front/controller/Command.java | 22 +++++++++++++++++ .../iluwatar/front/controller/ErrorView.java | 22 +++++++++++++++++ .../front/controller/FrontController.java | 22 +++++++++++++++++ .../front/controller/UnknownCommand.java | 22 +++++++++++++++++ .../com/iluwatar/front/controller/View.java | 22 +++++++++++++++++ .../iluwatar/front/controller/AppTest.java | 22 +++++++++++++++++ .../controller/ApplicationExceptionTest.java | 22 +++++++++++++++++ .../front/controller/CommandTest.java | 22 +++++++++++++++++ .../front/controller/FrontControllerTest.java | 22 +++++++++++++++++ .../iluwatar/front/controller/StdOutTest.java | 22 +++++++++++++++++ .../iluwatar/front/controller/ViewTest.java | 22 +++++++++++++++++ half-sync-half-async/pom.xml | 24 +++++++++++++++++++ .../com/iluwatar/halfsynchalfasync/App.java | 22 +++++++++++++++++ .../iluwatar/halfsynchalfasync/AsyncTask.java | 22 +++++++++++++++++ .../AsynchronousService.java | 22 +++++++++++++++++ .../iluwatar/halfsynchalfasync/AppTest.java | 22 +++++++++++++++++ .../AsynchronousServiceTest.java | 22 +++++++++++++++++ intercepting-filter/pom.xml | 24 +++++++++++++++++++ .../intercepting/filter/AbstractFilter.java | 22 +++++++++++++++++ .../intercepting/filter/AddressFilter.java | 22 +++++++++++++++++ .../com/iluwatar/intercepting/filter/App.java | 22 +++++++++++++++++ .../iluwatar/intercepting/filter/Client.java | 22 +++++++++++++++++ .../intercepting/filter/ContactFilter.java | 22 +++++++++++++++++ .../intercepting/filter/DepositFilter.java | 22 +++++++++++++++++ .../iluwatar/intercepting/filter/Filter.java | 22 +++++++++++++++++ .../intercepting/filter/FilterChain.java | 22 +++++++++++++++++ .../intercepting/filter/FilterManager.java | 22 +++++++++++++++++ .../intercepting/filter/NameFilter.java | 22 +++++++++++++++++ .../iluwatar/intercepting/filter/Order.java | 22 +++++++++++++++++ .../intercepting/filter/OrderFilter.java | 22 +++++++++++++++++ .../iluwatar/intercepting/filter/Target.java | 22 +++++++++++++++++ .../iluwatar/intercepting/filter/AppTest.java | 22 +++++++++++++++++ .../filter/FilterManagerTest.java | 22 +++++++++++++++++ .../intercepting/filter/FilterTest.java | 22 +++++++++++++++++ .../intercepting/filter/OrderTest.java | 22 +++++++++++++++++ interpreter/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/interpreter/App.java | 22 +++++++++++++++++ .../com/iluwatar/interpreter/Expression.java | 22 +++++++++++++++++ .../iluwatar/interpreter/MinusExpression.java | 22 +++++++++++++++++ .../interpreter/MultiplyExpression.java | 22 +++++++++++++++++ .../interpreter/NumberExpression.java | 22 +++++++++++++++++ .../iluwatar/interpreter/PlusExpression.java | 22 +++++++++++++++++ .../com/iluwatar/interpreter/AppTest.java | 22 +++++++++++++++++ .../iluwatar/interpreter/ExpressionTest.java | 22 +++++++++++++++++ .../interpreter/MinusExpressionTest.java | 22 +++++++++++++++++ .../interpreter/MultiplyExpressionTest.java | 22 +++++++++++++++++ .../interpreter/NumberExpressionTest.java | 22 +++++++++++++++++ .../interpreter/PlusExpressionTest.java | 22 +++++++++++++++++ iterator/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/iterator/App.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/iterator/Item.java | 22 +++++++++++++++++ .../com/iluwatar/iterator/ItemIterator.java | 22 +++++++++++++++++ .../java/com/iluwatar/iterator/ItemType.java | 22 +++++++++++++++++ .../com/iluwatar/iterator/TreasureChest.java | 22 +++++++++++++++++ .../iterator/TreasureChestItemIterator.java | 22 +++++++++++++++++ .../java/com/iluwatar/iterator/AppTest.java | 22 +++++++++++++++++ .../iluwatar/iterator/TreasureChestTest.java | 22 +++++++++++++++++ layers/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/layers/App.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/layers/Cake.java | 22 +++++++++++++++++ .../iluwatar/layers/CakeBakingException.java | 22 +++++++++++++++++ .../iluwatar/layers/CakeBakingService.java | 22 +++++++++++++++++ .../layers/CakeBakingServiceImpl.java | 22 +++++++++++++++++ .../java/com/iluwatar/layers/CakeDao.java | 22 +++++++++++++++++ .../java/com/iluwatar/layers/CakeInfo.java | 22 +++++++++++++++++ .../java/com/iluwatar/layers/CakeLayer.java | 22 +++++++++++++++++ .../com/iluwatar/layers/CakeLayerDao.java | 22 +++++++++++++++++ .../com/iluwatar/layers/CakeLayerInfo.java | 22 +++++++++++++++++ .../java/com/iluwatar/layers/CakeTopping.java | 22 +++++++++++++++++ .../com/iluwatar/layers/CakeToppingDao.java | 22 +++++++++++++++++ .../com/iluwatar/layers/CakeToppingInfo.java | 22 +++++++++++++++++ .../com/iluwatar/layers/CakeViewImpl.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/layers/View.java | 22 +++++++++++++++++ .../main/resources/META-INF/persistence.xml | 24 +++++++++++++++++++ .../src/main/resources/applicationContext.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/layers/AppTest.java | 22 +++++++++++++++++ .../layers/CakeBakingExceptionTest.java | 22 +++++++++++++++++ .../layers/CakeBakingServiceImplTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/layers/CakeTest.java | 22 +++++++++++++++++ .../com/iluwatar/layers/CakeViewImplTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/layers/StdOutTest.java | 22 +++++++++++++++++ lazy-loading/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/lazy/loading/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/lazy/loading/Heavy.java | 22 +++++++++++++++++ .../iluwatar/lazy/loading/HolderNaive.java | 22 +++++++++++++++++ .../lazy/loading/HolderThreadSafe.java | 22 +++++++++++++++++ .../iluwatar/lazy/loading/Java8Holder.java | 22 +++++++++++++++++ .../lazy/loading/AbstractHolderTest.java | 22 +++++++++++++++++ .../com/iluwatar/lazy/loading/AppTest.java | 22 +++++++++++++++++ .../lazy/loading/HolderNaiveTest.java | 22 +++++++++++++++++ .../lazy/loading/HolderThreadSafeTest.java | 22 +++++++++++++++++ .../lazy/loading/Java8HolderTest.java | 22 +++++++++++++++++ mediator/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/mediator/Action.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/mediator/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/mediator/Hobbit.java | 22 +++++++++++++++++ .../java/com/iluwatar/mediator/Hunter.java | 22 +++++++++++++++++ .../java/com/iluwatar/mediator/Party.java | 22 +++++++++++++++++ .../java/com/iluwatar/mediator/PartyImpl.java | 22 +++++++++++++++++ .../com/iluwatar/mediator/PartyMember.java | 22 +++++++++++++++++ .../iluwatar/mediator/PartyMemberBase.java | 22 +++++++++++++++++ .../java/com/iluwatar/mediator/Rogue.java | 22 +++++++++++++++++ .../java/com/iluwatar/mediator/Wizard.java | 22 +++++++++++++++++ .../java/com/iluwatar/mediator/AppTest.java | 22 +++++++++++++++++ .../com/iluwatar/mediator/PartyImplTest.java | 22 +++++++++++++++++ .../iluwatar/mediator/PartyMemberTest.java | 22 +++++++++++++++++ memento/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/memento/App.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/memento/Star.java | 22 +++++++++++++++++ .../com/iluwatar/memento/StarMemento.java | 22 +++++++++++++++++ .../java/com/iluwatar/memento/StarType.java | 22 +++++++++++++++++ .../java/com/iluwatar/memento/AppTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/memento/StarTest.java | 22 +++++++++++++++++ message-channel/pom.xml | 24 +++++++++++++++++++ .../com/iluwatar/message/channel/App.java | 22 +++++++++++++++++ .../com/iluwatar/message/channel/AppTest.java | 22 +++++++++++++++++ model-view-controller/pom.xml | 24 +++++++++++++++++++ .../iluwatar/model/view/controller/App.java | 22 +++++++++++++++++ .../model/view/controller/Fatigue.java | 22 +++++++++++++++++ .../view/controller/GiantController.java | 22 +++++++++++++++++ .../model/view/controller/GiantModel.java | 22 +++++++++++++++++ .../model/view/controller/GiantView.java | 22 +++++++++++++++++ .../model/view/controller/Health.java | 22 +++++++++++++++++ .../model/view/controller/Nourishment.java | 22 +++++++++++++++++ .../model/view/controller/AppTest.java | 22 +++++++++++++++++ .../view/controller/GiantControllerTest.java | 22 +++++++++++++++++ .../model/view/controller/GiantModelTest.java | 22 +++++++++++++++++ .../model/view/controller/GiantViewTest.java | 22 +++++++++++++++++ model-view-presenter/etc/data/test.txt | 23 ++++++++++++++++++ model-view-presenter/pom.xml | 24 +++++++++++++++++++ .../iluwatar/model/view/presenter/App.java | 22 +++++++++++++++++ .../model/view/presenter/FileLoader.java | 22 +++++++++++++++++ .../view/presenter/FileSelectorJFrame.java | 22 +++++++++++++++++ .../view/presenter/FileSelectorPresenter.java | 22 +++++++++++++++++ .../view/presenter/FileSelectorStub.java | 22 +++++++++++++++++ .../view/presenter/FileSelectorView.java | 22 +++++++++++++++++ .../model/view/presenter/AppTest.java | 22 +++++++++++++++++ .../model/view/presenter/FileLoaderTest.java | 22 +++++++++++++++++ .../presenter/FileSelectorPresenterTest.java | 22 +++++++++++++++++ monostate/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/monostate/App.java | 22 +++++++++++++++++ .../com/iluwatar/monostate/LoadBalancer.java | 22 +++++++++++++++++ .../java/com/iluwatar/monostate/Request.java | 22 +++++++++++++++++ .../java/com/iluwatar/monostate/Server.java | 22 +++++++++++++++++ .../java/com/iluwatar/monostate/AppTest.java | 22 +++++++++++++++++ .../iluwatar/monostate/LoadBalancerTest.java | 22 +++++++++++++++++ multiton/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/multiton/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/multiton/Nazgul.java | 22 +++++++++++++++++ .../com/iluwatar/multiton/NazgulName.java | 22 +++++++++++++++++ .../java/com/iluwatar/multiton/AppTest.java | 22 +++++++++++++++++ .../com/iluwatar/multiton/NazgulTest.java | 22 +++++++++++++++++ .../webapp/ide/intellij/launch/README.txt | 23 ++++++++++++++++++ .../intellij/launch/SimpleApp_PROTOTYPE.xml | 24 +++++++++++++++++++ .../launch/SimpleApp__enhance_only_.xml | 24 +++++++++++++++++++ .../webapp/src/main/webapp/about/index.html | 24 +++++++++++++++++++ .../src/main/webapp/scripts/application.js | 22 +++++++++++++++++ null-object/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/nullobject/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/nullobject/Node.java | 22 +++++++++++++++++ .../com/iluwatar/nullobject/NodeImpl.java | 22 +++++++++++++++++ .../com/iluwatar/nullobject/NullNode.java | 22 +++++++++++++++++ .../java/com/iluwatar/nullobject/AppTest.java | 22 +++++++++++++++++ .../com/iluwatar/nullobject/NullNodeTest.java | 22 +++++++++++++++++ .../com/iluwatar/nullobject/StdOutTest.java | 22 +++++++++++++++++ .../com/iluwatar/nullobject/TreeTest.java | 22 +++++++++++++++++ object-pool/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/object/pool/App.java | 22 +++++++++++++++++ .../com/iluwatar/object/pool/ObjectPool.java | 22 +++++++++++++++++ .../com/iluwatar/object/pool/Oliphaunt.java | 22 +++++++++++++++++ .../iluwatar/object/pool/OliphauntPool.java | 22 +++++++++++++++++ .../com/iluwatar/object/pool/AppTest.java | 22 +++++++++++++++++ .../object/pool/OliphauntPoolTest.java | 22 +++++++++++++++++ observer/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/observer/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/observer/Hobbits.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/observer/Orcs.java | 22 +++++++++++++++++ .../java/com/iluwatar/observer/Weather.java | 22 +++++++++++++++++ .../iluwatar/observer/WeatherObserver.java | 22 +++++++++++++++++ .../com/iluwatar/observer/WeatherType.java | 22 +++++++++++++++++ .../iluwatar/observer/generic/GHobbits.java | 22 +++++++++++++++++ .../com/iluwatar/observer/generic/GOrcs.java | 22 +++++++++++++++++ .../iluwatar/observer/generic/GWeather.java | 22 +++++++++++++++++ .../iluwatar/observer/generic/Observable.java | 22 +++++++++++++++++ .../iluwatar/observer/generic/Observer.java | 22 +++++++++++++++++ .../com/iluwatar/observer/generic/Race.java | 22 +++++++++++++++++ .../java/com/iluwatar/observer/AppTest.java | 22 +++++++++++++++++ .../com/iluwatar/observer/HobbitsTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/observer/OrcsTest.java | 22 +++++++++++++++++ .../com/iluwatar/observer/StdOutTest.java | 22 +++++++++++++++++ .../observer/WeatherObserverTest.java | 22 +++++++++++++++++ .../com/iluwatar/observer/WeatherTest.java | 22 +++++++++++++++++ .../observer/generic/GHobbitsTest.java | 22 +++++++++++++++++ .../observer/generic/GWeatherTest.java | 22 +++++++++++++++++ .../observer/generic/ObserverTest.java | 22 +++++++++++++++++ .../iluwatar/observer/generic/OrcsTest.java | 22 +++++++++++++++++ poison-pill/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/poison/pill/App.java | 22 +++++++++++++++++ .../com/iluwatar/poison/pill/Consumer.java | 22 +++++++++++++++++ .../com/iluwatar/poison/pill/Message.java | 22 +++++++++++++++++ .../iluwatar/poison/pill/MessageQueue.java | 22 +++++++++++++++++ .../iluwatar/poison/pill/MqPublishPoint.java | 22 +++++++++++++++++ .../poison/pill/MqSubscribePoint.java | 22 +++++++++++++++++ .../com/iluwatar/poison/pill/Producer.java | 22 +++++++++++++++++ .../iluwatar/poison/pill/SimpleMessage.java | 22 +++++++++++++++++ .../poison/pill/SimpleMessageQueue.java | 22 +++++++++++++++++ .../com/iluwatar/poison/pill/AppTest.java | 22 +++++++++++++++++ .../iluwatar/poison/pill/ConsumerTest.java | 22 +++++++++++++++++ .../poison/pill/PoisonMessageTest.java | 22 +++++++++++++++++ .../iluwatar/poison/pill/ProducerTest.java | 22 +++++++++++++++++ .../poison/pill/SimpleMessageTest.java | 22 +++++++++++++++++ .../com/iluwatar/poison/pill/StdOutTest.java | 22 +++++++++++++++++ pom.xml | 24 +++++++++++++++++++ private-class-data/pom.xml | 24 +++++++++++++++++++ .../com/iluwatar/privateclassdata/App.java | 22 +++++++++++++++++ .../privateclassdata/ImmutableStew.java | 22 +++++++++++++++++ .../com/iluwatar/privateclassdata/Stew.java | 22 +++++++++++++++++ .../iluwatar/privateclassdata/StewData.java | 22 +++++++++++++++++ .../iluwatar/privateclassdata/AppTest.java | 22 +++++++++++++++++ .../privateclassdata/ImmutableStewTest.java | 22 +++++++++++++++++ .../iluwatar/privateclassdata/StdOutTest.java | 22 +++++++++++++++++ .../iluwatar/privateclassdata/StewTest.java | 22 +++++++++++++++++ producer-consumer/pom.xml | 24 +++++++++++++++++++ .../com/iluwatar/producer/consumer/App.java | 22 +++++++++++++++++ .../iluwatar/producer/consumer/Consumer.java | 22 +++++++++++++++++ .../com/iluwatar/producer/consumer/Item.java | 22 +++++++++++++++++ .../iluwatar/producer/consumer/ItemQueue.java | 22 +++++++++++++++++ .../iluwatar/producer/consumer/Producer.java | 22 +++++++++++++++++ .../iluwatar/producer/consumer/AppTest.java | 22 +++++++++++++++++ .../producer/consumer/ConsumerTest.java | 22 +++++++++++++++++ .../producer/consumer/ProducerTest.java | 22 +++++++++++++++++ .../producer/consumer/StdOutTest.java | 22 +++++++++++++++++ property/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/property/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/property/Character.java | 22 +++++++++++++++++ .../java/com/iluwatar/property/Prototype.java | 22 +++++++++++++++++ .../java/com/iluwatar/property/Stats.java | 22 +++++++++++++++++ .../java/com/iluwatar/property/AppTest.java | 22 +++++++++++++++++ .../com/iluwatar/property/CharacterTest.java | 22 +++++++++++++++++ prototype/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/prototype/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/prototype/Beast.java | 22 +++++++++++++++++ .../java/com/iluwatar/prototype/ElfBeast.java | 22 +++++++++++++++++ .../java/com/iluwatar/prototype/ElfMage.java | 22 +++++++++++++++++ .../com/iluwatar/prototype/ElfWarlord.java | 22 +++++++++++++++++ .../com/iluwatar/prototype/HeroFactory.java | 22 +++++++++++++++++ .../iluwatar/prototype/HeroFactoryImpl.java | 22 +++++++++++++++++ .../java/com/iluwatar/prototype/Mage.java | 22 +++++++++++++++++ .../java/com/iluwatar/prototype/OrcBeast.java | 22 +++++++++++++++++ .../java/com/iluwatar/prototype/OrcMage.java | 22 +++++++++++++++++ .../com/iluwatar/prototype/OrcWarlord.java | 22 +++++++++++++++++ .../com/iluwatar/prototype/Prototype.java | 22 +++++++++++++++++ .../java/com/iluwatar/prototype/Warlord.java | 22 +++++++++++++++++ .../java/com/iluwatar/prototype/AppTest.java | 22 +++++++++++++++++ .../prototype/HeroFactoryImplTest.java | 22 +++++++++++++++++ .../com/iluwatar/prototype/PrototypeTest.java | 22 +++++++++++++++++ proxy/pom.xml | 24 +++++++++++++++++++ .../src/main/java/com/iluwatar/proxy/App.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/proxy/Wizard.java | 22 +++++++++++++++++ .../java/com/iluwatar/proxy/WizardTower.java | 22 +++++++++++++++++ .../com/iluwatar/proxy/WizardTowerProxy.java | 22 +++++++++++++++++ .../test/java/com/iluwatar/proxy/AppTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/proxy/StdOutTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/proxy/WizardTest.java | 22 +++++++++++++++++ .../iluwatar/proxy/WizardTowerProxyTest.java | 22 +++++++++++++++++ .../com/iluwatar/proxy/WizardTowerTest.java | 22 +++++++++++++++++ publish-subscribe/pom.xml | 24 +++++++++++++++++++ .../com/iluwatar/publish/subscribe/App.java | 22 +++++++++++++++++ .../iluwatar/publish/subscribe/AppTest.java | 22 +++++++++++++++++ reactor/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/reactor/app/App.java | 22 +++++++++++++++++ .../com/iluwatar/reactor/app/AppClient.java | 22 +++++++++++++++++ .../iluwatar/reactor/app/LoggingHandler.java | 22 +++++++++++++++++ .../reactor/framework/AbstractNioChannel.java | 22 +++++++++++++++++ .../reactor/framework/ChannelHandler.java | 22 +++++++++++++++++ .../reactor/framework/Dispatcher.java | 22 +++++++++++++++++ .../reactor/framework/NioDatagramChannel.java | 22 +++++++++++++++++ .../reactor/framework/NioReactor.java | 22 +++++++++++++++++ .../framework/NioServerSocketChannel.java | 22 +++++++++++++++++ .../framework/SameThreadDispatcher.java | 22 +++++++++++++++++ .../framework/ThreadPoolDispatcher.java | 22 +++++++++++++++++ .../com/iluwatar/reactor/app/AppTest.java | 22 +++++++++++++++++ reader-writer-lock/pom.xml | 24 +++++++++++++++++++ .../com/iluwatar/reader/writer/lock/App.java | 22 +++++++++++++++++ .../iluwatar/reader/writer/lock/Reader.java | 22 +++++++++++++++++ .../reader/writer/lock/ReaderWriterLock.java | 22 +++++++++++++++++ .../iluwatar/reader/writer/lock/Writer.java | 22 +++++++++++++++++ .../iluwatar/reader/writer/lock/AppTest.java | 22 +++++++++++++++++ .../writer/lock/ReaderAndWriterTest.java | 22 +++++++++++++++++ .../reader/writer/lock/ReaderTest.java | 22 +++++++++++++++++ .../reader/writer/lock/StdOutTest.java | 22 +++++++++++++++++ .../reader/writer/lock/WriterTest.java | 22 +++++++++++++++++ repository/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/repository/App.java | 22 +++++++++++++++++ .../com/iluwatar/repository/AppConfig.java | 22 +++++++++++++++++ .../java/com/iluwatar/repository/Person.java | 22 +++++++++++++++++ .../iluwatar/repository/PersonRepository.java | 22 +++++++++++++++++ .../repository/PersonSpecifications.java | 22 +++++++++++++++++ .../main/resources/META-INF/persistence.xml | 24 +++++++++++++++++++ .../src/main/resources/applicationContext.xml | 24 +++++++++++++++++++ .../AnnotationBasedRepositoryTest.java | 22 +++++++++++++++++ .../iluwatar/repository/AppConfigTest.java | 22 +++++++++++++++++ .../iluwatar/repository/RepositoryTest.java | 22 +++++++++++++++++ .../pom.xml | 24 +++++++++++++++++++ .../acquisition/is/initialization/App.java | 22 +++++++++++++++++ .../is/initialization/SlidingDoor.java | 22 +++++++++++++++++ .../is/initialization/TreasureChest.java | 22 +++++++++++++++++ .../is/initialization/AppTest.java | 22 +++++++++++++++++ .../is/initialization/ClosableTest.java | 22 +++++++++++++++++ .../is/initialization/StdOutTest.java | 22 +++++++++++++++++ servant/pom.xml | 24 +++++++++++++++++++ servant/src/etc/servant.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/servant/App.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/servant/King.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/servant/Queen.java | 22 +++++++++++++++++ .../java/com/iluwatar/servant/Royalty.java | 22 +++++++++++++++++ .../java/com/iluwatar/servant/Servant.java | 22 +++++++++++++++++ .../java/com/iluwatar/servant/AppTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/servant/KingTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/servant/QueenTest.java | 22 +++++++++++++++++ .../com/iluwatar/servant/ServantTest.java | 22 +++++++++++++++++ service-layer/bin/pom.xml | 24 +++++++++++++++++++ service-layer/pom.xml | 24 +++++++++++++++++++ .../com/iluwatar/servicelayer/app/App.java | 22 +++++++++++++++++ .../servicelayer/common/BaseEntity.java | 22 +++++++++++++++++ .../com/iluwatar/servicelayer/common/Dao.java | 22 +++++++++++++++++ .../servicelayer/common/DaoBaseImpl.java | 22 +++++++++++++++++ .../servicelayer/hibernate/HibernateUtil.java | 22 +++++++++++++++++ .../servicelayer/magic/MagicService.java | 22 +++++++++++++++++ .../servicelayer/magic/MagicServiceImpl.java | 22 +++++++++++++++++ .../iluwatar/servicelayer/spell/Spell.java | 22 +++++++++++++++++ .../iluwatar/servicelayer/spell/SpellDao.java | 22 +++++++++++++++++ .../servicelayer/spell/SpellDaoImpl.java | 22 +++++++++++++++++ .../servicelayer/spellbook/Spellbook.java | 22 +++++++++++++++++ .../servicelayer/spellbook/SpellbookDao.java | 22 +++++++++++++++++ .../spellbook/SpellbookDaoImpl.java | 22 +++++++++++++++++ .../iluwatar/servicelayer/wizard/Wizard.java | 22 +++++++++++++++++ .../servicelayer/wizard/WizardDao.java | 22 +++++++++++++++++ .../servicelayer/wizard/WizardDaoImpl.java | 22 +++++++++++++++++ .../iluwatar/servicelayer/app/AppTest.java | 22 +++++++++++++++++ .../servicelayer/common/BaseDaoTest.java | 22 +++++++++++++++++ .../magic/MagicServiceImplTest.java | 22 +++++++++++++++++ .../servicelayer/spell/SpellDaoImplTest.java | 22 +++++++++++++++++ .../spellbook/SpellbookDaoImplTest.java | 22 +++++++++++++++++ .../wizard/WizardDaoImplTest.java | 22 +++++++++++++++++ service-locator/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/servicelocator/App.java | 22 +++++++++++++++++ .../iluwatar/servicelocator/InitContext.java | 22 +++++++++++++++++ .../com/iluwatar/servicelocator/Service.java | 22 +++++++++++++++++ .../iluwatar/servicelocator/ServiceCache.java | 22 +++++++++++++++++ .../iluwatar/servicelocator/ServiceImpl.java | 22 +++++++++++++++++ .../servicelocator/ServiceLocator.java | 22 +++++++++++++++++ .../com/iluwatar/servicelocator/AppTest.java | 22 +++++++++++++++++ .../servicelocator/ServiceLocatorTest.java | 22 +++++++++++++++++ singleton/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/singleton/App.java | 22 +++++++++++++++++ .../iluwatar/singleton/EnumIvoryTower.java | 22 +++++++++++++++++ .../InitializingOnDemandHolderIdiom.java | 22 +++++++++++++++++ .../com/iluwatar/singleton/IvoryTower.java | 22 +++++++++++++++++ .../ThreadSafeDoubleCheckLocking.java | 22 +++++++++++++++++ .../ThreadSafeLazyLoadedIvoryTower.java | 22 +++++++++++++++++ .../java/com/iluwatar/singleton/AppTest.java | 22 +++++++++++++++++ .../singleton/EnumIvoryTowerTest.java | 22 +++++++++++++++++ .../InitializingOnDemandHolderIdiomTest.java | 22 +++++++++++++++++ .../iluwatar/singleton/IvoryTowerTest.java | 22 +++++++++++++++++ .../com/iluwatar/singleton/SingletonTest.java | 22 +++++++++++++++++ .../ThreadSafeDoubleCheckLockingTest.java | 22 +++++++++++++++++ .../ThreadSafeLazyLoadedIvoryTowerTest.java | 22 +++++++++++++++++ specification/pom.xml | 24 +++++++++++++++++++ .../com/iluwatar/specification/app/App.java | 22 +++++++++++++++++ .../creature/AbstractCreature.java | 22 +++++++++++++++++ .../specification/creature/Creature.java | 22 +++++++++++++++++ .../specification/creature/Dragon.java | 22 +++++++++++++++++ .../specification/creature/Goblin.java | 22 +++++++++++++++++ .../specification/creature/KillerBee.java | 22 +++++++++++++++++ .../specification/creature/Octopus.java | 22 +++++++++++++++++ .../specification/creature/Shark.java | 22 +++++++++++++++++ .../specification/creature/Troll.java | 22 +++++++++++++++++ .../specification/property/Color.java | 22 +++++++++++++++++ .../specification/property/Movement.java | 22 +++++++++++++++++ .../iluwatar/specification/property/Size.java | 22 +++++++++++++++++ .../specification/selector/ColorSelector.java | 22 +++++++++++++++++ .../selector/MovementSelector.java | 22 +++++++++++++++++ .../specification/selector/SizeSelector.java | 22 +++++++++++++++++ .../iluwatar/specification/app/AppTest.java | 22 +++++++++++++++++ .../specification/creature/CreatureTest.java | 22 +++++++++++++++++ .../selector/ColorSelectorTest.java | 22 +++++++++++++++++ .../selector/MovementSelectorTest.java | 22 +++++++++++++++++ .../selector/SizeSelectorTest.java | 22 +++++++++++++++++ state/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/state/AngryState.java | 22 +++++++++++++++++ .../src/main/java/com/iluwatar/state/App.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/state/Mammoth.java | 22 +++++++++++++++++ .../com/iluwatar/state/PeacefulState.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/state/State.java | 22 +++++++++++++++++ .../test/java/com/iluwatar/state/AppTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/state/MammothTest.java | 22 +++++++++++++++++ step-builder/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/stepbuilder/App.java | 22 +++++++++++++++++ .../com/iluwatar/stepbuilder/Character.java | 22 +++++++++++++++++ .../stepbuilder/CharacterStepBuilder.java | 22 +++++++++++++++++ .../com/iluwatar/stepbuilder/AppTest.java | 22 +++++++++++++++++ .../stepbuilder/CharacterStepBuilderTest.java | 22 +++++++++++++++++ strategy/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/strategy/App.java | 22 +++++++++++++++++ .../com/iluwatar/strategy/DragonSlayer.java | 22 +++++++++++++++++ .../strategy/DragonSlayingStrategy.java | 22 +++++++++++++++++ .../com/iluwatar/strategy/MeleeStrategy.java | 22 +++++++++++++++++ .../iluwatar/strategy/ProjectileStrategy.java | 22 +++++++++++++++++ .../com/iluwatar/strategy/SpellStrategy.java | 22 +++++++++++++++++ .../java/com/iluwatar/strategy/AppTest.java | 22 +++++++++++++++++ .../iluwatar/strategy/DragonSlayerTest.java | 22 +++++++++++++++++ .../strategy/DragonSlayingStrategyTest.java | 22 +++++++++++++++++ template-method/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/templatemethod/App.java | 22 +++++++++++++++++ .../templatemethod/HalflingThief.java | 22 +++++++++++++++++ .../templatemethod/HitAndRunMethod.java | 22 +++++++++++++++++ .../templatemethod/StealingMethod.java | 22 +++++++++++++++++ .../iluwatar/templatemethod/SubtleMethod.java | 22 +++++++++++++++++ .../com/iluwatar/templatemethod/AppTest.java | 22 +++++++++++++++++ .../templatemethod/HalflingThiefTest.java | 22 +++++++++++++++++ .../templatemethod/HitAndRunMethodTest.java | 22 +++++++++++++++++ .../templatemethod/StealingMethodTest.java | 22 +++++++++++++++++ .../templatemethod/SubtleMethodTest.java | 22 +++++++++++++++++ thread-pool/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/threadpool/App.java | 22 +++++++++++++++++ .../iluwatar/threadpool/CoffeeMakingTask.java | 22 +++++++++++++++++ .../threadpool/PotatoPeelingTask.java | 22 +++++++++++++++++ .../java/com/iluwatar/threadpool/Task.java | 22 +++++++++++++++++ .../java/com/iluwatar/threadpool/Worker.java | 22 +++++++++++++++++ .../java/com/iluwatar/threadpool/AppTest.java | 22 +++++++++++++++++ .../threadpool/CoffeeMakingTaskTest.java | 22 +++++++++++++++++ .../threadpool/PotatoPeelingTaskTest.java | 22 +++++++++++++++++ .../com/iluwatar/threadpool/TaskTest.java | 22 +++++++++++++++++ .../com/iluwatar/threadpool/WorkerTest.java | 22 +++++++++++++++++ tolerant-reader/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/tolerantreader/App.java | 22 +++++++++++++++++ .../iluwatar/tolerantreader/RainbowFish.java | 22 +++++++++++++++++ .../tolerantreader/RainbowFishSerializer.java | 22 +++++++++++++++++ .../tolerantreader/RainbowFishV2.java | 22 +++++++++++++++++ .../com/iluwatar/tolerantreader/AppTest.java | 22 +++++++++++++++++ .../RainbowFishSerializerTest.java | 22 +++++++++++++++++ .../tolerantreader/RainbowFishTest.java | 22 +++++++++++++++++ .../tolerantreader/RainbowFishV2Test.java | 22 +++++++++++++++++ twin/pom.xml | 24 +++++++++++++++++++ twin/src/main/java/com/iluwatar/twin/App.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/twin/BallItem.java | 22 +++++++++++++++++ .../java/com/iluwatar/twin/BallThread.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/twin/GameItem.java | 22 +++++++++++++++++ .../test/java/com/iluwatar/twin/AppTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/twin/BallItemTest.java | 22 +++++++++++++++++ .../com/iluwatar/twin/BallThreadTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/twin/StdOutTest.java | 22 +++++++++++++++++ update-ghpages.sh | 23 ++++++++++++++++++ visitor/pom.xml | 24 +++++++++++++++++++ .../main/java/com/iluwatar/visitor/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/visitor/Commander.java | 22 +++++++++++++++++ .../iluwatar/visitor/CommanderVisitor.java | 22 +++++++++++++++++ .../java/com/iluwatar/visitor/Sergeant.java | 22 +++++++++++++++++ .../com/iluwatar/visitor/SergeantVisitor.java | 22 +++++++++++++++++ .../java/com/iluwatar/visitor/Soldier.java | 22 +++++++++++++++++ .../com/iluwatar/visitor/SoldierVisitor.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/visitor/Unit.java | 22 +++++++++++++++++ .../com/iluwatar/visitor/UnitVisitor.java | 22 +++++++++++++++++ .../java/com/iluwatar/visitor/AppTest.java | 22 +++++++++++++++++ .../com/iluwatar/visitor/CommanderTest.java | 22 +++++++++++++++++ .../visitor/CommanderVisitorTest.java | 22 +++++++++++++++++ .../com/iluwatar/visitor/SergeantTest.java | 22 +++++++++++++++++ .../iluwatar/visitor/SergeantVisitorTest.java | 22 +++++++++++++++++ .../com/iluwatar/visitor/SoldierTest.java | 22 +++++++++++++++++ .../iluwatar/visitor/SoldierVisitorTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/visitor/StdOutTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/visitor/UnitTest.java | 22 +++++++++++++++++ .../com/iluwatar/visitor/VisitorTest.java | 22 +++++++++++++++++ 765 files changed, 16992 insertions(+) diff --git a/abstract-factory/pom.xml b/abstract-factory/pom.xml index 71ea6dc98..00118f62c 100644 --- a/abstract-factory/pom.xml +++ b/abstract-factory/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java index cdde3bd8f..15265c0d4 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.abstractfactory; /** diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Army.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Army.java index 8e97d3f4e..d9e7f9989 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Army.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Army.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.abstractfactory; /** diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Castle.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Castle.java index 3a36513bf..adea2327e 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Castle.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/Castle.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.abstractfactory; /** diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfArmy.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfArmy.java index d7ae734d2..2969a8615 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfArmy.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfArmy.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.abstractfactory; /** diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfCastle.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfCastle.java index e53b198d7..5321bfeba 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfCastle.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfCastle.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.abstractfactory; /** diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKing.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKing.java index 36669f42f..1eb892e6f 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKing.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKing.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.abstractfactory; /** diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKingdomFactory.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKingdomFactory.java index 7c8435056..9d48ab25f 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKingdomFactory.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKingdomFactory.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.abstractfactory; /** diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/King.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/King.java index 38e6b9f4d..ec1cff4d1 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/King.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/King.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.abstractfactory; /** diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/KingdomFactory.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/KingdomFactory.java index e303b32f4..d8258fd8b 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/KingdomFactory.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/KingdomFactory.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.abstractfactory; /** diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcArmy.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcArmy.java index de16e5007..261ad37c9 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcArmy.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcArmy.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.abstractfactory; /** diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcCastle.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcCastle.java index b355744ce..cb2a92652 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcCastle.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcCastle.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.abstractfactory; /** diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKing.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKing.java index eac96913f..ba7576492 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKing.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKing.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.abstractfactory; /** diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKingdomFactory.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKingdomFactory.java index 18301c955..2d740cf0d 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKingdomFactory.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKingdomFactory.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.abstractfactory; /** diff --git a/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java b/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java index 5e3869fc8..0270f4cef 100644 --- a/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java +++ b/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.abstractfactory; import static org.junit.Assert.assertEquals; diff --git a/adapter/pom.xml b/adapter/pom.xml index 736ce16ec..fc5fdff23 100644 --- a/adapter/pom.xml +++ b/adapter/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/adapter/src/main/java/com/iluwatar/adapter/App.java b/adapter/src/main/java/com/iluwatar/adapter/App.java index d57cb91e4..29c313b59 100644 --- a/adapter/src/main/java/com/iluwatar/adapter/App.java +++ b/adapter/src/main/java/com/iluwatar/adapter/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.adapter; /** diff --git a/adapter/src/main/java/com/iluwatar/adapter/BattleFishingBoat.java b/adapter/src/main/java/com/iluwatar/adapter/BattleFishingBoat.java index 3f573337f..a591818fe 100644 --- a/adapter/src/main/java/com/iluwatar/adapter/BattleFishingBoat.java +++ b/adapter/src/main/java/com/iluwatar/adapter/BattleFishingBoat.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.adapter; /** diff --git a/adapter/src/main/java/com/iluwatar/adapter/BattleShip.java b/adapter/src/main/java/com/iluwatar/adapter/BattleShip.java index d4f6036e6..6a29a5034 100644 --- a/adapter/src/main/java/com/iluwatar/adapter/BattleShip.java +++ b/adapter/src/main/java/com/iluwatar/adapter/BattleShip.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.adapter; /** diff --git a/adapter/src/main/java/com/iluwatar/adapter/Captain.java b/adapter/src/main/java/com/iluwatar/adapter/Captain.java index 8c48daf69..34f783cd4 100644 --- a/adapter/src/main/java/com/iluwatar/adapter/Captain.java +++ b/adapter/src/main/java/com/iluwatar/adapter/Captain.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.adapter; /** diff --git a/adapter/src/main/java/com/iluwatar/adapter/FishingBoat.java b/adapter/src/main/java/com/iluwatar/adapter/FishingBoat.java index 509bb8cdb..307437038 100644 --- a/adapter/src/main/java/com/iluwatar/adapter/FishingBoat.java +++ b/adapter/src/main/java/com/iluwatar/adapter/FishingBoat.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.adapter; /** diff --git a/adapter/src/test/java/com/iluwatar/adapter/AdapterPatternTest.java b/adapter/src/test/java/com/iluwatar/adapter/AdapterPatternTest.java index 9fce02a3c..263c9ab02 100644 --- a/adapter/src/test/java/com/iluwatar/adapter/AdapterPatternTest.java +++ b/adapter/src/test/java/com/iluwatar/adapter/AdapterPatternTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.adapter; import org.junit.Before; diff --git a/async-method-invocation/pom.xml b/async-method-invocation/pom.xml index 3f2a62aee..815b347da 100644 --- a/async-method-invocation/pom.xml +++ b/async-method-invocation/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/App.java b/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/App.java index 6f2d4a8fc..0a56dc166 100644 --- a/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/App.java +++ b/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.async.method.invocation; import java.util.concurrent.Callable; diff --git a/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncCallback.java b/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncCallback.java index 8e4d77443..2fddba683 100644 --- a/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncCallback.java +++ b/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncCallback.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.async.method.invocation; import java.util.Optional; diff --git a/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncExecutor.java b/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncExecutor.java index bd3c98339..eb1afa4f3 100644 --- a/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncExecutor.java +++ b/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncExecutor.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.async.method.invocation; import java.util.concurrent.Callable; diff --git a/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncResult.java b/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncResult.java index d64180dad..bcd97adbc 100644 --- a/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncResult.java +++ b/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncResult.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.async.method.invocation; import java.util.concurrent.ExecutionException; diff --git a/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutor.java b/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutor.java index 6e86b26e4..7f96d9ab7 100644 --- a/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutor.java +++ b/async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutor.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.async.method.invocation; import java.util.Optional; diff --git a/async-method-invocation/src/test/java/com/iluwatar/async/method/invocation/AppTest.java b/async-method-invocation/src/test/java/com/iluwatar/async/method/invocation/AppTest.java index e077701c0..117a75f2a 100644 --- a/async-method-invocation/src/test/java/com/iluwatar/async/method/invocation/AppTest.java +++ b/async-method-invocation/src/test/java/com/iluwatar/async/method/invocation/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.async.method.invocation; import org.junit.Test; diff --git a/async-method-invocation/src/test/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutorTest.java b/async-method-invocation/src/test/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutorTest.java index c9d222e55..b4a23222a 100644 --- a/async-method-invocation/src/test/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutorTest.java +++ b/async-method-invocation/src/test/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutorTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.async.method.invocation; import org.junit.Test; diff --git a/bridge/pom.xml b/bridge/pom.xml index 8f0c00260..eee2e1c6c 100644 --- a/bridge/pom.xml +++ b/bridge/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/bridge/src/main/java/com/iluwatar/bridge/App.java b/bridge/src/main/java/com/iluwatar/bridge/App.java index 6d902fe21..27b37b6b3 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/App.java +++ b/bridge/src/main/java/com/iluwatar/bridge/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; /** diff --git a/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeapon.java b/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeapon.java index 572db251b..045039ef0 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeapon.java +++ b/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeapon.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; /** diff --git a/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeaponImpl.java b/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeaponImpl.java index cf1b47e9a..83f31e709 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeaponImpl.java +++ b/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeaponImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; /** diff --git a/bridge/src/main/java/com/iluwatar/bridge/Excalibur.java b/bridge/src/main/java/com/iluwatar/bridge/Excalibur.java index 39365eaf8..2523b3557 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/Excalibur.java +++ b/bridge/src/main/java/com/iluwatar/bridge/Excalibur.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; /** diff --git a/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeapon.java b/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeapon.java index b4ae9a8f8..0988c179c 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeapon.java +++ b/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeapon.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; /** diff --git a/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeaponImpl.java b/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeaponImpl.java index 022c06565..4bdb8801b 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeaponImpl.java +++ b/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeaponImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; /** diff --git a/bridge/src/main/java/com/iluwatar/bridge/MagicWeapon.java b/bridge/src/main/java/com/iluwatar/bridge/MagicWeapon.java index 5e17d2b40..038da7c4f 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/MagicWeapon.java +++ b/bridge/src/main/java/com/iluwatar/bridge/MagicWeapon.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; /** diff --git a/bridge/src/main/java/com/iluwatar/bridge/MagicWeaponImpl.java b/bridge/src/main/java/com/iluwatar/bridge/MagicWeaponImpl.java index bc672335e..01f91825b 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/MagicWeaponImpl.java +++ b/bridge/src/main/java/com/iluwatar/bridge/MagicWeaponImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; /** diff --git a/bridge/src/main/java/com/iluwatar/bridge/Mjollnir.java b/bridge/src/main/java/com/iluwatar/bridge/Mjollnir.java index 13641c335..0cc31b471 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/Mjollnir.java +++ b/bridge/src/main/java/com/iluwatar/bridge/Mjollnir.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; /** diff --git a/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeapon.java b/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeapon.java index 991719c31..d62f7644b 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeapon.java +++ b/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeapon.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; /** diff --git a/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeaponImpl.java b/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeaponImpl.java index ec2c3a941..ad8bec48f 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeaponImpl.java +++ b/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeaponImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; /** diff --git a/bridge/src/main/java/com/iluwatar/bridge/Stormbringer.java b/bridge/src/main/java/com/iluwatar/bridge/Stormbringer.java index ebbe0c23f..91cad9cc2 100644 --- a/bridge/src/main/java/com/iluwatar/bridge/Stormbringer.java +++ b/bridge/src/main/java/com/iluwatar/bridge/Stormbringer.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; /** diff --git a/bridge/src/test/java/com/iluwatar/bridge/AppTest.java b/bridge/src/test/java/com/iluwatar/bridge/AppTest.java index 08f956b6a..1b9b63d7f 100644 --- a/bridge/src/test/java/com/iluwatar/bridge/AppTest.java +++ b/bridge/src/test/java/com/iluwatar/bridge/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; import org.junit.Test; diff --git a/bridge/src/test/java/com/iluwatar/bridge/BlindingMagicWeaponTest.java b/bridge/src/test/java/com/iluwatar/bridge/BlindingMagicWeaponTest.java index a7a2d1536..54435555e 100644 --- a/bridge/src/test/java/com/iluwatar/bridge/BlindingMagicWeaponTest.java +++ b/bridge/src/test/java/com/iluwatar/bridge/BlindingMagicWeaponTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; import org.junit.Test; diff --git a/bridge/src/test/java/com/iluwatar/bridge/FlyingMagicWeaponTest.java b/bridge/src/test/java/com/iluwatar/bridge/FlyingMagicWeaponTest.java index 55b89bb36..9053a7bb0 100644 --- a/bridge/src/test/java/com/iluwatar/bridge/FlyingMagicWeaponTest.java +++ b/bridge/src/test/java/com/iluwatar/bridge/FlyingMagicWeaponTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; import org.junit.Test; diff --git a/bridge/src/test/java/com/iluwatar/bridge/MagicWeaponTest.java b/bridge/src/test/java/com/iluwatar/bridge/MagicWeaponTest.java index eb7bfb34e..6408fd256 100644 --- a/bridge/src/test/java/com/iluwatar/bridge/MagicWeaponTest.java +++ b/bridge/src/test/java/com/iluwatar/bridge/MagicWeaponTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; import static org.junit.Assert.assertNotNull; diff --git a/bridge/src/test/java/com/iluwatar/bridge/SoulEatingMagicWeaponTest.java b/bridge/src/test/java/com/iluwatar/bridge/SoulEatingMagicWeaponTest.java index 2d9c24083..0bd0a6b8d 100644 --- a/bridge/src/test/java/com/iluwatar/bridge/SoulEatingMagicWeaponTest.java +++ b/bridge/src/test/java/com/iluwatar/bridge/SoulEatingMagicWeaponTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.bridge; import org.junit.Test; diff --git a/builder/pom.xml b/builder/pom.xml index d718dbef7..c099818ce 100644 --- a/builder/pom.xml +++ b/builder/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/builder/src/main/java/com/iluwatar/builder/App.java b/builder/src/main/java/com/iluwatar/builder/App.java index b5c8fd7a9..b5b612529 100644 --- a/builder/src/main/java/com/iluwatar/builder/App.java +++ b/builder/src/main/java/com/iluwatar/builder/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.builder; import com.iluwatar.builder.Hero.HeroBuilder; diff --git a/builder/src/main/java/com/iluwatar/builder/Armor.java b/builder/src/main/java/com/iluwatar/builder/Armor.java index 6b67b8f94..a0a4fe582 100644 --- a/builder/src/main/java/com/iluwatar/builder/Armor.java +++ b/builder/src/main/java/com/iluwatar/builder/Armor.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.builder; /** diff --git a/builder/src/main/java/com/iluwatar/builder/HairColor.java b/builder/src/main/java/com/iluwatar/builder/HairColor.java index b99b3db63..3c3195cc6 100644 --- a/builder/src/main/java/com/iluwatar/builder/HairColor.java +++ b/builder/src/main/java/com/iluwatar/builder/HairColor.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.builder; /** diff --git a/builder/src/main/java/com/iluwatar/builder/HairType.java b/builder/src/main/java/com/iluwatar/builder/HairType.java index 48eeac950..8d15b0f30 100644 --- a/builder/src/main/java/com/iluwatar/builder/HairType.java +++ b/builder/src/main/java/com/iluwatar/builder/HairType.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.builder; /** diff --git a/builder/src/main/java/com/iluwatar/builder/Hero.java b/builder/src/main/java/com/iluwatar/builder/Hero.java index cf7289d51..d90b56972 100644 --- a/builder/src/main/java/com/iluwatar/builder/Hero.java +++ b/builder/src/main/java/com/iluwatar/builder/Hero.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.builder; /** diff --git a/builder/src/main/java/com/iluwatar/builder/Profession.java b/builder/src/main/java/com/iluwatar/builder/Profession.java index a157366b4..7be5b999e 100644 --- a/builder/src/main/java/com/iluwatar/builder/Profession.java +++ b/builder/src/main/java/com/iluwatar/builder/Profession.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.builder; /** diff --git a/builder/src/main/java/com/iluwatar/builder/Weapon.java b/builder/src/main/java/com/iluwatar/builder/Weapon.java index 08f55c65c..97d347d24 100644 --- a/builder/src/main/java/com/iluwatar/builder/Weapon.java +++ b/builder/src/main/java/com/iluwatar/builder/Weapon.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.builder; /** diff --git a/builder/src/test/java/com/iluwatar/builder/AppTest.java b/builder/src/test/java/com/iluwatar/builder/AppTest.java index 270537e8c..e83db9f9f 100644 --- a/builder/src/test/java/com/iluwatar/builder/AppTest.java +++ b/builder/src/test/java/com/iluwatar/builder/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.builder; import org.junit.Test; diff --git a/builder/src/test/java/com/iluwatar/builder/HeroTest.java b/builder/src/test/java/com/iluwatar/builder/HeroTest.java index 2bedf3ef1..3c308e8c1 100644 --- a/builder/src/test/java/com/iluwatar/builder/HeroTest.java +++ b/builder/src/test/java/com/iluwatar/builder/HeroTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.builder; import org.junit.Test; diff --git a/business-delegate/pom.xml b/business-delegate/pom.xml index 204c3b85c..933518ec0 100644 --- a/business-delegate/pom.xml +++ b/business-delegate/pom.xml @@ -1,4 +1,28 @@ + diff --git a/business-delegate/src/main/java/com/iluwatar/business/delegate/App.java b/business-delegate/src/main/java/com/iluwatar/business/delegate/App.java index 371ec3ce4..e9a264322 100644 --- a/business-delegate/src/main/java/com/iluwatar/business/delegate/App.java +++ b/business-delegate/src/main/java/com/iluwatar/business/delegate/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.business.delegate; /** diff --git a/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessDelegate.java b/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessDelegate.java index 7fb709bcf..81aa9a0f1 100644 --- a/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessDelegate.java +++ b/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessDelegate.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.business.delegate; /** diff --git a/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessLookup.java b/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessLookup.java index 310f7f433..7e1045e7f 100644 --- a/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessLookup.java +++ b/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessLookup.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.business.delegate; /** diff --git a/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessService.java b/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessService.java index dfeaf883a..f5784964a 100644 --- a/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessService.java +++ b/business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessService.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.business.delegate; /** diff --git a/business-delegate/src/main/java/com/iluwatar/business/delegate/Client.java b/business-delegate/src/main/java/com/iluwatar/business/delegate/Client.java index eab295cf2..8c6bf59a1 100644 --- a/business-delegate/src/main/java/com/iluwatar/business/delegate/Client.java +++ b/business-delegate/src/main/java/com/iluwatar/business/delegate/Client.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.business.delegate; /** diff --git a/business-delegate/src/main/java/com/iluwatar/business/delegate/EjbService.java b/business-delegate/src/main/java/com/iluwatar/business/delegate/EjbService.java index f387449e2..7296f63b4 100644 --- a/business-delegate/src/main/java/com/iluwatar/business/delegate/EjbService.java +++ b/business-delegate/src/main/java/com/iluwatar/business/delegate/EjbService.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.business.delegate; /** diff --git a/business-delegate/src/main/java/com/iluwatar/business/delegate/JmsService.java b/business-delegate/src/main/java/com/iluwatar/business/delegate/JmsService.java index fd74cf3c2..5b71ce57d 100644 --- a/business-delegate/src/main/java/com/iluwatar/business/delegate/JmsService.java +++ b/business-delegate/src/main/java/com/iluwatar/business/delegate/JmsService.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.business.delegate; /** diff --git a/business-delegate/src/main/java/com/iluwatar/business/delegate/ServiceType.java b/business-delegate/src/main/java/com/iluwatar/business/delegate/ServiceType.java index ac42d3b6c..06d0a42b9 100644 --- a/business-delegate/src/main/java/com/iluwatar/business/delegate/ServiceType.java +++ b/business-delegate/src/main/java/com/iluwatar/business/delegate/ServiceType.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.business.delegate; /** diff --git a/business-delegate/src/test/java/com/iluwatar/business/delegate/BusinessDelegateTest.java b/business-delegate/src/test/java/com/iluwatar/business/delegate/BusinessDelegateTest.java index ebacd6b78..aec4ea14b 100644 --- a/business-delegate/src/test/java/com/iluwatar/business/delegate/BusinessDelegateTest.java +++ b/business-delegate/src/test/java/com/iluwatar/business/delegate/BusinessDelegateTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.business.delegate; import static org.mockito.Mockito.spy; diff --git a/caching/pom.xml b/caching/pom.xml index f007f14d4..969ca7d40 100644 --- a/caching/pom.xml +++ b/caching/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/caching/src/main/java/com/iluwatar/caching/App.java b/caching/src/main/java/com/iluwatar/caching/App.java index 62eca47c3..8e5a84085 100644 --- a/caching/src/main/java/com/iluwatar/caching/App.java +++ b/caching/src/main/java/com/iluwatar/caching/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.caching; /** diff --git a/caching/src/main/java/com/iluwatar/caching/AppManager.java b/caching/src/main/java/com/iluwatar/caching/AppManager.java index 519226640..e79ae479f 100644 --- a/caching/src/main/java/com/iluwatar/caching/AppManager.java +++ b/caching/src/main/java/com/iluwatar/caching/AppManager.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.caching; import java.text.ParseException; diff --git a/caching/src/main/java/com/iluwatar/caching/CacheStore.java b/caching/src/main/java/com/iluwatar/caching/CacheStore.java index 1f4748307..db8f3bed7 100644 --- a/caching/src/main/java/com/iluwatar/caching/CacheStore.java +++ b/caching/src/main/java/com/iluwatar/caching/CacheStore.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.caching; import java.util.ArrayList; diff --git a/caching/src/main/java/com/iluwatar/caching/CachingPolicy.java b/caching/src/main/java/com/iluwatar/caching/CachingPolicy.java index 314cfaa36..490113baa 100644 --- a/caching/src/main/java/com/iluwatar/caching/CachingPolicy.java +++ b/caching/src/main/java/com/iluwatar/caching/CachingPolicy.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.caching; /** diff --git a/caching/src/main/java/com/iluwatar/caching/DbManager.java b/caching/src/main/java/com/iluwatar/caching/DbManager.java index bfde07103..f6ccd63b9 100644 --- a/caching/src/main/java/com/iluwatar/caching/DbManager.java +++ b/caching/src/main/java/com/iluwatar/caching/DbManager.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.caching; import java.text.ParseException; diff --git a/caching/src/main/java/com/iluwatar/caching/LruCache.java b/caching/src/main/java/com/iluwatar/caching/LruCache.java index e20275a40..d1a6411f5 100644 --- a/caching/src/main/java/com/iluwatar/caching/LruCache.java +++ b/caching/src/main/java/com/iluwatar/caching/LruCache.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.caching; import java.util.ArrayList; diff --git a/caching/src/main/java/com/iluwatar/caching/UserAccount.java b/caching/src/main/java/com/iluwatar/caching/UserAccount.java index 0e281c429..e2444ad72 100644 --- a/caching/src/main/java/com/iluwatar/caching/UserAccount.java +++ b/caching/src/main/java/com/iluwatar/caching/UserAccount.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.caching; /** diff --git a/caching/src/test/java/com/iluwatar/caching/AppTest.java b/caching/src/test/java/com/iluwatar/caching/AppTest.java index 35917da1c..d2b6a393c 100644 --- a/caching/src/test/java/com/iluwatar/caching/AppTest.java +++ b/caching/src/test/java/com/iluwatar/caching/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.caching; import org.junit.Before; diff --git a/callback/pom.xml b/callback/pom.xml index b4b2f6ed0..2c63059e4 100644 --- a/callback/pom.xml +++ b/callback/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/callback/src/main/java/com/iluwatar/callback/App.java b/callback/src/main/java/com/iluwatar/callback/App.java index bc8b08cf0..bc1b2890e 100644 --- a/callback/src/main/java/com/iluwatar/callback/App.java +++ b/callback/src/main/java/com/iluwatar/callback/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.callback; /** diff --git a/callback/src/main/java/com/iluwatar/callback/Callback.java b/callback/src/main/java/com/iluwatar/callback/Callback.java index 712893873..78932a24e 100644 --- a/callback/src/main/java/com/iluwatar/callback/Callback.java +++ b/callback/src/main/java/com/iluwatar/callback/Callback.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.callback; /** diff --git a/callback/src/main/java/com/iluwatar/callback/LambdasApp.java b/callback/src/main/java/com/iluwatar/callback/LambdasApp.java index 19dd17eae..78ca63e0b 100644 --- a/callback/src/main/java/com/iluwatar/callback/LambdasApp.java +++ b/callback/src/main/java/com/iluwatar/callback/LambdasApp.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.callback; /** diff --git a/callback/src/main/java/com/iluwatar/callback/SimpleTask.java b/callback/src/main/java/com/iluwatar/callback/SimpleTask.java index a651ed7b6..2a7385607 100644 --- a/callback/src/main/java/com/iluwatar/callback/SimpleTask.java +++ b/callback/src/main/java/com/iluwatar/callback/SimpleTask.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.callback; /** diff --git a/callback/src/main/java/com/iluwatar/callback/Task.java b/callback/src/main/java/com/iluwatar/callback/Task.java index 83e2cd4df..9580c91cb 100644 --- a/callback/src/main/java/com/iluwatar/callback/Task.java +++ b/callback/src/main/java/com/iluwatar/callback/Task.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.callback; /** diff --git a/callback/src/test/java/com/iluwatar/callback/AppTest.java b/callback/src/test/java/com/iluwatar/callback/AppTest.java index 28d6eaa1c..f5ef1504c 100644 --- a/callback/src/test/java/com/iluwatar/callback/AppTest.java +++ b/callback/src/test/java/com/iluwatar/callback/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.callback; import org.junit.Test; diff --git a/chain/pom.xml b/chain/pom.xml index ec3ecf1bb..007a1a224 100644 --- a/chain/pom.xml +++ b/chain/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/chain/src/main/java/com/iluwatar/chain/App.java b/chain/src/main/java/com/iluwatar/chain/App.java index ae8c74143..cd6a200de 100644 --- a/chain/src/main/java/com/iluwatar/chain/App.java +++ b/chain/src/main/java/com/iluwatar/chain/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.chain; /** diff --git a/chain/src/main/java/com/iluwatar/chain/OrcCommander.java b/chain/src/main/java/com/iluwatar/chain/OrcCommander.java index 6cc495b99..a1f2bf284 100644 --- a/chain/src/main/java/com/iluwatar/chain/OrcCommander.java +++ b/chain/src/main/java/com/iluwatar/chain/OrcCommander.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.chain; /** diff --git a/chain/src/main/java/com/iluwatar/chain/OrcKing.java b/chain/src/main/java/com/iluwatar/chain/OrcKing.java index 640b190b2..3b13c4a53 100644 --- a/chain/src/main/java/com/iluwatar/chain/OrcKing.java +++ b/chain/src/main/java/com/iluwatar/chain/OrcKing.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.chain; /** diff --git a/chain/src/main/java/com/iluwatar/chain/OrcOfficer.java b/chain/src/main/java/com/iluwatar/chain/OrcOfficer.java index e6d68c19c..ea35722c1 100644 --- a/chain/src/main/java/com/iluwatar/chain/OrcOfficer.java +++ b/chain/src/main/java/com/iluwatar/chain/OrcOfficer.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.chain; /** diff --git a/chain/src/main/java/com/iluwatar/chain/OrcSoldier.java b/chain/src/main/java/com/iluwatar/chain/OrcSoldier.java index bd2a8d11d..d7601bf4f 100644 --- a/chain/src/main/java/com/iluwatar/chain/OrcSoldier.java +++ b/chain/src/main/java/com/iluwatar/chain/OrcSoldier.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.chain; /** diff --git a/chain/src/main/java/com/iluwatar/chain/Request.java b/chain/src/main/java/com/iluwatar/chain/Request.java index 5c3256a55..f6a15ff5a 100644 --- a/chain/src/main/java/com/iluwatar/chain/Request.java +++ b/chain/src/main/java/com/iluwatar/chain/Request.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.chain; import java.util.Objects; diff --git a/chain/src/main/java/com/iluwatar/chain/RequestHandler.java b/chain/src/main/java/com/iluwatar/chain/RequestHandler.java index 12db1f51c..78d68e5dc 100644 --- a/chain/src/main/java/com/iluwatar/chain/RequestHandler.java +++ b/chain/src/main/java/com/iluwatar/chain/RequestHandler.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.chain; /** diff --git a/chain/src/main/java/com/iluwatar/chain/RequestType.java b/chain/src/main/java/com/iluwatar/chain/RequestType.java index 443d6dced..ff6dcff4d 100644 --- a/chain/src/main/java/com/iluwatar/chain/RequestType.java +++ b/chain/src/main/java/com/iluwatar/chain/RequestType.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.chain; /** diff --git a/chain/src/test/java/com/iluwatar/chain/AppTest.java b/chain/src/test/java/com/iluwatar/chain/AppTest.java index f1dc78759..93a8a4096 100644 --- a/chain/src/test/java/com/iluwatar/chain/AppTest.java +++ b/chain/src/test/java/com/iluwatar/chain/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.chain; import org.junit.Test; diff --git a/chain/src/test/java/com/iluwatar/chain/OrcKingTest.java b/chain/src/test/java/com/iluwatar/chain/OrcKingTest.java index fd3d573b6..be3650613 100644 --- a/chain/src/test/java/com/iluwatar/chain/OrcKingTest.java +++ b/chain/src/test/java/com/iluwatar/chain/OrcKingTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.chain; import org.junit.Test; diff --git a/checkstyle-suppressions.xml b/checkstyle-suppressions.xml index a3a2c23a8..60de4a697 100644 --- a/checkstyle-suppressions.xml +++ b/checkstyle-suppressions.xml @@ -1,4 +1,28 @@ + diff --git a/checkstyle.xml b/checkstyle.xml index 706c188e0..19b6d2ec4 100644 --- a/checkstyle.xml +++ b/checkstyle.xml @@ -1,4 +1,28 @@ + diff --git a/command/pom.xml b/command/pom.xml index 837b149f6..2ee281cee 100644 --- a/command/pom.xml +++ b/command/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/command/src/main/java/com/iluwatar/command/App.java b/command/src/main/java/com/iluwatar/command/App.java index 423ce6075..93f9c376a 100644 --- a/command/src/main/java/com/iluwatar/command/App.java +++ b/command/src/main/java/com/iluwatar/command/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.command; /** diff --git a/command/src/main/java/com/iluwatar/command/Command.java b/command/src/main/java/com/iluwatar/command/Command.java index 4b5127263..c7b0c43bb 100644 --- a/command/src/main/java/com/iluwatar/command/Command.java +++ b/command/src/main/java/com/iluwatar/command/Command.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.command; /** diff --git a/command/src/main/java/com/iluwatar/command/Goblin.java b/command/src/main/java/com/iluwatar/command/Goblin.java index d5fcb7078..9e21cdefd 100644 --- a/command/src/main/java/com/iluwatar/command/Goblin.java +++ b/command/src/main/java/com/iluwatar/command/Goblin.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.command; /** diff --git a/command/src/main/java/com/iluwatar/command/InvisibilitySpell.java b/command/src/main/java/com/iluwatar/command/InvisibilitySpell.java index 02f1b1cc1..9435e7245 100644 --- a/command/src/main/java/com/iluwatar/command/InvisibilitySpell.java +++ b/command/src/main/java/com/iluwatar/command/InvisibilitySpell.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.command; /** diff --git a/command/src/main/java/com/iluwatar/command/ShrinkSpell.java b/command/src/main/java/com/iluwatar/command/ShrinkSpell.java index 46448bf6c..e88447353 100644 --- a/command/src/main/java/com/iluwatar/command/ShrinkSpell.java +++ b/command/src/main/java/com/iluwatar/command/ShrinkSpell.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.command; /** diff --git a/command/src/main/java/com/iluwatar/command/Size.java b/command/src/main/java/com/iluwatar/command/Size.java index 2a443b449..d33a19453 100644 --- a/command/src/main/java/com/iluwatar/command/Size.java +++ b/command/src/main/java/com/iluwatar/command/Size.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.command; /** diff --git a/command/src/main/java/com/iluwatar/command/Target.java b/command/src/main/java/com/iluwatar/command/Target.java index 731fe4d1f..2e49ab663 100644 --- a/command/src/main/java/com/iluwatar/command/Target.java +++ b/command/src/main/java/com/iluwatar/command/Target.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.command; /** diff --git a/command/src/main/java/com/iluwatar/command/Visibility.java b/command/src/main/java/com/iluwatar/command/Visibility.java index ebf8a306c..4ab079d18 100644 --- a/command/src/main/java/com/iluwatar/command/Visibility.java +++ b/command/src/main/java/com/iluwatar/command/Visibility.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.command; /** diff --git a/command/src/main/java/com/iluwatar/command/Wizard.java b/command/src/main/java/com/iluwatar/command/Wizard.java index fb6407c74..bd0ef85d4 100644 --- a/command/src/main/java/com/iluwatar/command/Wizard.java +++ b/command/src/main/java/com/iluwatar/command/Wizard.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.command; import java.util.Deque; diff --git a/command/src/test/java/com/iluwatar/command/CommandTest.java b/command/src/test/java/com/iluwatar/command/CommandTest.java index fd1076840..8201d50c6 100644 --- a/command/src/test/java/com/iluwatar/command/CommandTest.java +++ b/command/src/test/java/com/iluwatar/command/CommandTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.command; import static org.junit.Assert.assertEquals; diff --git a/composite/pom.xml b/composite/pom.xml index 584ba5476..3c35d1eda 100644 --- a/composite/pom.xml +++ b/composite/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/composite/src/main/java/com/iluwatar/composite/App.java b/composite/src/main/java/com/iluwatar/composite/App.java index 57207cb8f..cfe37876f 100644 --- a/composite/src/main/java/com/iluwatar/composite/App.java +++ b/composite/src/main/java/com/iluwatar/composite/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.composite; /** diff --git a/composite/src/main/java/com/iluwatar/composite/Letter.java b/composite/src/main/java/com/iluwatar/composite/Letter.java index 4071eecda..d6a4005d2 100644 --- a/composite/src/main/java/com/iluwatar/composite/Letter.java +++ b/composite/src/main/java/com/iluwatar/composite/Letter.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.composite; /** diff --git a/composite/src/main/java/com/iluwatar/composite/LetterComposite.java b/composite/src/main/java/com/iluwatar/composite/LetterComposite.java index 39655fa37..d72ffd531 100644 --- a/composite/src/main/java/com/iluwatar/composite/LetterComposite.java +++ b/composite/src/main/java/com/iluwatar/composite/LetterComposite.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.composite; import java.util.ArrayList; diff --git a/composite/src/main/java/com/iluwatar/composite/Messenger.java b/composite/src/main/java/com/iluwatar/composite/Messenger.java index 37fa84bc2..ab62639a6 100644 --- a/composite/src/main/java/com/iluwatar/composite/Messenger.java +++ b/composite/src/main/java/com/iluwatar/composite/Messenger.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.composite; import java.util.ArrayList; diff --git a/composite/src/main/java/com/iluwatar/composite/Sentence.java b/composite/src/main/java/com/iluwatar/composite/Sentence.java index 03f0c6949..eea1d4b1d 100644 --- a/composite/src/main/java/com/iluwatar/composite/Sentence.java +++ b/composite/src/main/java/com/iluwatar/composite/Sentence.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.composite; import java.util.List; diff --git a/composite/src/main/java/com/iluwatar/composite/Word.java b/composite/src/main/java/com/iluwatar/composite/Word.java index 98c5f0b0d..819f166dc 100644 --- a/composite/src/main/java/com/iluwatar/composite/Word.java +++ b/composite/src/main/java/com/iluwatar/composite/Word.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.composite; import java.util.List; diff --git a/composite/src/test/java/com/iluwatar/composite/AppTest.java b/composite/src/test/java/com/iluwatar/composite/AppTest.java index a5bc613c0..336438a99 100644 --- a/composite/src/test/java/com/iluwatar/composite/AppTest.java +++ b/composite/src/test/java/com/iluwatar/composite/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.composite; import org.junit.Test; diff --git a/composite/src/test/java/com/iluwatar/composite/MessengerTest.java b/composite/src/test/java/com/iluwatar/composite/MessengerTest.java index 9d0b158cc..5f75ea017 100644 --- a/composite/src/test/java/com/iluwatar/composite/MessengerTest.java +++ b/composite/src/test/java/com/iluwatar/composite/MessengerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.composite; import org.junit.After; diff --git a/dao/pom.xml b/dao/pom.xml index 8b0c260e5..422134ec8 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -1,4 +1,28 @@ + diff --git a/dao/src/main/java/com/iluwatar/dao/App.java b/dao/src/main/java/com/iluwatar/dao/App.java index a9351689d..312239dba 100644 --- a/dao/src/main/java/com/iluwatar/dao/App.java +++ b/dao/src/main/java/com/iluwatar/dao/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dao; import java.util.ArrayList; diff --git a/dao/src/main/java/com/iluwatar/dao/Customer.java b/dao/src/main/java/com/iluwatar/dao/Customer.java index ea13daf11..079531bb5 100644 --- a/dao/src/main/java/com/iluwatar/dao/Customer.java +++ b/dao/src/main/java/com/iluwatar/dao/Customer.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dao; /** diff --git a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java index 79d23ba20..26b4df47b 100644 --- a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dao; import java.util.List; diff --git a/dao/src/main/java/com/iluwatar/dao/CustomerDaoImpl.java b/dao/src/main/java/com/iluwatar/dao/CustomerDaoImpl.java index e590fb1a6..25d4149fa 100644 --- a/dao/src/main/java/com/iluwatar/dao/CustomerDaoImpl.java +++ b/dao/src/main/java/com/iluwatar/dao/CustomerDaoImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dao; import java.util.List; diff --git a/dao/src/main/resources/log4j.xml b/dao/src/main/resources/log4j.xml index 906e37170..b591c17e1 100644 --- a/dao/src/main/resources/log4j.xml +++ b/dao/src/main/resources/log4j.xml @@ -1,4 +1,28 @@ + diff --git a/dao/src/test/java/com/iluwatar/dao/CustomerDaoImplTest.java b/dao/src/test/java/com/iluwatar/dao/CustomerDaoImplTest.java index 245efb505..e4e81444f 100644 --- a/dao/src/test/java/com/iluwatar/dao/CustomerDaoImplTest.java +++ b/dao/src/test/java/com/iluwatar/dao/CustomerDaoImplTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dao; import static org.junit.Assert.assertEquals; diff --git a/dao/src/test/java/com/iluwatar/dao/CustomerTest.java b/dao/src/test/java/com/iluwatar/dao/CustomerTest.java index 8511a577b..818efa749 100644 --- a/dao/src/test/java/com/iluwatar/dao/CustomerTest.java +++ b/dao/src/test/java/com/iluwatar/dao/CustomerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dao; import static org.junit.Assert.assertEquals; diff --git a/decorator/pom.xml b/decorator/pom.xml index ea30f5b38..e98842da3 100644 --- a/decorator/pom.xml +++ b/decorator/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/decorator/src/main/java/com/iluwatar/decorator/App.java b/decorator/src/main/java/com/iluwatar/decorator/App.java index 242e72d11..bdc574fbc 100644 --- a/decorator/src/main/java/com/iluwatar/decorator/App.java +++ b/decorator/src/main/java/com/iluwatar/decorator/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.decorator; /** diff --git a/decorator/src/main/java/com/iluwatar/decorator/Hostile.java b/decorator/src/main/java/com/iluwatar/decorator/Hostile.java index 8b8f0c255..d3414c9dd 100644 --- a/decorator/src/main/java/com/iluwatar/decorator/Hostile.java +++ b/decorator/src/main/java/com/iluwatar/decorator/Hostile.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.decorator; /** diff --git a/decorator/src/main/java/com/iluwatar/decorator/SmartHostile.java b/decorator/src/main/java/com/iluwatar/decorator/SmartHostile.java index 93f494688..3b4b86276 100644 --- a/decorator/src/main/java/com/iluwatar/decorator/SmartHostile.java +++ b/decorator/src/main/java/com/iluwatar/decorator/SmartHostile.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.decorator; /** diff --git a/decorator/src/main/java/com/iluwatar/decorator/Troll.java b/decorator/src/main/java/com/iluwatar/decorator/Troll.java index a10f76f79..7992d708d 100644 --- a/decorator/src/main/java/com/iluwatar/decorator/Troll.java +++ b/decorator/src/main/java/com/iluwatar/decorator/Troll.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.decorator; /** diff --git a/decorator/src/test/java/com/iluwatar/decorator/AppTest.java b/decorator/src/test/java/com/iluwatar/decorator/AppTest.java index 4b2ced962..747144c6d 100644 --- a/decorator/src/test/java/com/iluwatar/decorator/AppTest.java +++ b/decorator/src/test/java/com/iluwatar/decorator/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.decorator; import org.junit.Test; diff --git a/decorator/src/test/java/com/iluwatar/decorator/SmartHostileTest.java b/decorator/src/test/java/com/iluwatar/decorator/SmartHostileTest.java index e5be32eae..6432d4e90 100644 --- a/decorator/src/test/java/com/iluwatar/decorator/SmartHostileTest.java +++ b/decorator/src/test/java/com/iluwatar/decorator/SmartHostileTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.decorator; import org.junit.Test; diff --git a/decorator/src/test/java/com/iluwatar/decorator/TrollTest.java b/decorator/src/test/java/com/iluwatar/decorator/TrollTest.java index 56f541cfc..84b0f6d20 100644 --- a/decorator/src/test/java/com/iluwatar/decorator/TrollTest.java +++ b/decorator/src/test/java/com/iluwatar/decorator/TrollTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.decorator; import org.junit.After; diff --git a/delegation/pom.xml b/delegation/pom.xml index 3d9ca390d..62726d4ad 100644 --- a/delegation/pom.xml +++ b/delegation/pom.xml @@ -1,4 +1,28 @@ + + 4.0.0 diff --git a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/AdvancedWizard.java b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/AdvancedWizard.java index 810957858..4eeaccdea 100644 --- a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/AdvancedWizard.java +++ b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/AdvancedWizard.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dependency.injection; /** diff --git a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/App.java b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/App.java index 0205724b5..faf2a6a43 100644 --- a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/App.java +++ b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dependency.injection; import com.google.inject.Guice; diff --git a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/GuiceWizard.java b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/GuiceWizard.java index e5c77ba18..6e3baee5a 100644 --- a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/GuiceWizard.java +++ b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/GuiceWizard.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dependency.injection; import javax.inject.Inject; diff --git a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/OldTobyTobacco.java b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/OldTobyTobacco.java index 9197066ee..523be1d37 100644 --- a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/OldTobyTobacco.java +++ b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/OldTobyTobacco.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dependency.injection; /** diff --git a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/RivendellTobacco.java b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/RivendellTobacco.java index 9eb137a05..18691a161 100644 --- a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/RivendellTobacco.java +++ b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/RivendellTobacco.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dependency.injection; /** diff --git a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/SecondBreakfastTobacco.java b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/SecondBreakfastTobacco.java index 269f531d3..57565daf0 100644 --- a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/SecondBreakfastTobacco.java +++ b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/SecondBreakfastTobacco.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dependency.injection; /** diff --git a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/SimpleWizard.java b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/SimpleWizard.java index 976616e74..6928fe7fe 100644 --- a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/SimpleWizard.java +++ b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/SimpleWizard.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dependency.injection; /** diff --git a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/Tobacco.java b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/Tobacco.java index 48e4cd8de..74a564ab5 100644 --- a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/Tobacco.java +++ b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/Tobacco.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dependency.injection; /** diff --git a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/TobaccoModule.java b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/TobaccoModule.java index 8187bae9f..b8d4df676 100644 --- a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/TobaccoModule.java +++ b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/TobaccoModule.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dependency.injection; import com.google.inject.AbstractModule; diff --git a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/Wizard.java b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/Wizard.java index 0376fcc2e..a5d4d68e0 100644 --- a/dependency-injection/src/main/java/com/iluwatar/dependency/injection/Wizard.java +++ b/dependency-injection/src/main/java/com/iluwatar/dependency/injection/Wizard.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dependency.injection; /** diff --git a/dependency-injection/src/test/java/com/iluwatar/dependency/injection/AdvancedWizardTest.java b/dependency-injection/src/test/java/com/iluwatar/dependency/injection/AdvancedWizardTest.java index 5f7733a99..d1f5e574c 100644 --- a/dependency-injection/src/test/java/com/iluwatar/dependency/injection/AdvancedWizardTest.java +++ b/dependency-injection/src/test/java/com/iluwatar/dependency/injection/AdvancedWizardTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dependency.injection; import org.junit.Test; diff --git a/dependency-injection/src/test/java/com/iluwatar/dependency/injection/AppTest.java b/dependency-injection/src/test/java/com/iluwatar/dependency/injection/AppTest.java index 36f016e47..2003933ac 100644 --- a/dependency-injection/src/test/java/com/iluwatar/dependency/injection/AppTest.java +++ b/dependency-injection/src/test/java/com/iluwatar/dependency/injection/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dependency.injection; import org.junit.Test; diff --git a/dependency-injection/src/test/java/com/iluwatar/dependency/injection/GuiceWizardTest.java b/dependency-injection/src/test/java/com/iluwatar/dependency/injection/GuiceWizardTest.java index d84ffad84..1d3d679df 100644 --- a/dependency-injection/src/test/java/com/iluwatar/dependency/injection/GuiceWizardTest.java +++ b/dependency-injection/src/test/java/com/iluwatar/dependency/injection/GuiceWizardTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dependency.injection; import com.google.inject.AbstractModule; diff --git a/dependency-injection/src/test/java/com/iluwatar/dependency/injection/SimpleWizardTest.java b/dependency-injection/src/test/java/com/iluwatar/dependency/injection/SimpleWizardTest.java index 9b3f4ea3a..e5a856e8d 100644 --- a/dependency-injection/src/test/java/com/iluwatar/dependency/injection/SimpleWizardTest.java +++ b/dependency-injection/src/test/java/com/iluwatar/dependency/injection/SimpleWizardTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dependency.injection; import org.junit.Test; diff --git a/dependency-injection/src/test/java/com/iluwatar/dependency/injection/StdOutTest.java b/dependency-injection/src/test/java/com/iluwatar/dependency/injection/StdOutTest.java index 13c18fcd1..57272c511 100644 --- a/dependency-injection/src/test/java/com/iluwatar/dependency/injection/StdOutTest.java +++ b/dependency-injection/src/test/java/com/iluwatar/dependency/injection/StdOutTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dependency.injection; import org.junit.After; diff --git a/double-checked-locking/pom.xml b/double-checked-locking/pom.xml index 465184e4c..e5985a84e 100644 --- a/double-checked-locking/pom.xml +++ b/double-checked-locking/pom.xml @@ -1,3 +1,27 @@ + 4.0.0 diff --git a/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/App.java b/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/App.java index 79bf6aefd..98309e181 100644 --- a/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/App.java +++ b/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doublechecked.locking; import java.util.concurrent.ExecutorService; diff --git a/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/Inventory.java b/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/Inventory.java index 1011b78b4..176203a44 100644 --- a/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/Inventory.java +++ b/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/Inventory.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doublechecked.locking; import java.util.ArrayList; diff --git a/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/Item.java b/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/Item.java index bba4970a3..c805022ab 100644 --- a/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/Item.java +++ b/double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/Item.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doublechecked.locking; /** diff --git a/double-checked-locking/src/test/java/com/iluwatar/doublechecked/locking/AppTest.java b/double-checked-locking/src/test/java/com/iluwatar/doublechecked/locking/AppTest.java index 012d00648..748c66c6a 100644 --- a/double-checked-locking/src/test/java/com/iluwatar/doublechecked/locking/AppTest.java +++ b/double-checked-locking/src/test/java/com/iluwatar/doublechecked/locking/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doublechecked.locking; import org.junit.Test; diff --git a/double-checked-locking/src/test/java/com/iluwatar/doublechecked/locking/InventoryTest.java b/double-checked-locking/src/test/java/com/iluwatar/doublechecked/locking/InventoryTest.java index a09f19e57..485c9573e 100644 --- a/double-checked-locking/src/test/java/com/iluwatar/doublechecked/locking/InventoryTest.java +++ b/double-checked-locking/src/test/java/com/iluwatar/doublechecked/locking/InventoryTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doublechecked.locking; import org.junit.After; diff --git a/double-dispatch/pom.xml b/double-dispatch/pom.xml index 719827cf0..57da13a09 100644 --- a/double-dispatch/pom.xml +++ b/double-dispatch/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/App.java b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/App.java index 98e19b770..40a0485a5 100644 --- a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/App.java +++ b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doubledispatch; import java.util.ArrayList; diff --git a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/FlamingAsteroid.java b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/FlamingAsteroid.java index e23169897..6cff89f58 100644 --- a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/FlamingAsteroid.java +++ b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/FlamingAsteroid.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doubledispatch; /** diff --git a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/GameObject.java b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/GameObject.java index 4fdca4dac..fea0cdfd1 100644 --- a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/GameObject.java +++ b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/GameObject.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doubledispatch; /** diff --git a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/Meteoroid.java b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/Meteoroid.java index 20d985e6a..cc68a85ec 100644 --- a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/Meteoroid.java +++ b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/Meteoroid.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doubledispatch; /** diff --git a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/Rectangle.java b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/Rectangle.java index e1e3eab7b..496bb8769 100644 --- a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/Rectangle.java +++ b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/Rectangle.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doubledispatch; /** diff --git a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/SpaceStationIss.java b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/SpaceStationIss.java index 4563b8de3..1150fc60b 100644 --- a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/SpaceStationIss.java +++ b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/SpaceStationIss.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doubledispatch; /** diff --git a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/SpaceStationMir.java b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/SpaceStationMir.java index 5a4a19aaa..e7a55d0ee 100644 --- a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/SpaceStationMir.java +++ b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/SpaceStationMir.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doubledispatch; /** diff --git a/double-dispatch/src/test/java/com/iluwatar/doubledispatch/AppTest.java b/double-dispatch/src/test/java/com/iluwatar/doubledispatch/AppTest.java index 83caca613..c1a6aa690 100644 --- a/double-dispatch/src/test/java/com/iluwatar/doubledispatch/AppTest.java +++ b/double-dispatch/src/test/java/com/iluwatar/doubledispatch/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doubledispatch; import org.junit.Test; diff --git a/double-dispatch/src/test/java/com/iluwatar/doubledispatch/CollisionTest.java b/double-dispatch/src/test/java/com/iluwatar/doubledispatch/CollisionTest.java index 6792a5d37..dbc8fc55e 100644 --- a/double-dispatch/src/test/java/com/iluwatar/doubledispatch/CollisionTest.java +++ b/double-dispatch/src/test/java/com/iluwatar/doubledispatch/CollisionTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doubledispatch; import org.junit.After; diff --git a/double-dispatch/src/test/java/com/iluwatar/doubledispatch/FlamingAsteroidTest.java b/double-dispatch/src/test/java/com/iluwatar/doubledispatch/FlamingAsteroidTest.java index 4cbc052c7..31a16f093 100644 --- a/double-dispatch/src/test/java/com/iluwatar/doubledispatch/FlamingAsteroidTest.java +++ b/double-dispatch/src/test/java/com/iluwatar/doubledispatch/FlamingAsteroidTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doubledispatch; import org.junit.Test; diff --git a/double-dispatch/src/test/java/com/iluwatar/doubledispatch/MeteoroidTest.java b/double-dispatch/src/test/java/com/iluwatar/doubledispatch/MeteoroidTest.java index 6f90fbaab..147fe430a 100644 --- a/double-dispatch/src/test/java/com/iluwatar/doubledispatch/MeteoroidTest.java +++ b/double-dispatch/src/test/java/com/iluwatar/doubledispatch/MeteoroidTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doubledispatch; import org.junit.Test; diff --git a/double-dispatch/src/test/java/com/iluwatar/doubledispatch/RectangleTest.java b/double-dispatch/src/test/java/com/iluwatar/doubledispatch/RectangleTest.java index e2563f7db..b7c0dbd2e 100644 --- a/double-dispatch/src/test/java/com/iluwatar/doubledispatch/RectangleTest.java +++ b/double-dispatch/src/test/java/com/iluwatar/doubledispatch/RectangleTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doubledispatch; import org.junit.Test; diff --git a/double-dispatch/src/test/java/com/iluwatar/doubledispatch/SpaceStationIssTest.java b/double-dispatch/src/test/java/com/iluwatar/doubledispatch/SpaceStationIssTest.java index f3ce24e9c..d06f84b22 100644 --- a/double-dispatch/src/test/java/com/iluwatar/doubledispatch/SpaceStationIssTest.java +++ b/double-dispatch/src/test/java/com/iluwatar/doubledispatch/SpaceStationIssTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doubledispatch; import org.junit.Test; diff --git a/double-dispatch/src/test/java/com/iluwatar/doubledispatch/SpaceStationMirTest.java b/double-dispatch/src/test/java/com/iluwatar/doubledispatch/SpaceStationMirTest.java index 7d557dd30..c107aed8b 100644 --- a/double-dispatch/src/test/java/com/iluwatar/doubledispatch/SpaceStationMirTest.java +++ b/double-dispatch/src/test/java/com/iluwatar/doubledispatch/SpaceStationMirTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.doubledispatch; import org.junit.Test; diff --git a/event-aggregator/pom.xml b/event-aggregator/pom.xml index 70d585cbb..d773abf0d 100644 --- a/event-aggregator/pom.xml +++ b/event-aggregator/pom.xml @@ -1,3 +1,27 @@ + 4.0.0 diff --git a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/App.java b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/App.java index a16c36444..879355b65 100644 --- a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/App.java +++ b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; import java.util.ArrayList; diff --git a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/Event.java b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/Event.java index ab66a6612..7397530ef 100644 --- a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/Event.java +++ b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/Event.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; /** diff --git a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/EventEmitter.java b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/EventEmitter.java index a55d7d0e8..fb6a2d0c4 100644 --- a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/EventEmitter.java +++ b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/EventEmitter.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; import java.util.LinkedList; diff --git a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/EventObserver.java b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/EventObserver.java index dcc5ccab6..020f23284 100644 --- a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/EventObserver.java +++ b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/EventObserver.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; /** diff --git a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/KingJoffrey.java b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/KingJoffrey.java index d6cb252cd..fdda59693 100644 --- a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/KingJoffrey.java +++ b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/KingJoffrey.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; /** diff --git a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/KingsHand.java b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/KingsHand.java index 368033810..32c8d98d6 100644 --- a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/KingsHand.java +++ b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/KingsHand.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; /** diff --git a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/LordBaelish.java b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/LordBaelish.java index 6fafceb02..2fdfeada9 100644 --- a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/LordBaelish.java +++ b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/LordBaelish.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; /** diff --git a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/LordVarys.java b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/LordVarys.java index 880cf4e85..b22708d63 100644 --- a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/LordVarys.java +++ b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/LordVarys.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; /** diff --git a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/Scout.java b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/Scout.java index 7eb6878ae..3b0945367 100644 --- a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/Scout.java +++ b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/Scout.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; /** diff --git a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/Weekday.java b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/Weekday.java index 24cc02a25..d6f10ce22 100644 --- a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/Weekday.java +++ b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/Weekday.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; /** diff --git a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/AppTest.java b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/AppTest.java index d0c37c3a8..2330e1f1e 100644 --- a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/AppTest.java +++ b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; import org.junit.Test; diff --git a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/EventEmitterTest.java b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/EventEmitterTest.java index 37bd36da4..63fc31a1f 100644 --- a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/EventEmitterTest.java +++ b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/EventEmitterTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; import org.junit.Test; diff --git a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/EventTest.java b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/EventTest.java index 3f2cdb0fe..33d1796e9 100644 --- a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/EventTest.java +++ b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/EventTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; import org.junit.Test; diff --git a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/KingJoffreyTest.java b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/KingJoffreyTest.java index c1d054936..3e0028ac4 100644 --- a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/KingJoffreyTest.java +++ b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/KingJoffreyTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; import org.junit.After; diff --git a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/KingsHandTest.java b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/KingsHandTest.java index e62bb3f52..93116a071 100644 --- a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/KingsHandTest.java +++ b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/KingsHandTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; import org.junit.Test; diff --git a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/LordBaelishTest.java b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/LordBaelishTest.java index dbc867859..2432e7b40 100644 --- a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/LordBaelishTest.java +++ b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/LordBaelishTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; /** diff --git a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/LordVarysTest.java b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/LordVarysTest.java index 050af5576..d65c3f8e6 100644 --- a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/LordVarysTest.java +++ b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/LordVarysTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; /** diff --git a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/ScoutTest.java b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/ScoutTest.java index 435e07821..701323485 100644 --- a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/ScoutTest.java +++ b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/ScoutTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; /** diff --git a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/WeekdayTest.java b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/WeekdayTest.java index 37b300851..1e91aab74 100644 --- a/event-aggregator/src/test/java/com/iluwatar/event/aggregator/WeekdayTest.java +++ b/event-aggregator/src/test/java/com/iluwatar/event/aggregator/WeekdayTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.event.aggregator; import org.junit.Test; diff --git a/event-driven-architecture/pom.xml b/event-driven-architecture/pom.xml index 32b0bfb3e..0a77eec8e 100644 --- a/event-driven-architecture/pom.xml +++ b/event-driven-architecture/pom.xml @@ -1,4 +1,28 @@ + diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java index a1e4c6652..4179046c8 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.eda; import com.iluwatar.eda.event.Event; diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java index bcf78f275..3ed0f9c9d 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.eda.event; import com.iluwatar.eda.framework.EventDispatcher; diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java index f7beaf82c..e3354aaf2 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.eda.event; import com.iluwatar.eda.model.User; diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java index c07e83e7c..37ca05932 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.eda.event; import com.iluwatar.eda.model.User; diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java index d5436acbf..69e2cf0e3 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.eda.framework; import com.iluwatar.eda.event.Event; diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java index cba2f08b2..9c800a4d4 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.eda.framework; import com.iluwatar.eda.event.Event; diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java index f8f8c7dfc..ee9c48965 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.eda.framework; /** diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java index 7db4a2d81..c51b3391a 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.eda.handler; import com.iluwatar.eda.event.Event; diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java index 754a75c45..5be4ab5cc 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.eda.handler; import com.iluwatar.eda.event.Event; diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java index 02a7a4641..82ef960de 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.eda.model; import com.iluwatar.eda.event.UserCreatedEvent; diff --git a/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java b/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java index 108280bf1..754fac678 100644 --- a/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java +++ b/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.eda.event; import com.iluwatar.eda.model.User; diff --git a/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java b/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java index 163ffed6e..8db315ff4 100644 --- a/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java +++ b/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.eda.framework; import com.iluwatar.eda.framework.EventDispatcher; diff --git a/exclude-pmd.properties b/exclude-pmd.properties index d97b3b827..aeda4353d 100644 --- a/exclude-pmd.properties +++ b/exclude-pmd.properties @@ -1,3 +1,26 @@ +# +# The MIT License +# Copyright (c) 2014 Ilkka Seppälä +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# + com.iluwatar.servicelayer.common.BaseEntity=UnusedPrivateField com.iluwatar.doublechecked.locking.App=EmptyStatementNotInLoop,EmptyWhileStmt com.iluwatar.doublechecked.locking.InventoryTest=EmptyStatementNotInLoop,EmptyWhileStmt diff --git a/execute-around/pom.xml b/execute-around/pom.xml index d644d6a0f..569747ff2 100644 --- a/execute-around/pom.xml +++ b/execute-around/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/execute-around/src/main/java/com/iluwatar/execute/around/App.java b/execute-around/src/main/java/com/iluwatar/execute/around/App.java index 4695b8df5..f8ccebdcf 100644 --- a/execute-around/src/main/java/com/iluwatar/execute/around/App.java +++ b/execute-around/src/main/java/com/iluwatar/execute/around/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.execute.around; import java.io.FileWriter; diff --git a/execute-around/src/main/java/com/iluwatar/execute/around/FileWriterAction.java b/execute-around/src/main/java/com/iluwatar/execute/around/FileWriterAction.java index 1477c0ae4..159786134 100644 --- a/execute-around/src/main/java/com/iluwatar/execute/around/FileWriterAction.java +++ b/execute-around/src/main/java/com/iluwatar/execute/around/FileWriterAction.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.execute.around; import java.io.FileWriter; diff --git a/execute-around/src/main/java/com/iluwatar/execute/around/SimpleFileWriter.java b/execute-around/src/main/java/com/iluwatar/execute/around/SimpleFileWriter.java index e1a9073ef..111bad73e 100644 --- a/execute-around/src/main/java/com/iluwatar/execute/around/SimpleFileWriter.java +++ b/execute-around/src/main/java/com/iluwatar/execute/around/SimpleFileWriter.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.execute.around; import java.io.FileWriter; diff --git a/execute-around/src/test/java/com/iluwatar/execute/around/AppTest.java b/execute-around/src/test/java/com/iluwatar/execute/around/AppTest.java index 80dff657b..b74f53a25 100644 --- a/execute-around/src/test/java/com/iluwatar/execute/around/AppTest.java +++ b/execute-around/src/test/java/com/iluwatar/execute/around/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.execute.around; import org.junit.After; diff --git a/execute-around/src/test/java/com/iluwatar/execute/around/SimpleFileWriterTest.java b/execute-around/src/test/java/com/iluwatar/execute/around/SimpleFileWriterTest.java index 1f4380fe4..abad14935 100644 --- a/execute-around/src/test/java/com/iluwatar/execute/around/SimpleFileWriterTest.java +++ b/execute-around/src/test/java/com/iluwatar/execute/around/SimpleFileWriterTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.execute.around; import org.junit.Assert; diff --git a/facade/pom.xml b/facade/pom.xml index 56f308ae4..e4440b234 100644 --- a/facade/pom.xml +++ b/facade/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/facade/src/main/java/com/iluwatar/facade/App.java b/facade/src/main/java/com/iluwatar/facade/App.java index bcc492e0b..242bfc9c4 100644 --- a/facade/src/main/java/com/iluwatar/facade/App.java +++ b/facade/src/main/java/com/iluwatar/facade/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.facade; /** diff --git a/facade/src/main/java/com/iluwatar/facade/DwarvenCartOperator.java b/facade/src/main/java/com/iluwatar/facade/DwarvenCartOperator.java index d2b6f366e..bdc839f57 100644 --- a/facade/src/main/java/com/iluwatar/facade/DwarvenCartOperator.java +++ b/facade/src/main/java/com/iluwatar/facade/DwarvenCartOperator.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.facade; /** diff --git a/facade/src/main/java/com/iluwatar/facade/DwarvenGoldDigger.java b/facade/src/main/java/com/iluwatar/facade/DwarvenGoldDigger.java index df5ab1356..54fa821f4 100644 --- a/facade/src/main/java/com/iluwatar/facade/DwarvenGoldDigger.java +++ b/facade/src/main/java/com/iluwatar/facade/DwarvenGoldDigger.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.facade; /** diff --git a/facade/src/main/java/com/iluwatar/facade/DwarvenGoldmineFacade.java b/facade/src/main/java/com/iluwatar/facade/DwarvenGoldmineFacade.java index fd37e40c5..9e3aa29c3 100644 --- a/facade/src/main/java/com/iluwatar/facade/DwarvenGoldmineFacade.java +++ b/facade/src/main/java/com/iluwatar/facade/DwarvenGoldmineFacade.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.facade; import java.util.ArrayList; diff --git a/facade/src/main/java/com/iluwatar/facade/DwarvenMineWorker.java b/facade/src/main/java/com/iluwatar/facade/DwarvenMineWorker.java index 3190c9365..f27054c53 100644 --- a/facade/src/main/java/com/iluwatar/facade/DwarvenMineWorker.java +++ b/facade/src/main/java/com/iluwatar/facade/DwarvenMineWorker.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.facade; /** diff --git a/facade/src/main/java/com/iluwatar/facade/DwarvenTunnelDigger.java b/facade/src/main/java/com/iluwatar/facade/DwarvenTunnelDigger.java index 1d3dbe99d..74d8b89cc 100644 --- a/facade/src/main/java/com/iluwatar/facade/DwarvenTunnelDigger.java +++ b/facade/src/main/java/com/iluwatar/facade/DwarvenTunnelDigger.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.facade; /** diff --git a/facade/src/test/java/com/iluwatar/facade/AppTest.java b/facade/src/test/java/com/iluwatar/facade/AppTest.java index 3de38f26e..115fcc405 100644 --- a/facade/src/test/java/com/iluwatar/facade/AppTest.java +++ b/facade/src/test/java/com/iluwatar/facade/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.facade; import org.junit.Test; diff --git a/facade/src/test/java/com/iluwatar/facade/DwarvenGoldmineFacadeTest.java b/facade/src/test/java/com/iluwatar/facade/DwarvenGoldmineFacadeTest.java index 9a9bc5d66..4a3b218e2 100644 --- a/facade/src/test/java/com/iluwatar/facade/DwarvenGoldmineFacadeTest.java +++ b/facade/src/test/java/com/iluwatar/facade/DwarvenGoldmineFacadeTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.facade; import org.junit.After; diff --git a/factory-method/pom.xml b/factory-method/pom.xml index f3dc2646a..e7a56518f 100644 --- a/factory-method/pom.xml +++ b/factory-method/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/App.java b/factory-method/src/main/java/com/iluwatar/factory/method/App.java index 27b7e3121..4056f335c 100644 --- a/factory-method/src/main/java/com/iluwatar/factory/method/App.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factory.method; /** diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/Blacksmith.java b/factory-method/src/main/java/com/iluwatar/factory/method/Blacksmith.java index 991a9d433..9d90bebbc 100644 --- a/factory-method/src/main/java/com/iluwatar/factory/method/Blacksmith.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/Blacksmith.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factory.method; /** diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/ElfBlacksmith.java b/factory-method/src/main/java/com/iluwatar/factory/method/ElfBlacksmith.java index 99de5329b..52844691f 100644 --- a/factory-method/src/main/java/com/iluwatar/factory/method/ElfBlacksmith.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/ElfBlacksmith.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factory.method; /** diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/ElfWeapon.java b/factory-method/src/main/java/com/iluwatar/factory/method/ElfWeapon.java index b0ff33f2b..c06674d49 100644 --- a/factory-method/src/main/java/com/iluwatar/factory/method/ElfWeapon.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/ElfWeapon.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factory.method; /** diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/OrcBlacksmith.java b/factory-method/src/main/java/com/iluwatar/factory/method/OrcBlacksmith.java index c4db6c223..75247f4a2 100644 --- a/factory-method/src/main/java/com/iluwatar/factory/method/OrcBlacksmith.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/OrcBlacksmith.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factory.method; /** diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/OrcWeapon.java b/factory-method/src/main/java/com/iluwatar/factory/method/OrcWeapon.java index e1ec0f560..abae770ed 100644 --- a/factory-method/src/main/java/com/iluwatar/factory/method/OrcWeapon.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/OrcWeapon.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factory.method; /** diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/Weapon.java b/factory-method/src/main/java/com/iluwatar/factory/method/Weapon.java index 3b9a80f0f..d9c8cac0c 100644 --- a/factory-method/src/main/java/com/iluwatar/factory/method/Weapon.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/Weapon.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factory.method; /** diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/WeaponType.java b/factory-method/src/main/java/com/iluwatar/factory/method/WeaponType.java index 4c8f83e9b..34921ae5c 100644 --- a/factory-method/src/main/java/com/iluwatar/factory/method/WeaponType.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/WeaponType.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factory.method; /** diff --git a/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java index a6786a717..40515d4c9 100644 --- a/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java +++ b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factory.method; import static org.junit.Assert.assertEquals; diff --git a/fluentinterface/pom.xml b/fluentinterface/pom.xml index 1260bad3d..9912139f9 100644 --- a/fluentinterface/pom.xml +++ b/fluentinterface/pom.xml @@ -1,4 +1,28 @@ + diff --git a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/app/App.java b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/app/App.java index 4e5ab3767..cd69a2cbb 100644 --- a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/app/App.java +++ b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/app/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.fluentinterface.app; import static java.lang.String.valueOf; diff --git a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterable.java b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterable.java index 5c4df0391..d99a14315 100644 --- a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterable.java +++ b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterable.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.fluentinterface.fluentiterable; import java.util.ArrayList; diff --git a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/DecoratingIterator.java b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/DecoratingIterator.java index dae300c4e..c8b7520ac 100644 --- a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/DecoratingIterator.java +++ b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/DecoratingIterator.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.fluentinterface.fluentiterable.lazy; import java.util.Iterator; diff --git a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java index e887ad556..ae8565da8 100644 --- a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java +++ b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.fluentinterface.fluentiterable.lazy; import java.util.ArrayList; diff --git a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/simple/SimpleFluentIterable.java b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/simple/SimpleFluentIterable.java index ef1859529..29ef25b56 100644 --- a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/simple/SimpleFluentIterable.java +++ b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/simple/SimpleFluentIterable.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.fluentinterface.fluentiterable.simple; import java.util.ArrayList; diff --git a/fluentinterface/src/test/java/com/iluwatar/fluentinterface/app/AppTest.java b/fluentinterface/src/test/java/com/iluwatar/fluentinterface/app/AppTest.java index 2268b0428..5b750c604 100644 --- a/fluentinterface/src/test/java/com/iluwatar/fluentinterface/app/AppTest.java +++ b/fluentinterface/src/test/java/com/iluwatar/fluentinterface/app/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.fluentinterface.app; import org.junit.Test; diff --git a/fluentinterface/src/test/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterableTest.java b/fluentinterface/src/test/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterableTest.java index baabbe096..4037bed49 100644 --- a/fluentinterface/src/test/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterableTest.java +++ b/fluentinterface/src/test/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterableTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.fluentinterface.fluentiterable; import org.junit.Test; diff --git a/fluentinterface/src/test/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterableTest.java b/fluentinterface/src/test/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterableTest.java index aa51327e3..c422903c8 100644 --- a/fluentinterface/src/test/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterableTest.java +++ b/fluentinterface/src/test/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterableTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.fluentinterface.fluentiterable.lazy; import com.iluwatar.fluentinterface.fluentiterable.FluentIterable; diff --git a/fluentinterface/src/test/java/com/iluwatar/fluentinterface/fluentiterable/simple/SimpleFluentIterableTest.java b/fluentinterface/src/test/java/com/iluwatar/fluentinterface/fluentiterable/simple/SimpleFluentIterableTest.java index 360d6e222..e4e80641c 100644 --- a/fluentinterface/src/test/java/com/iluwatar/fluentinterface/fluentiterable/simple/SimpleFluentIterableTest.java +++ b/fluentinterface/src/test/java/com/iluwatar/fluentinterface/fluentiterable/simple/SimpleFluentIterableTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.fluentinterface.fluentiterable.simple; import com.iluwatar.fluentinterface.fluentiterable.FluentIterable; diff --git a/flux/pom.xml b/flux/pom.xml index aff383800..e35868c3e 100644 --- a/flux/pom.xml +++ b/flux/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/flux/src/main/java/com/iluwatar/flux/action/Action.java b/flux/src/main/java/com/iluwatar/flux/action/Action.java index b456c1ebe..7fc0fe51a 100644 --- a/flux/src/main/java/com/iluwatar/flux/action/Action.java +++ b/flux/src/main/java/com/iluwatar/flux/action/Action.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.action; /** diff --git a/flux/src/main/java/com/iluwatar/flux/action/ActionType.java b/flux/src/main/java/com/iluwatar/flux/action/ActionType.java index bbe13bc39..db8046d5e 100644 --- a/flux/src/main/java/com/iluwatar/flux/action/ActionType.java +++ b/flux/src/main/java/com/iluwatar/flux/action/ActionType.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.action; /** diff --git a/flux/src/main/java/com/iluwatar/flux/action/Content.java b/flux/src/main/java/com/iluwatar/flux/action/Content.java index 84910b3af..49a06b5ad 100644 --- a/flux/src/main/java/com/iluwatar/flux/action/Content.java +++ b/flux/src/main/java/com/iluwatar/flux/action/Content.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.action; /** diff --git a/flux/src/main/java/com/iluwatar/flux/action/ContentAction.java b/flux/src/main/java/com/iluwatar/flux/action/ContentAction.java index 842a5282f..c066ba933 100644 --- a/flux/src/main/java/com/iluwatar/flux/action/ContentAction.java +++ b/flux/src/main/java/com/iluwatar/flux/action/ContentAction.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.action; /** diff --git a/flux/src/main/java/com/iluwatar/flux/action/MenuAction.java b/flux/src/main/java/com/iluwatar/flux/action/MenuAction.java index 71e47e051..09c720503 100644 --- a/flux/src/main/java/com/iluwatar/flux/action/MenuAction.java +++ b/flux/src/main/java/com/iluwatar/flux/action/MenuAction.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.action; diff --git a/flux/src/main/java/com/iluwatar/flux/action/MenuItem.java b/flux/src/main/java/com/iluwatar/flux/action/MenuItem.java index c1732bb97..ce8c5ed64 100644 --- a/flux/src/main/java/com/iluwatar/flux/action/MenuItem.java +++ b/flux/src/main/java/com/iluwatar/flux/action/MenuItem.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.action; /** diff --git a/flux/src/main/java/com/iluwatar/flux/app/App.java b/flux/src/main/java/com/iluwatar/flux/app/App.java index 0f301a2ae..81aac980c 100644 --- a/flux/src/main/java/com/iluwatar/flux/app/App.java +++ b/flux/src/main/java/com/iluwatar/flux/app/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.app; import com.iluwatar.flux.action.MenuItem; diff --git a/flux/src/main/java/com/iluwatar/flux/dispatcher/Dispatcher.java b/flux/src/main/java/com/iluwatar/flux/dispatcher/Dispatcher.java index 1ff624e11..ae7edca57 100644 --- a/flux/src/main/java/com/iluwatar/flux/dispatcher/Dispatcher.java +++ b/flux/src/main/java/com/iluwatar/flux/dispatcher/Dispatcher.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.dispatcher; import java.util.LinkedList; diff --git a/flux/src/main/java/com/iluwatar/flux/store/ContentStore.java b/flux/src/main/java/com/iluwatar/flux/store/ContentStore.java index 621dc4c0c..bca8e29bf 100644 --- a/flux/src/main/java/com/iluwatar/flux/store/ContentStore.java +++ b/flux/src/main/java/com/iluwatar/flux/store/ContentStore.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.store; import com.iluwatar.flux.action.Action; diff --git a/flux/src/main/java/com/iluwatar/flux/store/MenuStore.java b/flux/src/main/java/com/iluwatar/flux/store/MenuStore.java index 23d27bcde..2b3b418b3 100644 --- a/flux/src/main/java/com/iluwatar/flux/store/MenuStore.java +++ b/flux/src/main/java/com/iluwatar/flux/store/MenuStore.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.store; import com.iluwatar.flux.action.Action; diff --git a/flux/src/main/java/com/iluwatar/flux/store/Store.java b/flux/src/main/java/com/iluwatar/flux/store/Store.java index 0562405b2..b3bc56b6f 100644 --- a/flux/src/main/java/com/iluwatar/flux/store/Store.java +++ b/flux/src/main/java/com/iluwatar/flux/store/Store.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.store; import java.util.LinkedList; diff --git a/flux/src/main/java/com/iluwatar/flux/view/ContentView.java b/flux/src/main/java/com/iluwatar/flux/view/ContentView.java index 5718a07f3..cb351bfae 100644 --- a/flux/src/main/java/com/iluwatar/flux/view/ContentView.java +++ b/flux/src/main/java/com/iluwatar/flux/view/ContentView.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.view; import com.iluwatar.flux.action.Content; diff --git a/flux/src/main/java/com/iluwatar/flux/view/MenuView.java b/flux/src/main/java/com/iluwatar/flux/view/MenuView.java index 20f8ce03d..6cd9005dc 100644 --- a/flux/src/main/java/com/iluwatar/flux/view/MenuView.java +++ b/flux/src/main/java/com/iluwatar/flux/view/MenuView.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.view; import com.iluwatar.flux.action.MenuItem; diff --git a/flux/src/main/java/com/iluwatar/flux/view/View.java b/flux/src/main/java/com/iluwatar/flux/view/View.java index 892527fdc..0a34f1fdf 100644 --- a/flux/src/main/java/com/iluwatar/flux/view/View.java +++ b/flux/src/main/java/com/iluwatar/flux/view/View.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.view; import com.iluwatar.flux.store.Store; diff --git a/flux/src/test/java/com/iluwatar/flux/action/ContentTest.java b/flux/src/test/java/com/iluwatar/flux/action/ContentTest.java index 7781c1d90..90e66d69a 100644 --- a/flux/src/test/java/com/iluwatar/flux/action/ContentTest.java +++ b/flux/src/test/java/com/iluwatar/flux/action/ContentTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.action; import org.junit.Test; diff --git a/flux/src/test/java/com/iluwatar/flux/action/MenuItemTest.java b/flux/src/test/java/com/iluwatar/flux/action/MenuItemTest.java index 02fa781e6..02c8e972b 100644 --- a/flux/src/test/java/com/iluwatar/flux/action/MenuItemTest.java +++ b/flux/src/test/java/com/iluwatar/flux/action/MenuItemTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.action; import org.junit.Test; diff --git a/flux/src/test/java/com/iluwatar/flux/app/AppTest.java b/flux/src/test/java/com/iluwatar/flux/app/AppTest.java index d833c321c..f25beaefa 100644 --- a/flux/src/test/java/com/iluwatar/flux/app/AppTest.java +++ b/flux/src/test/java/com/iluwatar/flux/app/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.app; import org.junit.Test; diff --git a/flux/src/test/java/com/iluwatar/flux/dispatcher/DispatcherTest.java b/flux/src/test/java/com/iluwatar/flux/dispatcher/DispatcherTest.java index 7c66e7a81..9f3f610d1 100644 --- a/flux/src/test/java/com/iluwatar/flux/dispatcher/DispatcherTest.java +++ b/flux/src/test/java/com/iluwatar/flux/dispatcher/DispatcherTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.dispatcher; import com.iluwatar.flux.action.Action; diff --git a/flux/src/test/java/com/iluwatar/flux/store/ContentStoreTest.java b/flux/src/test/java/com/iluwatar/flux/store/ContentStoreTest.java index 00a7a924d..6e2cc5b35 100644 --- a/flux/src/test/java/com/iluwatar/flux/store/ContentStoreTest.java +++ b/flux/src/test/java/com/iluwatar/flux/store/ContentStoreTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.store; import com.iluwatar.flux.action.Content; diff --git a/flux/src/test/java/com/iluwatar/flux/store/MenuStoreTest.java b/flux/src/test/java/com/iluwatar/flux/store/MenuStoreTest.java index 6fdc4e5d3..7d68656a2 100644 --- a/flux/src/test/java/com/iluwatar/flux/store/MenuStoreTest.java +++ b/flux/src/test/java/com/iluwatar/flux/store/MenuStoreTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.store; import com.iluwatar.flux.action.Content; diff --git a/flux/src/test/java/com/iluwatar/flux/view/ContentViewTest.java b/flux/src/test/java/com/iluwatar/flux/view/ContentViewTest.java index cf452233b..cb26f97d6 100644 --- a/flux/src/test/java/com/iluwatar/flux/view/ContentViewTest.java +++ b/flux/src/test/java/com/iluwatar/flux/view/ContentViewTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.view; import com.iluwatar.flux.action.Content; diff --git a/flux/src/test/java/com/iluwatar/flux/view/MenuViewTest.java b/flux/src/test/java/com/iluwatar/flux/view/MenuViewTest.java index 08a601c71..8a5d62f24 100644 --- a/flux/src/test/java/com/iluwatar/flux/view/MenuViewTest.java +++ b/flux/src/test/java/com/iluwatar/flux/view/MenuViewTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flux.view; import com.iluwatar.flux.action.Action; diff --git a/flyweight/pom.xml b/flyweight/pom.xml index fe282ea2e..341d03c7c 100644 --- a/flyweight/pom.xml +++ b/flyweight/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/flyweight/src/main/java/com/iluwatar/flyweight/AlchemistShop.java b/flyweight/src/main/java/com/iluwatar/flyweight/AlchemistShop.java index 8418e01e6..507de7a6a 100644 --- a/flyweight/src/main/java/com/iluwatar/flyweight/AlchemistShop.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/AlchemistShop.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flyweight; import java.util.ArrayList; diff --git a/flyweight/src/main/java/com/iluwatar/flyweight/App.java b/flyweight/src/main/java/com/iluwatar/flyweight/App.java index 211e031df..49c17e465 100644 --- a/flyweight/src/main/java/com/iluwatar/flyweight/App.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flyweight; /** diff --git a/flyweight/src/main/java/com/iluwatar/flyweight/HealingPotion.java b/flyweight/src/main/java/com/iluwatar/flyweight/HealingPotion.java index c458e19b5..464675a61 100644 --- a/flyweight/src/main/java/com/iluwatar/flyweight/HealingPotion.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/HealingPotion.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flyweight; /** diff --git a/flyweight/src/main/java/com/iluwatar/flyweight/HolyWaterPotion.java b/flyweight/src/main/java/com/iluwatar/flyweight/HolyWaterPotion.java index 45034c29a..b05b4af11 100644 --- a/flyweight/src/main/java/com/iluwatar/flyweight/HolyWaterPotion.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/HolyWaterPotion.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flyweight; /** diff --git a/flyweight/src/main/java/com/iluwatar/flyweight/InvisibilityPotion.java b/flyweight/src/main/java/com/iluwatar/flyweight/InvisibilityPotion.java index ca8de16e9..5aeb5d3a4 100644 --- a/flyweight/src/main/java/com/iluwatar/flyweight/InvisibilityPotion.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/InvisibilityPotion.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flyweight; /** diff --git a/flyweight/src/main/java/com/iluwatar/flyweight/PoisonPotion.java b/flyweight/src/main/java/com/iluwatar/flyweight/PoisonPotion.java index f1a1855f8..a9d13088e 100644 --- a/flyweight/src/main/java/com/iluwatar/flyweight/PoisonPotion.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/PoisonPotion.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flyweight; /** diff --git a/flyweight/src/main/java/com/iluwatar/flyweight/Potion.java b/flyweight/src/main/java/com/iluwatar/flyweight/Potion.java index 1ba72431a..d2520c316 100644 --- a/flyweight/src/main/java/com/iluwatar/flyweight/Potion.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/Potion.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flyweight; /** diff --git a/flyweight/src/main/java/com/iluwatar/flyweight/PotionFactory.java b/flyweight/src/main/java/com/iluwatar/flyweight/PotionFactory.java index 8154da984..436095081 100644 --- a/flyweight/src/main/java/com/iluwatar/flyweight/PotionFactory.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/PotionFactory.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flyweight; import java.util.EnumMap; diff --git a/flyweight/src/main/java/com/iluwatar/flyweight/PotionType.java b/flyweight/src/main/java/com/iluwatar/flyweight/PotionType.java index 0aade3826..89c6fdbe3 100644 --- a/flyweight/src/main/java/com/iluwatar/flyweight/PotionType.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/PotionType.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flyweight; /** diff --git a/flyweight/src/main/java/com/iluwatar/flyweight/StrengthPotion.java b/flyweight/src/main/java/com/iluwatar/flyweight/StrengthPotion.java index f729668d4..2c21e7df1 100644 --- a/flyweight/src/main/java/com/iluwatar/flyweight/StrengthPotion.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/StrengthPotion.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flyweight; /** diff --git a/flyweight/src/test/java/com/iluwatar/flyweight/AlchemistShopTest.java b/flyweight/src/test/java/com/iluwatar/flyweight/AlchemistShopTest.java index d99a98cf9..efb0a6e2e 100644 --- a/flyweight/src/test/java/com/iluwatar/flyweight/AlchemistShopTest.java +++ b/flyweight/src/test/java/com/iluwatar/flyweight/AlchemistShopTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flyweight; import org.junit.Test; diff --git a/flyweight/src/test/java/com/iluwatar/flyweight/AppTest.java b/flyweight/src/test/java/com/iluwatar/flyweight/AppTest.java index 5e0bd98b8..282311920 100644 --- a/flyweight/src/test/java/com/iluwatar/flyweight/AppTest.java +++ b/flyweight/src/test/java/com/iluwatar/flyweight/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.flyweight; import org.junit.Test; diff --git a/front-controller/pom.xml b/front-controller/pom.xml index 3f56aaa8c..44aed6265 100644 --- a/front-controller/pom.xml +++ b/front-controller/pom.xml @@ -1,4 +1,28 @@ + diff --git a/front-controller/src/main/java/com/iluwatar/front/controller/App.java b/front-controller/src/main/java/com/iluwatar/front/controller/App.java index 1beac119c..909578b3b 100644 --- a/front-controller/src/main/java/com/iluwatar/front/controller/App.java +++ b/front-controller/src/main/java/com/iluwatar/front/controller/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; /** diff --git a/front-controller/src/main/java/com/iluwatar/front/controller/ApplicationException.java b/front-controller/src/main/java/com/iluwatar/front/controller/ApplicationException.java index bb44d34f0..aa50fe2ce 100644 --- a/front-controller/src/main/java/com/iluwatar/front/controller/ApplicationException.java +++ b/front-controller/src/main/java/com/iluwatar/front/controller/ApplicationException.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; /** diff --git a/front-controller/src/main/java/com/iluwatar/front/controller/ArcherCommand.java b/front-controller/src/main/java/com/iluwatar/front/controller/ArcherCommand.java index 8396d5cfc..a1a391979 100644 --- a/front-controller/src/main/java/com/iluwatar/front/controller/ArcherCommand.java +++ b/front-controller/src/main/java/com/iluwatar/front/controller/ArcherCommand.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; /** diff --git a/front-controller/src/main/java/com/iluwatar/front/controller/ArcherView.java b/front-controller/src/main/java/com/iluwatar/front/controller/ArcherView.java index d16fe8b71..a7cf8ca27 100644 --- a/front-controller/src/main/java/com/iluwatar/front/controller/ArcherView.java +++ b/front-controller/src/main/java/com/iluwatar/front/controller/ArcherView.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; /** diff --git a/front-controller/src/main/java/com/iluwatar/front/controller/CatapultCommand.java b/front-controller/src/main/java/com/iluwatar/front/controller/CatapultCommand.java index b5ad9e37c..c4b3c6ea3 100644 --- a/front-controller/src/main/java/com/iluwatar/front/controller/CatapultCommand.java +++ b/front-controller/src/main/java/com/iluwatar/front/controller/CatapultCommand.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; /** diff --git a/front-controller/src/main/java/com/iluwatar/front/controller/CatapultView.java b/front-controller/src/main/java/com/iluwatar/front/controller/CatapultView.java index 161b4ed4e..90e4c7896 100644 --- a/front-controller/src/main/java/com/iluwatar/front/controller/CatapultView.java +++ b/front-controller/src/main/java/com/iluwatar/front/controller/CatapultView.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; /** diff --git a/front-controller/src/main/java/com/iluwatar/front/controller/Command.java b/front-controller/src/main/java/com/iluwatar/front/controller/Command.java index 2ad41a629..ed49572e4 100644 --- a/front-controller/src/main/java/com/iluwatar/front/controller/Command.java +++ b/front-controller/src/main/java/com/iluwatar/front/controller/Command.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; /** diff --git a/front-controller/src/main/java/com/iluwatar/front/controller/ErrorView.java b/front-controller/src/main/java/com/iluwatar/front/controller/ErrorView.java index c1045c821..cbfd4bd2e 100644 --- a/front-controller/src/main/java/com/iluwatar/front/controller/ErrorView.java +++ b/front-controller/src/main/java/com/iluwatar/front/controller/ErrorView.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; /** diff --git a/front-controller/src/main/java/com/iluwatar/front/controller/FrontController.java b/front-controller/src/main/java/com/iluwatar/front/controller/FrontController.java index 6b84d7f78..f5537c39b 100644 --- a/front-controller/src/main/java/com/iluwatar/front/controller/FrontController.java +++ b/front-controller/src/main/java/com/iluwatar/front/controller/FrontController.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; /** diff --git a/front-controller/src/main/java/com/iluwatar/front/controller/UnknownCommand.java b/front-controller/src/main/java/com/iluwatar/front/controller/UnknownCommand.java index d800d4db0..6e5b33987 100644 --- a/front-controller/src/main/java/com/iluwatar/front/controller/UnknownCommand.java +++ b/front-controller/src/main/java/com/iluwatar/front/controller/UnknownCommand.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; /** diff --git a/front-controller/src/main/java/com/iluwatar/front/controller/View.java b/front-controller/src/main/java/com/iluwatar/front/controller/View.java index 55bb187ce..536bb9750 100644 --- a/front-controller/src/main/java/com/iluwatar/front/controller/View.java +++ b/front-controller/src/main/java/com/iluwatar/front/controller/View.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; /** diff --git a/front-controller/src/test/java/com/iluwatar/front/controller/AppTest.java b/front-controller/src/test/java/com/iluwatar/front/controller/AppTest.java index cc09de662..8eec47b0a 100644 --- a/front-controller/src/test/java/com/iluwatar/front/controller/AppTest.java +++ b/front-controller/src/test/java/com/iluwatar/front/controller/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; import org.junit.Test; diff --git a/front-controller/src/test/java/com/iluwatar/front/controller/ApplicationExceptionTest.java b/front-controller/src/test/java/com/iluwatar/front/controller/ApplicationExceptionTest.java index 4b038cfda..26157acde 100644 --- a/front-controller/src/test/java/com/iluwatar/front/controller/ApplicationExceptionTest.java +++ b/front-controller/src/test/java/com/iluwatar/front/controller/ApplicationExceptionTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; import static org.junit.Assert.assertSame; diff --git a/front-controller/src/test/java/com/iluwatar/front/controller/CommandTest.java b/front-controller/src/test/java/com/iluwatar/front/controller/CommandTest.java index fa85caa39..c4d9ae625 100644 --- a/front-controller/src/test/java/com/iluwatar/front/controller/CommandTest.java +++ b/front-controller/src/test/java/com/iluwatar/front/controller/CommandTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; import org.junit.Test; diff --git a/front-controller/src/test/java/com/iluwatar/front/controller/FrontControllerTest.java b/front-controller/src/test/java/com/iluwatar/front/controller/FrontControllerTest.java index 9bc4253c0..0822ffcd0 100644 --- a/front-controller/src/test/java/com/iluwatar/front/controller/FrontControllerTest.java +++ b/front-controller/src/test/java/com/iluwatar/front/controller/FrontControllerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; import org.junit.Test; diff --git a/front-controller/src/test/java/com/iluwatar/front/controller/StdOutTest.java b/front-controller/src/test/java/com/iluwatar/front/controller/StdOutTest.java index 31d061b08..bc32a1b3c 100644 --- a/front-controller/src/test/java/com/iluwatar/front/controller/StdOutTest.java +++ b/front-controller/src/test/java/com/iluwatar/front/controller/StdOutTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; import org.junit.After; diff --git a/front-controller/src/test/java/com/iluwatar/front/controller/ViewTest.java b/front-controller/src/test/java/com/iluwatar/front/controller/ViewTest.java index fb2df1c60..cdabd66ef 100644 --- a/front-controller/src/test/java/com/iluwatar/front/controller/ViewTest.java +++ b/front-controller/src/test/java/com/iluwatar/front/controller/ViewTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.front.controller; import org.junit.Test; diff --git a/half-sync-half-async/pom.xml b/half-sync-half-async/pom.xml index 7ea1a203b..487afc3a0 100644 --- a/half-sync-half-async/pom.xml +++ b/half-sync-half-async/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/App.java b/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/App.java index b67b602ca..3c25be414 100644 --- a/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/App.java +++ b/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.halfsynchalfasync; import java.util.concurrent.LinkedBlockingQueue; diff --git a/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/AsyncTask.java b/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/AsyncTask.java index fb63e9653..91e36069e 100644 --- a/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/AsyncTask.java +++ b/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/AsyncTask.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.halfsynchalfasync; import java.util.concurrent.Callable; diff --git a/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/AsynchronousService.java b/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/AsynchronousService.java index 3be340c02..b42f551f2 100644 --- a/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/AsynchronousService.java +++ b/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/AsynchronousService.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.halfsynchalfasync; import java.util.concurrent.BlockingQueue; diff --git a/half-sync-half-async/src/test/java/com/iluwatar/halfsynchalfasync/AppTest.java b/half-sync-half-async/src/test/java/com/iluwatar/halfsynchalfasync/AppTest.java index 4104bdaf2..e791cc310 100644 --- a/half-sync-half-async/src/test/java/com/iluwatar/halfsynchalfasync/AppTest.java +++ b/half-sync-half-async/src/test/java/com/iluwatar/halfsynchalfasync/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.halfsynchalfasync; import java.util.concurrent.ExecutionException; diff --git a/half-sync-half-async/src/test/java/com/iluwatar/halfsynchalfasync/AsynchronousServiceTest.java b/half-sync-half-async/src/test/java/com/iluwatar/halfsynchalfasync/AsynchronousServiceTest.java index 16b51d0b5..7fcbd1541 100644 --- a/half-sync-half-async/src/test/java/com/iluwatar/halfsynchalfasync/AsynchronousServiceTest.java +++ b/half-sync-half-async/src/test/java/com/iluwatar/halfsynchalfasync/AsynchronousServiceTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.halfsynchalfasync; import org.junit.Test; diff --git a/intercepting-filter/pom.xml b/intercepting-filter/pom.xml index d18126ba9..6758d81aa 100644 --- a/intercepting-filter/pom.xml +++ b/intercepting-filter/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/AbstractFilter.java b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/AbstractFilter.java index 1dd31b201..e81531297 100644 --- a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/AbstractFilter.java +++ b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/AbstractFilter.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; /** diff --git a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/AddressFilter.java b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/AddressFilter.java index 38a762483..5b6ff4155 100644 --- a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/AddressFilter.java +++ b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/AddressFilter.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; /** diff --git a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/App.java b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/App.java index f0a2267d2..9d16737d0 100644 --- a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/App.java +++ b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; /** diff --git a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Client.java b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Client.java index 5934da75c..f2f1a6fbc 100644 --- a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Client.java +++ b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Client.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; import java.awt.BorderLayout; diff --git a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/ContactFilter.java b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/ContactFilter.java index 9d5ff1336..098de178b 100644 --- a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/ContactFilter.java +++ b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/ContactFilter.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; /** diff --git a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/DepositFilter.java b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/DepositFilter.java index 62bc600f3..08285f79d 100644 --- a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/DepositFilter.java +++ b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/DepositFilter.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; /** diff --git a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Filter.java b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Filter.java index a1ea5b4ee..9979df0e7 100644 --- a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Filter.java +++ b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Filter.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; /** diff --git a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/FilterChain.java b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/FilterChain.java index e8f3ca70f..7c5d74b4c 100644 --- a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/FilterChain.java +++ b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/FilterChain.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; diff --git a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/FilterManager.java b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/FilterManager.java index d6e01598e..b0e125522 100644 --- a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/FilterManager.java +++ b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/FilterManager.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; /** diff --git a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/NameFilter.java b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/NameFilter.java index 2f431caad..ea8d17413 100644 --- a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/NameFilter.java +++ b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/NameFilter.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; /** diff --git a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Order.java b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Order.java index 53d1a3dd9..8a60bed9d 100644 --- a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Order.java +++ b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Order.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; /** diff --git a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/OrderFilter.java b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/OrderFilter.java index 724359927..9bfe890f3 100644 --- a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/OrderFilter.java +++ b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/OrderFilter.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; /** diff --git a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Target.java b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Target.java index ffb13c160..e8fc693bc 100644 --- a/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Target.java +++ b/intercepting-filter/src/main/java/com/iluwatar/intercepting/filter/Target.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; import java.awt.BorderLayout; diff --git a/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/AppTest.java b/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/AppTest.java index 9abdcc181..c91fc3297 100644 --- a/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/AppTest.java +++ b/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; import org.junit.Test; diff --git a/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/FilterManagerTest.java b/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/FilterManagerTest.java index 022bd7586..4d7187727 100644 --- a/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/FilterManagerTest.java +++ b/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/FilterManagerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; import org.junit.Test; diff --git a/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/FilterTest.java b/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/FilterTest.java index 71d9bf250..c18a743d2 100644 --- a/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/FilterTest.java +++ b/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/FilterTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; import org.junit.Test; diff --git a/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/OrderTest.java b/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/OrderTest.java index 70862ed0f..5ef98b872 100644 --- a/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/OrderTest.java +++ b/intercepting-filter/src/test/java/com/iluwatar/intercepting/filter/OrderTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.intercepting.filter; import org.junit.Test; diff --git a/interpreter/pom.xml b/interpreter/pom.xml index 72fd0d51b..91efe5033 100644 --- a/interpreter/pom.xml +++ b/interpreter/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/interpreter/src/main/java/com/iluwatar/interpreter/App.java b/interpreter/src/main/java/com/iluwatar/interpreter/App.java index e4e238c15..708f06e6f 100644 --- a/interpreter/src/main/java/com/iluwatar/interpreter/App.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.interpreter; import java.util.Stack; diff --git a/interpreter/src/main/java/com/iluwatar/interpreter/Expression.java b/interpreter/src/main/java/com/iluwatar/interpreter/Expression.java index 635776115..20cdb512a 100644 --- a/interpreter/src/main/java/com/iluwatar/interpreter/Expression.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/Expression.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.interpreter; /** diff --git a/interpreter/src/main/java/com/iluwatar/interpreter/MinusExpression.java b/interpreter/src/main/java/com/iluwatar/interpreter/MinusExpression.java index d41e75b5a..53748baf8 100644 --- a/interpreter/src/main/java/com/iluwatar/interpreter/MinusExpression.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/MinusExpression.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.interpreter; /** diff --git a/interpreter/src/main/java/com/iluwatar/interpreter/MultiplyExpression.java b/interpreter/src/main/java/com/iluwatar/interpreter/MultiplyExpression.java index af7c9f9d0..bd060d3c0 100644 --- a/interpreter/src/main/java/com/iluwatar/interpreter/MultiplyExpression.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/MultiplyExpression.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.interpreter; /** diff --git a/interpreter/src/main/java/com/iluwatar/interpreter/NumberExpression.java b/interpreter/src/main/java/com/iluwatar/interpreter/NumberExpression.java index 4ca4bd589..891c926bd 100644 --- a/interpreter/src/main/java/com/iluwatar/interpreter/NumberExpression.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/NumberExpression.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.interpreter; /** diff --git a/interpreter/src/main/java/com/iluwatar/interpreter/PlusExpression.java b/interpreter/src/main/java/com/iluwatar/interpreter/PlusExpression.java index 058199bb2..066d536b1 100644 --- a/interpreter/src/main/java/com/iluwatar/interpreter/PlusExpression.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/PlusExpression.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.interpreter; /** diff --git a/interpreter/src/test/java/com/iluwatar/interpreter/AppTest.java b/interpreter/src/test/java/com/iluwatar/interpreter/AppTest.java index be696f072..01b927e67 100644 --- a/interpreter/src/test/java/com/iluwatar/interpreter/AppTest.java +++ b/interpreter/src/test/java/com/iluwatar/interpreter/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.interpreter; import org.junit.Test; diff --git a/interpreter/src/test/java/com/iluwatar/interpreter/ExpressionTest.java b/interpreter/src/test/java/com/iluwatar/interpreter/ExpressionTest.java index 150596cd8..d07ee84fb 100644 --- a/interpreter/src/test/java/com/iluwatar/interpreter/ExpressionTest.java +++ b/interpreter/src/test/java/com/iluwatar/interpreter/ExpressionTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.interpreter; import org.junit.Test; diff --git a/interpreter/src/test/java/com/iluwatar/interpreter/MinusExpressionTest.java b/interpreter/src/test/java/com/iluwatar/interpreter/MinusExpressionTest.java index 3b6d322fe..fe4ebc58f 100644 --- a/interpreter/src/test/java/com/iluwatar/interpreter/MinusExpressionTest.java +++ b/interpreter/src/test/java/com/iluwatar/interpreter/MinusExpressionTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.interpreter; import org.junit.runner.RunWith; diff --git a/interpreter/src/test/java/com/iluwatar/interpreter/MultiplyExpressionTest.java b/interpreter/src/test/java/com/iluwatar/interpreter/MultiplyExpressionTest.java index 91ecdb008..f876dda34 100644 --- a/interpreter/src/test/java/com/iluwatar/interpreter/MultiplyExpressionTest.java +++ b/interpreter/src/test/java/com/iluwatar/interpreter/MultiplyExpressionTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.interpreter; import org.junit.runner.RunWith; diff --git a/interpreter/src/test/java/com/iluwatar/interpreter/NumberExpressionTest.java b/interpreter/src/test/java/com/iluwatar/interpreter/NumberExpressionTest.java index 2c4a35be7..d055fcd47 100644 --- a/interpreter/src/test/java/com/iluwatar/interpreter/NumberExpressionTest.java +++ b/interpreter/src/test/java/com/iluwatar/interpreter/NumberExpressionTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.interpreter; import org.junit.Test; diff --git a/interpreter/src/test/java/com/iluwatar/interpreter/PlusExpressionTest.java b/interpreter/src/test/java/com/iluwatar/interpreter/PlusExpressionTest.java index 065213631..e99d49555 100644 --- a/interpreter/src/test/java/com/iluwatar/interpreter/PlusExpressionTest.java +++ b/interpreter/src/test/java/com/iluwatar/interpreter/PlusExpressionTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.interpreter; import org.junit.runner.RunWith; diff --git a/iterator/pom.xml b/iterator/pom.xml index 9f57dedb6..abc18311c 100644 --- a/iterator/pom.xml +++ b/iterator/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/iterator/src/main/java/com/iluwatar/iterator/App.java b/iterator/src/main/java/com/iluwatar/iterator/App.java index 467040ca6..8da0a7433 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/App.java +++ b/iterator/src/main/java/com/iluwatar/iterator/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.iterator; /** diff --git a/iterator/src/main/java/com/iluwatar/iterator/Item.java b/iterator/src/main/java/com/iluwatar/iterator/Item.java index 6492fd9ab..d505332c7 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/Item.java +++ b/iterator/src/main/java/com/iluwatar/iterator/Item.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.iterator; /** diff --git a/iterator/src/main/java/com/iluwatar/iterator/ItemIterator.java b/iterator/src/main/java/com/iluwatar/iterator/ItemIterator.java index 3798bbd74..fa1ff633b 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/ItemIterator.java +++ b/iterator/src/main/java/com/iluwatar/iterator/ItemIterator.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.iterator; /** diff --git a/iterator/src/main/java/com/iluwatar/iterator/ItemType.java b/iterator/src/main/java/com/iluwatar/iterator/ItemType.java index 3a51c3946..0b1def25b 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/ItemType.java +++ b/iterator/src/main/java/com/iluwatar/iterator/ItemType.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.iterator; /** diff --git a/iterator/src/main/java/com/iluwatar/iterator/TreasureChest.java b/iterator/src/main/java/com/iluwatar/iterator/TreasureChest.java index 6b5c54a5a..6f375434b 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/TreasureChest.java +++ b/iterator/src/main/java/com/iluwatar/iterator/TreasureChest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.iterator; import java.util.ArrayList; diff --git a/iterator/src/main/java/com/iluwatar/iterator/TreasureChestItemIterator.java b/iterator/src/main/java/com/iluwatar/iterator/TreasureChestItemIterator.java index a8303f308..7c80422c2 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/TreasureChestItemIterator.java +++ b/iterator/src/main/java/com/iluwatar/iterator/TreasureChestItemIterator.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.iterator; import java.util.List; diff --git a/iterator/src/test/java/com/iluwatar/iterator/AppTest.java b/iterator/src/test/java/com/iluwatar/iterator/AppTest.java index 5ec59ec74..7259386bb 100644 --- a/iterator/src/test/java/com/iluwatar/iterator/AppTest.java +++ b/iterator/src/test/java/com/iluwatar/iterator/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.iterator; import org.junit.Test; diff --git a/iterator/src/test/java/com/iluwatar/iterator/TreasureChestTest.java b/iterator/src/test/java/com/iluwatar/iterator/TreasureChestTest.java index a2102a2e2..9bef322d6 100644 --- a/iterator/src/test/java/com/iluwatar/iterator/TreasureChestTest.java +++ b/iterator/src/test/java/com/iluwatar/iterator/TreasureChestTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.iterator; import org.junit.Test; diff --git a/layers/pom.xml b/layers/pom.xml index 685f8b65c..3ac0156c0 100644 --- a/layers/pom.xml +++ b/layers/pom.xml @@ -1,4 +1,28 @@ + diff --git a/layers/src/main/java/com/iluwatar/layers/App.java b/layers/src/main/java/com/iluwatar/layers/App.java index ecb532510..f8a1648bf 100644 --- a/layers/src/main/java/com/iluwatar/layers/App.java +++ b/layers/src/main/java/com/iluwatar/layers/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.layers; import java.util.Arrays; diff --git a/layers/src/main/java/com/iluwatar/layers/Cake.java b/layers/src/main/java/com/iluwatar/layers/Cake.java index b251576bf..8582cf418 100644 --- a/layers/src/main/java/com/iluwatar/layers/Cake.java +++ b/layers/src/main/java/com/iluwatar/layers/Cake.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.layers; import java.util.HashSet; diff --git a/layers/src/main/java/com/iluwatar/layers/CakeBakingException.java b/layers/src/main/java/com/iluwatar/layers/CakeBakingException.java index a61b65b81..4e79f34e1 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeBakingException.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeBakingException.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.layers; /** diff --git a/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java b/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java index adfa585d6..1cb5b3574 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeBakingService.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.layers; import java.util.List; diff --git a/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java b/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java index 79917842d..c60281542 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.layers; import java.util.ArrayList; diff --git a/layers/src/main/java/com/iluwatar/layers/CakeDao.java b/layers/src/main/java/com/iluwatar/layers/CakeDao.java index 075e75d31..15107b030 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeDao.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeDao.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.layers; import org.springframework.data.repository.CrudRepository; diff --git a/layers/src/main/java/com/iluwatar/layers/CakeInfo.java b/layers/src/main/java/com/iluwatar/layers/CakeInfo.java index dc374bf60..e71da5d30 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeInfo.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeInfo.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.layers; import java.util.List; diff --git a/layers/src/main/java/com/iluwatar/layers/CakeLayer.java b/layers/src/main/java/com/iluwatar/layers/CakeLayer.java index 7cbb55e28..dd24c819e 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeLayer.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeLayer.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.layers; import javax.persistence.CascadeType; diff --git a/layers/src/main/java/com/iluwatar/layers/CakeLayerDao.java b/layers/src/main/java/com/iluwatar/layers/CakeLayerDao.java index 9e1d035a8..2eea55eaa 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeLayerDao.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeLayerDao.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.layers; import org.springframework.data.repository.CrudRepository; diff --git a/layers/src/main/java/com/iluwatar/layers/CakeLayerInfo.java b/layers/src/main/java/com/iluwatar/layers/CakeLayerInfo.java index 5bc38b109..7f327cac3 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeLayerInfo.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeLayerInfo.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.layers; import java.util.Optional; diff --git a/layers/src/main/java/com/iluwatar/layers/CakeTopping.java b/layers/src/main/java/com/iluwatar/layers/CakeTopping.java index 9f2107f1e..db63ec298 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeTopping.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeTopping.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.layers; import javax.persistence.CascadeType; diff --git a/layers/src/main/java/com/iluwatar/layers/CakeToppingDao.java b/layers/src/main/java/com/iluwatar/layers/CakeToppingDao.java index 3ddcf53ec..7a7b32aa7 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeToppingDao.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeToppingDao.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.layers; import org.springframework.data.repository.CrudRepository; diff --git a/layers/src/main/java/com/iluwatar/layers/CakeToppingInfo.java b/layers/src/main/java/com/iluwatar/layers/CakeToppingInfo.java index 4c9be6a3e..9acb0526e 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeToppingInfo.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeToppingInfo.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.layers; import java.util.Optional; diff --git a/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java b/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java index 3a465b2b6..18ab34e7f 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.layers; /** diff --git a/layers/src/main/java/com/iluwatar/layers/View.java b/layers/src/main/java/com/iluwatar/layers/View.java index be2187e4d..fa4f307ca 100644 --- a/layers/src/main/java/com/iluwatar/layers/View.java +++ b/layers/src/main/java/com/iluwatar/layers/View.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.layers; /** diff --git a/layers/src/main/resources/META-INF/persistence.xml b/layers/src/main/resources/META-INF/persistence.xml index 96856e1b9..32afb9fd4 100644 --- a/layers/src/main/resources/META-INF/persistence.xml +++ b/layers/src/main/resources/META-INF/persistence.xml @@ -1,4 +1,28 @@ + diff --git a/layers/src/main/resources/applicationContext.xml b/layers/src/main/resources/applicationContext.xml index 6b3bc466d..e1ddc7427 100644 --- a/layers/src/main/resources/applicationContext.xml +++ b/layers/src/main/resources/applicationContext.xml @@ -1,4 +1,28 @@ + + 4.0.0 diff --git a/lazy-loading/src/main/java/com/iluwatar/lazy/loading/App.java b/lazy-loading/src/main/java/com/iluwatar/lazy/loading/App.java index 14708f0e9..7a658a8c6 100644 --- a/lazy-loading/src/main/java/com/iluwatar/lazy/loading/App.java +++ b/lazy-loading/src/main/java/com/iluwatar/lazy/loading/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.lazy.loading; /** diff --git a/lazy-loading/src/main/java/com/iluwatar/lazy/loading/Heavy.java b/lazy-loading/src/main/java/com/iluwatar/lazy/loading/Heavy.java index dabd8c313..57e8e263e 100644 --- a/lazy-loading/src/main/java/com/iluwatar/lazy/loading/Heavy.java +++ b/lazy-loading/src/main/java/com/iluwatar/lazy/loading/Heavy.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.lazy.loading; /** diff --git a/lazy-loading/src/main/java/com/iluwatar/lazy/loading/HolderNaive.java b/lazy-loading/src/main/java/com/iluwatar/lazy/loading/HolderNaive.java index f78005c73..75c65d1b9 100644 --- a/lazy-loading/src/main/java/com/iluwatar/lazy/loading/HolderNaive.java +++ b/lazy-loading/src/main/java/com/iluwatar/lazy/loading/HolderNaive.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.lazy.loading; /** diff --git a/lazy-loading/src/main/java/com/iluwatar/lazy/loading/HolderThreadSafe.java b/lazy-loading/src/main/java/com/iluwatar/lazy/loading/HolderThreadSafe.java index 56074846e..c6e0fcfd9 100644 --- a/lazy-loading/src/main/java/com/iluwatar/lazy/loading/HolderThreadSafe.java +++ b/lazy-loading/src/main/java/com/iluwatar/lazy/loading/HolderThreadSafe.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.lazy.loading; /** diff --git a/lazy-loading/src/main/java/com/iluwatar/lazy/loading/Java8Holder.java b/lazy-loading/src/main/java/com/iluwatar/lazy/loading/Java8Holder.java index aa86e3b34..e4ce394cc 100644 --- a/lazy-loading/src/main/java/com/iluwatar/lazy/loading/Java8Holder.java +++ b/lazy-loading/src/main/java/com/iluwatar/lazy/loading/Java8Holder.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.lazy.loading; import java.util.function.Supplier; diff --git a/lazy-loading/src/test/java/com/iluwatar/lazy/loading/AbstractHolderTest.java b/lazy-loading/src/test/java/com/iluwatar/lazy/loading/AbstractHolderTest.java index 99523cd0a..3118847d9 100644 --- a/lazy-loading/src/test/java/com/iluwatar/lazy/loading/AbstractHolderTest.java +++ b/lazy-loading/src/test/java/com/iluwatar/lazy/loading/AbstractHolderTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.lazy.loading; import org.junit.Test; diff --git a/lazy-loading/src/test/java/com/iluwatar/lazy/loading/AppTest.java b/lazy-loading/src/test/java/com/iluwatar/lazy/loading/AppTest.java index 29176a6b5..36cdedb6a 100644 --- a/lazy-loading/src/test/java/com/iluwatar/lazy/loading/AppTest.java +++ b/lazy-loading/src/test/java/com/iluwatar/lazy/loading/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.lazy.loading; import org.junit.Test; diff --git a/lazy-loading/src/test/java/com/iluwatar/lazy/loading/HolderNaiveTest.java b/lazy-loading/src/test/java/com/iluwatar/lazy/loading/HolderNaiveTest.java index 2c539e8ca..a9c1b6afb 100644 --- a/lazy-loading/src/test/java/com/iluwatar/lazy/loading/HolderNaiveTest.java +++ b/lazy-loading/src/test/java/com/iluwatar/lazy/loading/HolderNaiveTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.lazy.loading; import java.lang.reflect.Field; diff --git a/lazy-loading/src/test/java/com/iluwatar/lazy/loading/HolderThreadSafeTest.java b/lazy-loading/src/test/java/com/iluwatar/lazy/loading/HolderThreadSafeTest.java index f6aed73b7..3803a482e 100644 --- a/lazy-loading/src/test/java/com/iluwatar/lazy/loading/HolderThreadSafeTest.java +++ b/lazy-loading/src/test/java/com/iluwatar/lazy/loading/HolderThreadSafeTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.lazy.loading; import java.lang.reflect.Field; diff --git a/lazy-loading/src/test/java/com/iluwatar/lazy/loading/Java8HolderTest.java b/lazy-loading/src/test/java/com/iluwatar/lazy/loading/Java8HolderTest.java index aed9a054e..08a3995f9 100644 --- a/lazy-loading/src/test/java/com/iluwatar/lazy/loading/Java8HolderTest.java +++ b/lazy-loading/src/test/java/com/iluwatar/lazy/loading/Java8HolderTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.lazy.loading; import java.lang.reflect.Field; diff --git a/mediator/pom.xml b/mediator/pom.xml index 449ce6e35..f7d1a5fd4 100644 --- a/mediator/pom.xml +++ b/mediator/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/mediator/src/main/java/com/iluwatar/mediator/Action.java b/mediator/src/main/java/com/iluwatar/mediator/Action.java index d264f7297..b2dc25ed3 100644 --- a/mediator/src/main/java/com/iluwatar/mediator/Action.java +++ b/mediator/src/main/java/com/iluwatar/mediator/Action.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.mediator; /** diff --git a/mediator/src/main/java/com/iluwatar/mediator/App.java b/mediator/src/main/java/com/iluwatar/mediator/App.java index 0af9a8717..57aec35d2 100644 --- a/mediator/src/main/java/com/iluwatar/mediator/App.java +++ b/mediator/src/main/java/com/iluwatar/mediator/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.mediator; /** diff --git a/mediator/src/main/java/com/iluwatar/mediator/Hobbit.java b/mediator/src/main/java/com/iluwatar/mediator/Hobbit.java index 3d1bf83bf..41ed5f5bd 100644 --- a/mediator/src/main/java/com/iluwatar/mediator/Hobbit.java +++ b/mediator/src/main/java/com/iluwatar/mediator/Hobbit.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.mediator; /** diff --git a/mediator/src/main/java/com/iluwatar/mediator/Hunter.java b/mediator/src/main/java/com/iluwatar/mediator/Hunter.java index d6abf3416..0ff2a550e 100644 --- a/mediator/src/main/java/com/iluwatar/mediator/Hunter.java +++ b/mediator/src/main/java/com/iluwatar/mediator/Hunter.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.mediator; /** diff --git a/mediator/src/main/java/com/iluwatar/mediator/Party.java b/mediator/src/main/java/com/iluwatar/mediator/Party.java index cb53dae27..c3c2f1666 100644 --- a/mediator/src/main/java/com/iluwatar/mediator/Party.java +++ b/mediator/src/main/java/com/iluwatar/mediator/Party.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.mediator; /** diff --git a/mediator/src/main/java/com/iluwatar/mediator/PartyImpl.java b/mediator/src/main/java/com/iluwatar/mediator/PartyImpl.java index ab15c26da..f45c2869a 100644 --- a/mediator/src/main/java/com/iluwatar/mediator/PartyImpl.java +++ b/mediator/src/main/java/com/iluwatar/mediator/PartyImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.mediator; import java.util.ArrayList; diff --git a/mediator/src/main/java/com/iluwatar/mediator/PartyMember.java b/mediator/src/main/java/com/iluwatar/mediator/PartyMember.java index 0ee078070..1406ca889 100644 --- a/mediator/src/main/java/com/iluwatar/mediator/PartyMember.java +++ b/mediator/src/main/java/com/iluwatar/mediator/PartyMember.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.mediator; /** diff --git a/mediator/src/main/java/com/iluwatar/mediator/PartyMemberBase.java b/mediator/src/main/java/com/iluwatar/mediator/PartyMemberBase.java index 1f58d3147..7d3ca3dbf 100644 --- a/mediator/src/main/java/com/iluwatar/mediator/PartyMemberBase.java +++ b/mediator/src/main/java/com/iluwatar/mediator/PartyMemberBase.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.mediator; /** diff --git a/mediator/src/main/java/com/iluwatar/mediator/Rogue.java b/mediator/src/main/java/com/iluwatar/mediator/Rogue.java index f7b005c94..b15d81d51 100644 --- a/mediator/src/main/java/com/iluwatar/mediator/Rogue.java +++ b/mediator/src/main/java/com/iluwatar/mediator/Rogue.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.mediator; /** diff --git a/mediator/src/main/java/com/iluwatar/mediator/Wizard.java b/mediator/src/main/java/com/iluwatar/mediator/Wizard.java index 3fdc73aa6..6f9d4433b 100644 --- a/mediator/src/main/java/com/iluwatar/mediator/Wizard.java +++ b/mediator/src/main/java/com/iluwatar/mediator/Wizard.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.mediator; /** diff --git a/mediator/src/test/java/com/iluwatar/mediator/AppTest.java b/mediator/src/test/java/com/iluwatar/mediator/AppTest.java index 3e10dd846..7691e11b0 100644 --- a/mediator/src/test/java/com/iluwatar/mediator/AppTest.java +++ b/mediator/src/test/java/com/iluwatar/mediator/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.mediator; import org.junit.Test; diff --git a/mediator/src/test/java/com/iluwatar/mediator/PartyImplTest.java b/mediator/src/test/java/com/iluwatar/mediator/PartyImplTest.java index 992662fb2..7e9181fd7 100644 --- a/mediator/src/test/java/com/iluwatar/mediator/PartyImplTest.java +++ b/mediator/src/test/java/com/iluwatar/mediator/PartyImplTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.mediator; import org.junit.Test; diff --git a/mediator/src/test/java/com/iluwatar/mediator/PartyMemberTest.java b/mediator/src/test/java/com/iluwatar/mediator/PartyMemberTest.java index 31b7222e9..0bf43f9cd 100644 --- a/mediator/src/test/java/com/iluwatar/mediator/PartyMemberTest.java +++ b/mediator/src/test/java/com/iluwatar/mediator/PartyMemberTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.mediator; import org.junit.After; diff --git a/memento/pom.xml b/memento/pom.xml index 258cd270a..22a67c5d9 100644 --- a/memento/pom.xml +++ b/memento/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/memento/src/main/java/com/iluwatar/memento/App.java b/memento/src/main/java/com/iluwatar/memento/App.java index e08e9a106..e1ee349b1 100644 --- a/memento/src/main/java/com/iluwatar/memento/App.java +++ b/memento/src/main/java/com/iluwatar/memento/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.memento; import java.util.Stack; diff --git a/memento/src/main/java/com/iluwatar/memento/Star.java b/memento/src/main/java/com/iluwatar/memento/Star.java index f67edfd15..d2df823a0 100644 --- a/memento/src/main/java/com/iluwatar/memento/Star.java +++ b/memento/src/main/java/com/iluwatar/memento/Star.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.memento; /** diff --git a/memento/src/main/java/com/iluwatar/memento/StarMemento.java b/memento/src/main/java/com/iluwatar/memento/StarMemento.java index a60f1f058..5f66b2939 100644 --- a/memento/src/main/java/com/iluwatar/memento/StarMemento.java +++ b/memento/src/main/java/com/iluwatar/memento/StarMemento.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.memento; /** diff --git a/memento/src/main/java/com/iluwatar/memento/StarType.java b/memento/src/main/java/com/iluwatar/memento/StarType.java index 13e84d00f..ffd2f1adb 100644 --- a/memento/src/main/java/com/iluwatar/memento/StarType.java +++ b/memento/src/main/java/com/iluwatar/memento/StarType.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.memento; /** diff --git a/memento/src/test/java/com/iluwatar/memento/AppTest.java b/memento/src/test/java/com/iluwatar/memento/AppTest.java index 79ffea00f..cfdce9471 100644 --- a/memento/src/test/java/com/iluwatar/memento/AppTest.java +++ b/memento/src/test/java/com/iluwatar/memento/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.memento; import org.junit.Test; diff --git a/memento/src/test/java/com/iluwatar/memento/StarTest.java b/memento/src/test/java/com/iluwatar/memento/StarTest.java index b5c7d9be0..8f81fcfa7 100644 --- a/memento/src/test/java/com/iluwatar/memento/StarTest.java +++ b/memento/src/test/java/com/iluwatar/memento/StarTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.memento; import org.junit.Test; diff --git a/message-channel/pom.xml b/message-channel/pom.xml index 4f5f90339..e8b0ca567 100644 --- a/message-channel/pom.xml +++ b/message-channel/pom.xml @@ -1,4 +1,28 @@ + diff --git a/message-channel/src/main/java/com/iluwatar/message/channel/App.java b/message-channel/src/main/java/com/iluwatar/message/channel/App.java index b0aeb690f..4e5ef11cf 100644 --- a/message-channel/src/main/java/com/iluwatar/message/channel/App.java +++ b/message-channel/src/main/java/com/iluwatar/message/channel/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.message.channel; import org.apache.camel.CamelContext; diff --git a/message-channel/src/test/java/com/iluwatar/message/channel/AppTest.java b/message-channel/src/test/java/com/iluwatar/message/channel/AppTest.java index d36fff43f..ace457c16 100644 --- a/message-channel/src/test/java/com/iluwatar/message/channel/AppTest.java +++ b/message-channel/src/test/java/com/iluwatar/message/channel/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.message.channel; import org.junit.Test; diff --git a/model-view-controller/pom.xml b/model-view-controller/pom.xml index 6db4d556f..eaf9f210d 100644 --- a/model-view-controller/pom.xml +++ b/model-view-controller/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/App.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/App.java index 097ea3932..4a3d2b41e 100644 --- a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/App.java +++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.controller; /** diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/Fatigue.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/Fatigue.java index d4a60ba93..38d3030e0 100644 --- a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/Fatigue.java +++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/Fatigue.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.controller; /** diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantController.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantController.java index 42dcaf539..e291e682c 100644 --- a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantController.java +++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantController.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.controller; /** diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantModel.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantModel.java index 2ecbe8b1f..9b9303de7 100644 --- a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantModel.java +++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantModel.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.controller; /** diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantView.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantView.java index 5b2c8e840..dd4361487 100644 --- a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantView.java +++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/GiantView.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.controller; /** diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/Health.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/Health.java index 9bde455dd..4efe0100b 100644 --- a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/Health.java +++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/Health.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.controller; /** diff --git a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/Nourishment.java b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/Nourishment.java index c3e043906..e2d41ccf8 100644 --- a/model-view-controller/src/main/java/com/iluwatar/model/view/controller/Nourishment.java +++ b/model-view-controller/src/main/java/com/iluwatar/model/view/controller/Nourishment.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.controller; /** diff --git a/model-view-controller/src/test/java/com/iluwatar/model/view/controller/AppTest.java b/model-view-controller/src/test/java/com/iluwatar/model/view/controller/AppTest.java index 286ab9119..aad850d69 100644 --- a/model-view-controller/src/test/java/com/iluwatar/model/view/controller/AppTest.java +++ b/model-view-controller/src/test/java/com/iluwatar/model/view/controller/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.controller; import org.junit.Test; diff --git a/model-view-controller/src/test/java/com/iluwatar/model/view/controller/GiantControllerTest.java b/model-view-controller/src/test/java/com/iluwatar/model/view/controller/GiantControllerTest.java index 0090f2d1d..7e0532d30 100644 --- a/model-view-controller/src/test/java/com/iluwatar/model/view/controller/GiantControllerTest.java +++ b/model-view-controller/src/test/java/com/iluwatar/model/view/controller/GiantControllerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.controller; import org.junit.Test; diff --git a/model-view-controller/src/test/java/com/iluwatar/model/view/controller/GiantModelTest.java b/model-view-controller/src/test/java/com/iluwatar/model/view/controller/GiantModelTest.java index 9513a62ec..8e322fc59 100644 --- a/model-view-controller/src/test/java/com/iluwatar/model/view/controller/GiantModelTest.java +++ b/model-view-controller/src/test/java/com/iluwatar/model/view/controller/GiantModelTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.controller; import org.junit.Test; diff --git a/model-view-controller/src/test/java/com/iluwatar/model/view/controller/GiantViewTest.java b/model-view-controller/src/test/java/com/iluwatar/model/view/controller/GiantViewTest.java index 8d7a7dfbf..89d503d4e 100644 --- a/model-view-controller/src/test/java/com/iluwatar/model/view/controller/GiantViewTest.java +++ b/model-view-controller/src/test/java/com/iluwatar/model/view/controller/GiantViewTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.controller; import org.junit.After; diff --git a/model-view-presenter/etc/data/test.txt b/model-view-presenter/etc/data/test.txt index 997ae361a..85aa49612 100644 --- a/model-view-presenter/etc/data/test.txt +++ b/model-view-presenter/etc/data/test.txt @@ -1,2 +1,25 @@ +==== + The MIT License + Copyright (c) 2014 Ilkka Seppälä + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +==== + Test line 1 Test line 2 \ No newline at end of file diff --git a/model-view-presenter/pom.xml b/model-view-presenter/pom.xml index cea55b47f..343a39f57 100644 --- a/model-view-presenter/pom.xml +++ b/model-view-presenter/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/App.java b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/App.java index 2dc3f4d51..2c8985252 100644 --- a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/App.java +++ b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.presenter; /** diff --git a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java index 0cf4f8c34..2b9b26d96 100644 --- a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java +++ b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.presenter; import java.io.BufferedReader; diff --git a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorJFrame.java b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorJFrame.java index db08d525b..9cf883086 100644 --- a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorJFrame.java +++ b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorJFrame.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.presenter; import java.awt.Color; diff --git a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorPresenter.java b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorPresenter.java index f38dc2655..54f9a91c6 100644 --- a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorPresenter.java +++ b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorPresenter.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.presenter; /** diff --git a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorStub.java b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorStub.java index ac338ef22..b9ce73878 100644 --- a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorStub.java +++ b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorStub.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.presenter; /** diff --git a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorView.java b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorView.java index f124c0054..94edcf7d0 100644 --- a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorView.java +++ b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileSelectorView.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.presenter; /** diff --git a/model-view-presenter/src/test/java/com/iluwatar/model/view/presenter/AppTest.java b/model-view-presenter/src/test/java/com/iluwatar/model/view/presenter/AppTest.java index 9b4aabc4d..4e329e3bc 100644 --- a/model-view-presenter/src/test/java/com/iluwatar/model/view/presenter/AppTest.java +++ b/model-view-presenter/src/test/java/com/iluwatar/model/view/presenter/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.presenter; import org.junit.Test; diff --git a/model-view-presenter/src/test/java/com/iluwatar/model/view/presenter/FileLoaderTest.java b/model-view-presenter/src/test/java/com/iluwatar/model/view/presenter/FileLoaderTest.java index ed1fc0e9e..eed01b835 100644 --- a/model-view-presenter/src/test/java/com/iluwatar/model/view/presenter/FileLoaderTest.java +++ b/model-view-presenter/src/test/java/com/iluwatar/model/view/presenter/FileLoaderTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.presenter; import org.junit.Test; diff --git a/model-view-presenter/src/test/java/com/iluwatar/model/view/presenter/FileSelectorPresenterTest.java b/model-view-presenter/src/test/java/com/iluwatar/model/view/presenter/FileSelectorPresenterTest.java index ba371525a..42afdb2b8 100644 --- a/model-view-presenter/src/test/java/com/iluwatar/model/view/presenter/FileSelectorPresenterTest.java +++ b/model-view-presenter/src/test/java/com/iluwatar/model/view/presenter/FileSelectorPresenterTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.model.view.presenter; import static org.junit.Assert.assertEquals; diff --git a/monostate/pom.xml b/monostate/pom.xml index f18c03e5c..61598db4f 100644 --- a/monostate/pom.xml +++ b/monostate/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/monostate/src/main/java/com/iluwatar/monostate/App.java b/monostate/src/main/java/com/iluwatar/monostate/App.java index 5c61371fa..bfb51fe91 100644 --- a/monostate/src/main/java/com/iluwatar/monostate/App.java +++ b/monostate/src/main/java/com/iluwatar/monostate/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.monostate; diff --git a/monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java b/monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java index 697c48bb4..b0d0f283c 100644 --- a/monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java +++ b/monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.monostate; import java.util.ArrayList; diff --git a/monostate/src/main/java/com/iluwatar/monostate/Request.java b/monostate/src/main/java/com/iluwatar/monostate/Request.java index b18ba8ff2..9cdb4d7e4 100644 --- a/monostate/src/main/java/com/iluwatar/monostate/Request.java +++ b/monostate/src/main/java/com/iluwatar/monostate/Request.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.monostate; /** diff --git a/monostate/src/main/java/com/iluwatar/monostate/Server.java b/monostate/src/main/java/com/iluwatar/monostate/Server.java index 0cf9ac41f..bf700a57a 100644 --- a/monostate/src/main/java/com/iluwatar/monostate/Server.java +++ b/monostate/src/main/java/com/iluwatar/monostate/Server.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.monostate; /** diff --git a/monostate/src/test/java/com/iluwatar/monostate/AppTest.java b/monostate/src/test/java/com/iluwatar/monostate/AppTest.java index 053cd6649..6b5f11a39 100644 --- a/monostate/src/test/java/com/iluwatar/monostate/AppTest.java +++ b/monostate/src/test/java/com/iluwatar/monostate/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.monostate; import org.junit.Test; diff --git a/monostate/src/test/java/com/iluwatar/monostate/LoadBalancerTest.java b/monostate/src/test/java/com/iluwatar/monostate/LoadBalancerTest.java index 5488f12f3..70369e8a0 100644 --- a/monostate/src/test/java/com/iluwatar/monostate/LoadBalancerTest.java +++ b/monostate/src/test/java/com/iluwatar/monostate/LoadBalancerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.monostate; import org.junit.Assert; diff --git a/multiton/pom.xml b/multiton/pom.xml index 5240ba6be..22bd12861 100644 --- a/multiton/pom.xml +++ b/multiton/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/multiton/src/main/java/com/iluwatar/multiton/App.java b/multiton/src/main/java/com/iluwatar/multiton/App.java index 273087310..1ffd57a34 100644 --- a/multiton/src/main/java/com/iluwatar/multiton/App.java +++ b/multiton/src/main/java/com/iluwatar/multiton/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.multiton; /** diff --git a/multiton/src/main/java/com/iluwatar/multiton/Nazgul.java b/multiton/src/main/java/com/iluwatar/multiton/Nazgul.java index f6f5ce84d..369e17dbc 100644 --- a/multiton/src/main/java/com/iluwatar/multiton/Nazgul.java +++ b/multiton/src/main/java/com/iluwatar/multiton/Nazgul.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.multiton; import java.util.Map; diff --git a/multiton/src/main/java/com/iluwatar/multiton/NazgulName.java b/multiton/src/main/java/com/iluwatar/multiton/NazgulName.java index 8869042df..693dfc235 100644 --- a/multiton/src/main/java/com/iluwatar/multiton/NazgulName.java +++ b/multiton/src/main/java/com/iluwatar/multiton/NazgulName.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.multiton; /** diff --git a/multiton/src/test/java/com/iluwatar/multiton/AppTest.java b/multiton/src/test/java/com/iluwatar/multiton/AppTest.java index 6901e6086..2d927b190 100644 --- a/multiton/src/test/java/com/iluwatar/multiton/AppTest.java +++ b/multiton/src/test/java/com/iluwatar/multiton/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.multiton; import org.junit.Test; diff --git a/multiton/src/test/java/com/iluwatar/multiton/NazgulTest.java b/multiton/src/test/java/com/iluwatar/multiton/NazgulTest.java index 923f76b1e..4aae5d87d 100644 --- a/multiton/src/test/java/com/iluwatar/multiton/NazgulTest.java +++ b/multiton/src/test/java/com/iluwatar/multiton/NazgulTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.multiton; import org.junit.Test; diff --git a/naked-objects/webapp/ide/intellij/launch/README.txt b/naked-objects/webapp/ide/intellij/launch/README.txt index 5f8e5ab8a..d33eaceb4 100644 --- a/naked-objects/webapp/ide/intellij/launch/README.txt +++ b/naked-objects/webapp/ide/intellij/launch/README.txt @@ -1,2 +1,25 @@ +==== + The MIT License + Copyright (c) 2014 Ilkka Seppälä + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +==== + Copy into workspace\.idea\runConfigurations directory, and adjust file paths for Maven tasks. diff --git a/naked-objects/webapp/ide/intellij/launch/SimpleApp_PROTOTYPE.xml b/naked-objects/webapp/ide/intellij/launch/SimpleApp_PROTOTYPE.xml index 918ea3540..e01c95512 100644 --- a/naked-objects/webapp/ide/intellij/launch/SimpleApp_PROTOTYPE.xml +++ b/naked-objects/webapp/ide/intellij/launch/SimpleApp_PROTOTYPE.xml @@ -1,3 +1,27 @@ + diff --git a/naked-objects/webapp/ide/intellij/launch/SimpleApp__enhance_only_.xml b/naked-objects/webapp/ide/intellij/launch/SimpleApp__enhance_only_.xml index 31993b500..fcd68f002 100644 --- a/naked-objects/webapp/ide/intellij/launch/SimpleApp__enhance_only_.xml +++ b/naked-objects/webapp/ide/intellij/launch/SimpleApp__enhance_only_.xml @@ -1,3 +1,27 @@ + s diff --git a/naked-objects/webapp/src/main/webapp/about/index.html b/naked-objects/webapp/src/main/webapp/about/index.html index 070651ace..bfcc52017 100644 --- a/naked-objects/webapp/src/main/webapp/about/index.html +++ b/naked-objects/webapp/src/main/webapp/about/index.html @@ -1,3 +1,27 @@ + 4.0.0 diff --git a/null-object/src/main/java/com/iluwatar/nullobject/App.java b/null-object/src/main/java/com/iluwatar/nullobject/App.java index 65f124c84..90a9c12c8 100644 --- a/null-object/src/main/java/com/iluwatar/nullobject/App.java +++ b/null-object/src/main/java/com/iluwatar/nullobject/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.nullobject; /** diff --git a/null-object/src/main/java/com/iluwatar/nullobject/Node.java b/null-object/src/main/java/com/iluwatar/nullobject/Node.java index 010c1b7f1..36363736c 100644 --- a/null-object/src/main/java/com/iluwatar/nullobject/Node.java +++ b/null-object/src/main/java/com/iluwatar/nullobject/Node.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.nullobject; /** diff --git a/null-object/src/main/java/com/iluwatar/nullobject/NodeImpl.java b/null-object/src/main/java/com/iluwatar/nullobject/NodeImpl.java index 4478b9bfa..46787ac96 100644 --- a/null-object/src/main/java/com/iluwatar/nullobject/NodeImpl.java +++ b/null-object/src/main/java/com/iluwatar/nullobject/NodeImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.nullobject; /** diff --git a/null-object/src/main/java/com/iluwatar/nullobject/NullNode.java b/null-object/src/main/java/com/iluwatar/nullobject/NullNode.java index 992b34af3..485b1bd5d 100644 --- a/null-object/src/main/java/com/iluwatar/nullobject/NullNode.java +++ b/null-object/src/main/java/com/iluwatar/nullobject/NullNode.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.nullobject; /** diff --git a/null-object/src/test/java/com/iluwatar/nullobject/AppTest.java b/null-object/src/test/java/com/iluwatar/nullobject/AppTest.java index 0231c7b1a..170f7b977 100644 --- a/null-object/src/test/java/com/iluwatar/nullobject/AppTest.java +++ b/null-object/src/test/java/com/iluwatar/nullobject/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.nullobject; import org.junit.Test; diff --git a/null-object/src/test/java/com/iluwatar/nullobject/NullNodeTest.java b/null-object/src/test/java/com/iluwatar/nullobject/NullNodeTest.java index 2bb9a1b4a..1375b8949 100644 --- a/null-object/src/test/java/com/iluwatar/nullobject/NullNodeTest.java +++ b/null-object/src/test/java/com/iluwatar/nullobject/NullNodeTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.nullobject; import org.junit.Test; diff --git a/null-object/src/test/java/com/iluwatar/nullobject/StdOutTest.java b/null-object/src/test/java/com/iluwatar/nullobject/StdOutTest.java index 5a9bae163..0c0122132 100644 --- a/null-object/src/test/java/com/iluwatar/nullobject/StdOutTest.java +++ b/null-object/src/test/java/com/iluwatar/nullobject/StdOutTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.nullobject; import org.junit.After; diff --git a/null-object/src/test/java/com/iluwatar/nullobject/TreeTest.java b/null-object/src/test/java/com/iluwatar/nullobject/TreeTest.java index 5d7968584..6c77cd236 100644 --- a/null-object/src/test/java/com/iluwatar/nullobject/TreeTest.java +++ b/null-object/src/test/java/com/iluwatar/nullobject/TreeTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.nullobject; import org.junit.Test; diff --git a/object-pool/pom.xml b/object-pool/pom.xml index c03d02568..c681d957d 100644 --- a/object-pool/pom.xml +++ b/object-pool/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/object-pool/src/main/java/com/iluwatar/object/pool/App.java b/object-pool/src/main/java/com/iluwatar/object/pool/App.java index 97670223d..66b3e3f90 100644 --- a/object-pool/src/main/java/com/iluwatar/object/pool/App.java +++ b/object-pool/src/main/java/com/iluwatar/object/pool/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.object.pool; /** diff --git a/object-pool/src/main/java/com/iluwatar/object/pool/ObjectPool.java b/object-pool/src/main/java/com/iluwatar/object/pool/ObjectPool.java index d85955f0a..3fcbd2c41 100644 --- a/object-pool/src/main/java/com/iluwatar/object/pool/ObjectPool.java +++ b/object-pool/src/main/java/com/iluwatar/object/pool/ObjectPool.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.object.pool; import java.util.HashSet; diff --git a/object-pool/src/main/java/com/iluwatar/object/pool/Oliphaunt.java b/object-pool/src/main/java/com/iluwatar/object/pool/Oliphaunt.java index f3923fff5..46c1a03c9 100644 --- a/object-pool/src/main/java/com/iluwatar/object/pool/Oliphaunt.java +++ b/object-pool/src/main/java/com/iluwatar/object/pool/Oliphaunt.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.object.pool; /** diff --git a/object-pool/src/main/java/com/iluwatar/object/pool/OliphauntPool.java b/object-pool/src/main/java/com/iluwatar/object/pool/OliphauntPool.java index 106f16c1b..17b998a0e 100644 --- a/object-pool/src/main/java/com/iluwatar/object/pool/OliphauntPool.java +++ b/object-pool/src/main/java/com/iluwatar/object/pool/OliphauntPool.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.object.pool; /** diff --git a/object-pool/src/test/java/com/iluwatar/object/pool/AppTest.java b/object-pool/src/test/java/com/iluwatar/object/pool/AppTest.java index b36a7e4a1..45aa1b253 100644 --- a/object-pool/src/test/java/com/iluwatar/object/pool/AppTest.java +++ b/object-pool/src/test/java/com/iluwatar/object/pool/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.object.pool; import org.junit.Test; diff --git a/object-pool/src/test/java/com/iluwatar/object/pool/OliphauntPoolTest.java b/object-pool/src/test/java/com/iluwatar/object/pool/OliphauntPoolTest.java index 347e0b4c9..f855e18c4 100644 --- a/object-pool/src/test/java/com/iluwatar/object/pool/OliphauntPoolTest.java +++ b/object-pool/src/test/java/com/iluwatar/object/pool/OliphauntPoolTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.object.pool; import org.junit.Test; diff --git a/observer/pom.xml b/observer/pom.xml index a824a551e..682125cdc 100644 --- a/observer/pom.xml +++ b/observer/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/observer/src/main/java/com/iluwatar/observer/App.java b/observer/src/main/java/com/iluwatar/observer/App.java index 5f03a9e2b..dcced00d4 100644 --- a/observer/src/main/java/com/iluwatar/observer/App.java +++ b/observer/src/main/java/com/iluwatar/observer/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer; import com.iluwatar.observer.generic.GHobbits; diff --git a/observer/src/main/java/com/iluwatar/observer/Hobbits.java b/observer/src/main/java/com/iluwatar/observer/Hobbits.java index 02baaec83..ed9636bd6 100644 --- a/observer/src/main/java/com/iluwatar/observer/Hobbits.java +++ b/observer/src/main/java/com/iluwatar/observer/Hobbits.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer; /** diff --git a/observer/src/main/java/com/iluwatar/observer/Orcs.java b/observer/src/main/java/com/iluwatar/observer/Orcs.java index 09ca65211..ce9c09944 100644 --- a/observer/src/main/java/com/iluwatar/observer/Orcs.java +++ b/observer/src/main/java/com/iluwatar/observer/Orcs.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer; /** diff --git a/observer/src/main/java/com/iluwatar/observer/Weather.java b/observer/src/main/java/com/iluwatar/observer/Weather.java index 4e04143a2..f6aad3881 100644 --- a/observer/src/main/java/com/iluwatar/observer/Weather.java +++ b/observer/src/main/java/com/iluwatar/observer/Weather.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer; import java.util.ArrayList; diff --git a/observer/src/main/java/com/iluwatar/observer/WeatherObserver.java b/observer/src/main/java/com/iluwatar/observer/WeatherObserver.java index 1293214cd..afbf2a303 100644 --- a/observer/src/main/java/com/iluwatar/observer/WeatherObserver.java +++ b/observer/src/main/java/com/iluwatar/observer/WeatherObserver.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer; /** diff --git a/observer/src/main/java/com/iluwatar/observer/WeatherType.java b/observer/src/main/java/com/iluwatar/observer/WeatherType.java index c808368cf..b88452160 100644 --- a/observer/src/main/java/com/iluwatar/observer/WeatherType.java +++ b/observer/src/main/java/com/iluwatar/observer/WeatherType.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer; /** diff --git a/observer/src/main/java/com/iluwatar/observer/generic/GHobbits.java b/observer/src/main/java/com/iluwatar/observer/generic/GHobbits.java index 5dca0e779..da84b9aab 100644 --- a/observer/src/main/java/com/iluwatar/observer/generic/GHobbits.java +++ b/observer/src/main/java/com/iluwatar/observer/generic/GHobbits.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer.generic; import com.iluwatar.observer.WeatherType; diff --git a/observer/src/main/java/com/iluwatar/observer/generic/GOrcs.java b/observer/src/main/java/com/iluwatar/observer/generic/GOrcs.java index b279a78c1..9f41aa6cc 100644 --- a/observer/src/main/java/com/iluwatar/observer/generic/GOrcs.java +++ b/observer/src/main/java/com/iluwatar/observer/generic/GOrcs.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer.generic; import com.iluwatar.observer.WeatherType; diff --git a/observer/src/main/java/com/iluwatar/observer/generic/GWeather.java b/observer/src/main/java/com/iluwatar/observer/generic/GWeather.java index d503c8421..137000760 100644 --- a/observer/src/main/java/com/iluwatar/observer/generic/GWeather.java +++ b/observer/src/main/java/com/iluwatar/observer/generic/GWeather.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer.generic; import com.iluwatar.observer.WeatherType; diff --git a/observer/src/main/java/com/iluwatar/observer/generic/Observable.java b/observer/src/main/java/com/iluwatar/observer/generic/Observable.java index e764245b7..a9a6bf80d 100644 --- a/observer/src/main/java/com/iluwatar/observer/generic/Observable.java +++ b/observer/src/main/java/com/iluwatar/observer/generic/Observable.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer.generic; import java.util.List; diff --git a/observer/src/main/java/com/iluwatar/observer/generic/Observer.java b/observer/src/main/java/com/iluwatar/observer/generic/Observer.java index 34b9ac359..170f14ce8 100644 --- a/observer/src/main/java/com/iluwatar/observer/generic/Observer.java +++ b/observer/src/main/java/com/iluwatar/observer/generic/Observer.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer.generic; /** diff --git a/observer/src/main/java/com/iluwatar/observer/generic/Race.java b/observer/src/main/java/com/iluwatar/observer/generic/Race.java index ddc3337cb..08ec22945 100644 --- a/observer/src/main/java/com/iluwatar/observer/generic/Race.java +++ b/observer/src/main/java/com/iluwatar/observer/generic/Race.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer.generic; import com.iluwatar.observer.WeatherType; diff --git a/observer/src/test/java/com/iluwatar/observer/AppTest.java b/observer/src/test/java/com/iluwatar/observer/AppTest.java index d41acad33..237726463 100644 --- a/observer/src/test/java/com/iluwatar/observer/AppTest.java +++ b/observer/src/test/java/com/iluwatar/observer/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer; import org.junit.Test; diff --git a/observer/src/test/java/com/iluwatar/observer/HobbitsTest.java b/observer/src/test/java/com/iluwatar/observer/HobbitsTest.java index 3571ced63..41f8977db 100644 --- a/observer/src/test/java/com/iluwatar/observer/HobbitsTest.java +++ b/observer/src/test/java/com/iluwatar/observer/HobbitsTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer; import org.junit.runner.RunWith; diff --git a/observer/src/test/java/com/iluwatar/observer/OrcsTest.java b/observer/src/test/java/com/iluwatar/observer/OrcsTest.java index a59288ab2..a81ecb03b 100644 --- a/observer/src/test/java/com/iluwatar/observer/OrcsTest.java +++ b/observer/src/test/java/com/iluwatar/observer/OrcsTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer; import org.junit.runner.RunWith; diff --git a/observer/src/test/java/com/iluwatar/observer/StdOutTest.java b/observer/src/test/java/com/iluwatar/observer/StdOutTest.java index 3ea0bb119..afd870ae4 100644 --- a/observer/src/test/java/com/iluwatar/observer/StdOutTest.java +++ b/observer/src/test/java/com/iluwatar/observer/StdOutTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer; import org.junit.After; diff --git a/observer/src/test/java/com/iluwatar/observer/WeatherObserverTest.java b/observer/src/test/java/com/iluwatar/observer/WeatherObserverTest.java index e4d6a4430..a06c19952 100644 --- a/observer/src/test/java/com/iluwatar/observer/WeatherObserverTest.java +++ b/observer/src/test/java/com/iluwatar/observer/WeatherObserverTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer; import org.junit.Test; diff --git a/observer/src/test/java/com/iluwatar/observer/WeatherTest.java b/observer/src/test/java/com/iluwatar/observer/WeatherTest.java index a195be526..7a38e7137 100644 --- a/observer/src/test/java/com/iluwatar/observer/WeatherTest.java +++ b/observer/src/test/java/com/iluwatar/observer/WeatherTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer; import org.junit.Test; diff --git a/observer/src/test/java/com/iluwatar/observer/generic/GHobbitsTest.java b/observer/src/test/java/com/iluwatar/observer/generic/GHobbitsTest.java index 6e955cf54..bd1afd21b 100644 --- a/observer/src/test/java/com/iluwatar/observer/generic/GHobbitsTest.java +++ b/observer/src/test/java/com/iluwatar/observer/generic/GHobbitsTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer.generic; import com.iluwatar.observer.Hobbits; diff --git a/observer/src/test/java/com/iluwatar/observer/generic/GWeatherTest.java b/observer/src/test/java/com/iluwatar/observer/generic/GWeatherTest.java index b7a538167..758dbca8c 100644 --- a/observer/src/test/java/com/iluwatar/observer/generic/GWeatherTest.java +++ b/observer/src/test/java/com/iluwatar/observer/generic/GWeatherTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer.generic; import com.iluwatar.observer.StdOutTest; diff --git a/observer/src/test/java/com/iluwatar/observer/generic/ObserverTest.java b/observer/src/test/java/com/iluwatar/observer/generic/ObserverTest.java index 2e664bd58..33d8daaf5 100644 --- a/observer/src/test/java/com/iluwatar/observer/generic/ObserverTest.java +++ b/observer/src/test/java/com/iluwatar/observer/generic/ObserverTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer.generic; import com.iluwatar.observer.StdOutTest; diff --git a/observer/src/test/java/com/iluwatar/observer/generic/OrcsTest.java b/observer/src/test/java/com/iluwatar/observer/generic/OrcsTest.java index 508380970..417668607 100644 --- a/observer/src/test/java/com/iluwatar/observer/generic/OrcsTest.java +++ b/observer/src/test/java/com/iluwatar/observer/generic/OrcsTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.observer.generic; import com.iluwatar.observer.WeatherType; diff --git a/poison-pill/pom.xml b/poison-pill/pom.xml index c416fe0be..85f030036 100644 --- a/poison-pill/pom.xml +++ b/poison-pill/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/poison-pill/src/main/java/com/iluwatar/poison/pill/App.java b/poison-pill/src/main/java/com/iluwatar/poison/pill/App.java index 3f66dc808..88be9b05f 100644 --- a/poison-pill/src/main/java/com/iluwatar/poison/pill/App.java +++ b/poison-pill/src/main/java/com/iluwatar/poison/pill/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.poison.pill; /** diff --git a/poison-pill/src/main/java/com/iluwatar/poison/pill/Consumer.java b/poison-pill/src/main/java/com/iluwatar/poison/pill/Consumer.java index 4530ef953..c811225e1 100644 --- a/poison-pill/src/main/java/com/iluwatar/poison/pill/Consumer.java +++ b/poison-pill/src/main/java/com/iluwatar/poison/pill/Consumer.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.poison.pill; import com.iluwatar.poison.pill.Message.Headers; diff --git a/poison-pill/src/main/java/com/iluwatar/poison/pill/Message.java b/poison-pill/src/main/java/com/iluwatar/poison/pill/Message.java index 4f253376e..c2f6b57bd 100644 --- a/poison-pill/src/main/java/com/iluwatar/poison/pill/Message.java +++ b/poison-pill/src/main/java/com/iluwatar/poison/pill/Message.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.poison.pill; import java.util.Map; diff --git a/poison-pill/src/main/java/com/iluwatar/poison/pill/MessageQueue.java b/poison-pill/src/main/java/com/iluwatar/poison/pill/MessageQueue.java index aa0d3699d..1f774aeff 100644 --- a/poison-pill/src/main/java/com/iluwatar/poison/pill/MessageQueue.java +++ b/poison-pill/src/main/java/com/iluwatar/poison/pill/MessageQueue.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.poison.pill; /** diff --git a/poison-pill/src/main/java/com/iluwatar/poison/pill/MqPublishPoint.java b/poison-pill/src/main/java/com/iluwatar/poison/pill/MqPublishPoint.java index 9a9558e4c..68dabf39c 100644 --- a/poison-pill/src/main/java/com/iluwatar/poison/pill/MqPublishPoint.java +++ b/poison-pill/src/main/java/com/iluwatar/poison/pill/MqPublishPoint.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.poison.pill; /** diff --git a/poison-pill/src/main/java/com/iluwatar/poison/pill/MqSubscribePoint.java b/poison-pill/src/main/java/com/iluwatar/poison/pill/MqSubscribePoint.java index 03623edbc..8bc58226e 100644 --- a/poison-pill/src/main/java/com/iluwatar/poison/pill/MqSubscribePoint.java +++ b/poison-pill/src/main/java/com/iluwatar/poison/pill/MqSubscribePoint.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.poison.pill; /** diff --git a/poison-pill/src/main/java/com/iluwatar/poison/pill/Producer.java b/poison-pill/src/main/java/com/iluwatar/poison/pill/Producer.java index 5405de869..15dcad40e 100644 --- a/poison-pill/src/main/java/com/iluwatar/poison/pill/Producer.java +++ b/poison-pill/src/main/java/com/iluwatar/poison/pill/Producer.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.poison.pill; import java.util.Date; diff --git a/poison-pill/src/main/java/com/iluwatar/poison/pill/SimpleMessage.java b/poison-pill/src/main/java/com/iluwatar/poison/pill/SimpleMessage.java index 5b08d2295..3002449fd 100644 --- a/poison-pill/src/main/java/com/iluwatar/poison/pill/SimpleMessage.java +++ b/poison-pill/src/main/java/com/iluwatar/poison/pill/SimpleMessage.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.poison.pill; import java.util.Collections; diff --git a/poison-pill/src/main/java/com/iluwatar/poison/pill/SimpleMessageQueue.java b/poison-pill/src/main/java/com/iluwatar/poison/pill/SimpleMessageQueue.java index dd0b3ed0a..92b0214a6 100644 --- a/poison-pill/src/main/java/com/iluwatar/poison/pill/SimpleMessageQueue.java +++ b/poison-pill/src/main/java/com/iluwatar/poison/pill/SimpleMessageQueue.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.poison.pill; import java.util.concurrent.ArrayBlockingQueue; diff --git a/poison-pill/src/test/java/com/iluwatar/poison/pill/AppTest.java b/poison-pill/src/test/java/com/iluwatar/poison/pill/AppTest.java index 20861ded1..5d1494004 100644 --- a/poison-pill/src/test/java/com/iluwatar/poison/pill/AppTest.java +++ b/poison-pill/src/test/java/com/iluwatar/poison/pill/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.poison.pill; import org.junit.Test; diff --git a/poison-pill/src/test/java/com/iluwatar/poison/pill/ConsumerTest.java b/poison-pill/src/test/java/com/iluwatar/poison/pill/ConsumerTest.java index c152fbbd2..01a5dfaa6 100644 --- a/poison-pill/src/test/java/com/iluwatar/poison/pill/ConsumerTest.java +++ b/poison-pill/src/test/java/com/iluwatar/poison/pill/ConsumerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.poison.pill; import org.junit.Test; diff --git a/poison-pill/src/test/java/com/iluwatar/poison/pill/PoisonMessageTest.java b/poison-pill/src/test/java/com/iluwatar/poison/pill/PoisonMessageTest.java index 9fb733aad..4593c0822 100644 --- a/poison-pill/src/test/java/com/iluwatar/poison/pill/PoisonMessageTest.java +++ b/poison-pill/src/test/java/com/iluwatar/poison/pill/PoisonMessageTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.poison.pill; import org.junit.Test; diff --git a/poison-pill/src/test/java/com/iluwatar/poison/pill/ProducerTest.java b/poison-pill/src/test/java/com/iluwatar/poison/pill/ProducerTest.java index 103020e4a..eec79edd1 100644 --- a/poison-pill/src/test/java/com/iluwatar/poison/pill/ProducerTest.java +++ b/poison-pill/src/test/java/com/iluwatar/poison/pill/ProducerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.poison.pill; import org.junit.Test; diff --git a/poison-pill/src/test/java/com/iluwatar/poison/pill/SimpleMessageTest.java b/poison-pill/src/test/java/com/iluwatar/poison/pill/SimpleMessageTest.java index f5c348e2b..0fc4ef036 100644 --- a/poison-pill/src/test/java/com/iluwatar/poison/pill/SimpleMessageTest.java +++ b/poison-pill/src/test/java/com/iluwatar/poison/pill/SimpleMessageTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.poison.pill; import org.junit.Test; diff --git a/poison-pill/src/test/java/com/iluwatar/poison/pill/StdOutTest.java b/poison-pill/src/test/java/com/iluwatar/poison/pill/StdOutTest.java index 9c533b5c2..f1b3c4840 100644 --- a/poison-pill/src/test/java/com/iluwatar/poison/pill/StdOutTest.java +++ b/poison-pill/src/test/java/com/iluwatar/poison/pill/StdOutTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.poison.pill; import org.junit.After; diff --git a/pom.xml b/pom.xml index ff83355b7..993e6edd7 100644 --- a/pom.xml +++ b/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/private-class-data/pom.xml b/private-class-data/pom.xml index e783ac315..c3f536abb 100644 --- a/private-class-data/pom.xml +++ b/private-class-data/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/private-class-data/src/main/java/com/iluwatar/privateclassdata/App.java b/private-class-data/src/main/java/com/iluwatar/privateclassdata/App.java index 4c328043f..7a58fc6f3 100644 --- a/private-class-data/src/main/java/com/iluwatar/privateclassdata/App.java +++ b/private-class-data/src/main/java/com/iluwatar/privateclassdata/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.privateclassdata; /** diff --git a/private-class-data/src/main/java/com/iluwatar/privateclassdata/ImmutableStew.java b/private-class-data/src/main/java/com/iluwatar/privateclassdata/ImmutableStew.java index 849c2413c..b9d2ad09c 100644 --- a/private-class-data/src/main/java/com/iluwatar/privateclassdata/ImmutableStew.java +++ b/private-class-data/src/main/java/com/iluwatar/privateclassdata/ImmutableStew.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.privateclassdata; /** diff --git a/private-class-data/src/main/java/com/iluwatar/privateclassdata/Stew.java b/private-class-data/src/main/java/com/iluwatar/privateclassdata/Stew.java index 2efd0b4ee..9c9033018 100644 --- a/private-class-data/src/main/java/com/iluwatar/privateclassdata/Stew.java +++ b/private-class-data/src/main/java/com/iluwatar/privateclassdata/Stew.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.privateclassdata; /** diff --git a/private-class-data/src/main/java/com/iluwatar/privateclassdata/StewData.java b/private-class-data/src/main/java/com/iluwatar/privateclassdata/StewData.java index 0bd62ada3..06c0b8c39 100644 --- a/private-class-data/src/main/java/com/iluwatar/privateclassdata/StewData.java +++ b/private-class-data/src/main/java/com/iluwatar/privateclassdata/StewData.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.privateclassdata; /** diff --git a/private-class-data/src/test/java/com/iluwatar/privateclassdata/AppTest.java b/private-class-data/src/test/java/com/iluwatar/privateclassdata/AppTest.java index 5fd53d99f..2625c4906 100644 --- a/private-class-data/src/test/java/com/iluwatar/privateclassdata/AppTest.java +++ b/private-class-data/src/test/java/com/iluwatar/privateclassdata/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.privateclassdata; import org.junit.Test; diff --git a/private-class-data/src/test/java/com/iluwatar/privateclassdata/ImmutableStewTest.java b/private-class-data/src/test/java/com/iluwatar/privateclassdata/ImmutableStewTest.java index da5335b0f..58867d303 100644 --- a/private-class-data/src/test/java/com/iluwatar/privateclassdata/ImmutableStewTest.java +++ b/private-class-data/src/test/java/com/iluwatar/privateclassdata/ImmutableStewTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.privateclassdata; import org.junit.Test; diff --git a/private-class-data/src/test/java/com/iluwatar/privateclassdata/StdOutTest.java b/private-class-data/src/test/java/com/iluwatar/privateclassdata/StdOutTest.java index 91904c31c..f90551020 100644 --- a/private-class-data/src/test/java/com/iluwatar/privateclassdata/StdOutTest.java +++ b/private-class-data/src/test/java/com/iluwatar/privateclassdata/StdOutTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.privateclassdata; import org.junit.After; diff --git a/private-class-data/src/test/java/com/iluwatar/privateclassdata/StewTest.java b/private-class-data/src/test/java/com/iluwatar/privateclassdata/StewTest.java index 8e0452fab..a894e4ae0 100644 --- a/private-class-data/src/test/java/com/iluwatar/privateclassdata/StewTest.java +++ b/private-class-data/src/test/java/com/iluwatar/privateclassdata/StewTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.privateclassdata; import org.junit.Test; diff --git a/producer-consumer/pom.xml b/producer-consumer/pom.xml index fae5e36d9..90e323241 100644 --- a/producer-consumer/pom.xml +++ b/producer-consumer/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/App.java b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/App.java index 63cae9413..42f6dfa79 100644 --- a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/App.java +++ b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.producer.consumer; import java.util.concurrent.ExecutorService; diff --git a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Consumer.java b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Consumer.java index ff63ab41b..f1fa920f3 100644 --- a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Consumer.java +++ b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Consumer.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.producer.consumer; /** diff --git a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Item.java b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Item.java index 8d5be69a1..4bf66e599 100644 --- a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Item.java +++ b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Item.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.producer.consumer; /** diff --git a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/ItemQueue.java b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/ItemQueue.java index 8d41fb456..554789db8 100644 --- a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/ItemQueue.java +++ b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/ItemQueue.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.producer.consumer; import java.util.concurrent.LinkedBlockingQueue; diff --git a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Producer.java b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Producer.java index 8b122a5fc..8d21c0816 100644 --- a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Producer.java +++ b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Producer.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.producer.consumer; import java.util.Random; diff --git a/producer-consumer/src/test/java/com/iluwatar/producer/consumer/AppTest.java b/producer-consumer/src/test/java/com/iluwatar/producer/consumer/AppTest.java index e82e36da1..fcc6509a8 100644 --- a/producer-consumer/src/test/java/com/iluwatar/producer/consumer/AppTest.java +++ b/producer-consumer/src/test/java/com/iluwatar/producer/consumer/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.producer.consumer; import org.junit.Test; diff --git a/producer-consumer/src/test/java/com/iluwatar/producer/consumer/ConsumerTest.java b/producer-consumer/src/test/java/com/iluwatar/producer/consumer/ConsumerTest.java index 4ff203d42..2ca547a0b 100644 --- a/producer-consumer/src/test/java/com/iluwatar/producer/consumer/ConsumerTest.java +++ b/producer-consumer/src/test/java/com/iluwatar/producer/consumer/ConsumerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.producer.consumer; import org.junit.Test; diff --git a/producer-consumer/src/test/java/com/iluwatar/producer/consumer/ProducerTest.java b/producer-consumer/src/test/java/com/iluwatar/producer/consumer/ProducerTest.java index 0605879dd..94765268b 100644 --- a/producer-consumer/src/test/java/com/iluwatar/producer/consumer/ProducerTest.java +++ b/producer-consumer/src/test/java/com/iluwatar/producer/consumer/ProducerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.producer.consumer; import org.junit.Test; diff --git a/producer-consumer/src/test/java/com/iluwatar/producer/consumer/StdOutTest.java b/producer-consumer/src/test/java/com/iluwatar/producer/consumer/StdOutTest.java index 85d8fe6c0..1e1c41f75 100644 --- a/producer-consumer/src/test/java/com/iluwatar/producer/consumer/StdOutTest.java +++ b/producer-consumer/src/test/java/com/iluwatar/producer/consumer/StdOutTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.producer.consumer; import org.junit.After; diff --git a/property/pom.xml b/property/pom.xml index 0d1ff2016..6906bee68 100644 --- a/property/pom.xml +++ b/property/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/property/src/main/java/com/iluwatar/property/App.java b/property/src/main/java/com/iluwatar/property/App.java index 966bd36a5..e3f7cc92b 100644 --- a/property/src/main/java/com/iluwatar/property/App.java +++ b/property/src/main/java/com/iluwatar/property/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.property; import com.iluwatar.property.Character.Type; diff --git a/property/src/main/java/com/iluwatar/property/Character.java b/property/src/main/java/com/iluwatar/property/Character.java index 50e564623..38d78ae27 100644 --- a/property/src/main/java/com/iluwatar/property/Character.java +++ b/property/src/main/java/com/iluwatar/property/Character.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.property; import java.util.HashMap; diff --git a/property/src/main/java/com/iluwatar/property/Prototype.java b/property/src/main/java/com/iluwatar/property/Prototype.java index 33e2d66d6..e21e98384 100644 --- a/property/src/main/java/com/iluwatar/property/Prototype.java +++ b/property/src/main/java/com/iluwatar/property/Prototype.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.property; /** diff --git a/property/src/main/java/com/iluwatar/property/Stats.java b/property/src/main/java/com/iluwatar/property/Stats.java index 5ce71dcfe..0c29c36f7 100644 --- a/property/src/main/java/com/iluwatar/property/Stats.java +++ b/property/src/main/java/com/iluwatar/property/Stats.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.property; /** diff --git a/property/src/test/java/com/iluwatar/property/AppTest.java b/property/src/test/java/com/iluwatar/property/AppTest.java index bfa48ffab..131742822 100644 --- a/property/src/test/java/com/iluwatar/property/AppTest.java +++ b/property/src/test/java/com/iluwatar/property/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.property; import org.junit.Test; diff --git a/property/src/test/java/com/iluwatar/property/CharacterTest.java b/property/src/test/java/com/iluwatar/property/CharacterTest.java index 6d9a7a14b..859ea5f86 100644 --- a/property/src/test/java/com/iluwatar/property/CharacterTest.java +++ b/property/src/test/java/com/iluwatar/property/CharacterTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.property; import org.junit.Test; diff --git a/prototype/pom.xml b/prototype/pom.xml index 411517d2e..1cc5d9599 100644 --- a/prototype/pom.xml +++ b/prototype/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/prototype/src/main/java/com/iluwatar/prototype/App.java b/prototype/src/main/java/com/iluwatar/prototype/App.java index 77c727a39..cb04ec5f2 100644 --- a/prototype/src/main/java/com/iluwatar/prototype/App.java +++ b/prototype/src/main/java/com/iluwatar/prototype/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; /** diff --git a/prototype/src/main/java/com/iluwatar/prototype/Beast.java b/prototype/src/main/java/com/iluwatar/prototype/Beast.java index 1b6d5d9a4..255f44de5 100644 --- a/prototype/src/main/java/com/iluwatar/prototype/Beast.java +++ b/prototype/src/main/java/com/iluwatar/prototype/Beast.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; /** diff --git a/prototype/src/main/java/com/iluwatar/prototype/ElfBeast.java b/prototype/src/main/java/com/iluwatar/prototype/ElfBeast.java index 679882097..1fd7d00fa 100644 --- a/prototype/src/main/java/com/iluwatar/prototype/ElfBeast.java +++ b/prototype/src/main/java/com/iluwatar/prototype/ElfBeast.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; /** diff --git a/prototype/src/main/java/com/iluwatar/prototype/ElfMage.java b/prototype/src/main/java/com/iluwatar/prototype/ElfMage.java index 42ce9d530..823150ec4 100644 --- a/prototype/src/main/java/com/iluwatar/prototype/ElfMage.java +++ b/prototype/src/main/java/com/iluwatar/prototype/ElfMage.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; /** diff --git a/prototype/src/main/java/com/iluwatar/prototype/ElfWarlord.java b/prototype/src/main/java/com/iluwatar/prototype/ElfWarlord.java index 1cba6943c..03ff81ecf 100644 --- a/prototype/src/main/java/com/iluwatar/prototype/ElfWarlord.java +++ b/prototype/src/main/java/com/iluwatar/prototype/ElfWarlord.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; /** diff --git a/prototype/src/main/java/com/iluwatar/prototype/HeroFactory.java b/prototype/src/main/java/com/iluwatar/prototype/HeroFactory.java index bf52b9787..c152ae3e8 100644 --- a/prototype/src/main/java/com/iluwatar/prototype/HeroFactory.java +++ b/prototype/src/main/java/com/iluwatar/prototype/HeroFactory.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; /** diff --git a/prototype/src/main/java/com/iluwatar/prototype/HeroFactoryImpl.java b/prototype/src/main/java/com/iluwatar/prototype/HeroFactoryImpl.java index 85792104d..ba173d9bc 100644 --- a/prototype/src/main/java/com/iluwatar/prototype/HeroFactoryImpl.java +++ b/prototype/src/main/java/com/iluwatar/prototype/HeroFactoryImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; /** diff --git a/prototype/src/main/java/com/iluwatar/prototype/Mage.java b/prototype/src/main/java/com/iluwatar/prototype/Mage.java index 73e4ee0a0..3151fc915 100644 --- a/prototype/src/main/java/com/iluwatar/prototype/Mage.java +++ b/prototype/src/main/java/com/iluwatar/prototype/Mage.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; /** diff --git a/prototype/src/main/java/com/iluwatar/prototype/OrcBeast.java b/prototype/src/main/java/com/iluwatar/prototype/OrcBeast.java index a45afb767..8be1e0b93 100644 --- a/prototype/src/main/java/com/iluwatar/prototype/OrcBeast.java +++ b/prototype/src/main/java/com/iluwatar/prototype/OrcBeast.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; /** diff --git a/prototype/src/main/java/com/iluwatar/prototype/OrcMage.java b/prototype/src/main/java/com/iluwatar/prototype/OrcMage.java index 47a33379b..3aedc1ca1 100644 --- a/prototype/src/main/java/com/iluwatar/prototype/OrcMage.java +++ b/prototype/src/main/java/com/iluwatar/prototype/OrcMage.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; /** diff --git a/prototype/src/main/java/com/iluwatar/prototype/OrcWarlord.java b/prototype/src/main/java/com/iluwatar/prototype/OrcWarlord.java index 40ab91113..1cd4e72b7 100644 --- a/prototype/src/main/java/com/iluwatar/prototype/OrcWarlord.java +++ b/prototype/src/main/java/com/iluwatar/prototype/OrcWarlord.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; /** diff --git a/prototype/src/main/java/com/iluwatar/prototype/Prototype.java b/prototype/src/main/java/com/iluwatar/prototype/Prototype.java index 272eeaf37..bf7980c4d 100644 --- a/prototype/src/main/java/com/iluwatar/prototype/Prototype.java +++ b/prototype/src/main/java/com/iluwatar/prototype/Prototype.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; /** diff --git a/prototype/src/main/java/com/iluwatar/prototype/Warlord.java b/prototype/src/main/java/com/iluwatar/prototype/Warlord.java index f4a965ef3..72b2cfa80 100644 --- a/prototype/src/main/java/com/iluwatar/prototype/Warlord.java +++ b/prototype/src/main/java/com/iluwatar/prototype/Warlord.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; /** diff --git a/prototype/src/test/java/com/iluwatar/prototype/AppTest.java b/prototype/src/test/java/com/iluwatar/prototype/AppTest.java index 772a88a03..4b06f957c 100644 --- a/prototype/src/test/java/com/iluwatar/prototype/AppTest.java +++ b/prototype/src/test/java/com/iluwatar/prototype/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; import org.junit.Test; diff --git a/prototype/src/test/java/com/iluwatar/prototype/HeroFactoryImplTest.java b/prototype/src/test/java/com/iluwatar/prototype/HeroFactoryImplTest.java index e237b43b7..75a234a57 100644 --- a/prototype/src/test/java/com/iluwatar/prototype/HeroFactoryImplTest.java +++ b/prototype/src/test/java/com/iluwatar/prototype/HeroFactoryImplTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; import org.junit.Test; diff --git a/prototype/src/test/java/com/iluwatar/prototype/PrototypeTest.java b/prototype/src/test/java/com/iluwatar/prototype/PrototypeTest.java index 3e3d8f88b..071b4dd0d 100644 --- a/prototype/src/test/java/com/iluwatar/prototype/PrototypeTest.java +++ b/prototype/src/test/java/com/iluwatar/prototype/PrototypeTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.prototype; import org.junit.Test; diff --git a/proxy/pom.xml b/proxy/pom.xml index 139934c13..890f95b5c 100644 --- a/proxy/pom.xml +++ b/proxy/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/proxy/src/main/java/com/iluwatar/proxy/App.java b/proxy/src/main/java/com/iluwatar/proxy/App.java index 837424f28..9c27cfb01 100644 --- a/proxy/src/main/java/com/iluwatar/proxy/App.java +++ b/proxy/src/main/java/com/iluwatar/proxy/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.proxy; /** diff --git a/proxy/src/main/java/com/iluwatar/proxy/Wizard.java b/proxy/src/main/java/com/iluwatar/proxy/Wizard.java index 8351b45bf..5ea2e8279 100644 --- a/proxy/src/main/java/com/iluwatar/proxy/Wizard.java +++ b/proxy/src/main/java/com/iluwatar/proxy/Wizard.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.proxy; /** diff --git a/proxy/src/main/java/com/iluwatar/proxy/WizardTower.java b/proxy/src/main/java/com/iluwatar/proxy/WizardTower.java index 882312c21..573d38374 100644 --- a/proxy/src/main/java/com/iluwatar/proxy/WizardTower.java +++ b/proxy/src/main/java/com/iluwatar/proxy/WizardTower.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.proxy; /** diff --git a/proxy/src/main/java/com/iluwatar/proxy/WizardTowerProxy.java b/proxy/src/main/java/com/iluwatar/proxy/WizardTowerProxy.java index 42f37c768..985184afe 100644 --- a/proxy/src/main/java/com/iluwatar/proxy/WizardTowerProxy.java +++ b/proxy/src/main/java/com/iluwatar/proxy/WizardTowerProxy.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.proxy; /** diff --git a/proxy/src/test/java/com/iluwatar/proxy/AppTest.java b/proxy/src/test/java/com/iluwatar/proxy/AppTest.java index 0485dabb6..e5c065bd5 100644 --- a/proxy/src/test/java/com/iluwatar/proxy/AppTest.java +++ b/proxy/src/test/java/com/iluwatar/proxy/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.proxy; import org.junit.Test; diff --git a/proxy/src/test/java/com/iluwatar/proxy/StdOutTest.java b/proxy/src/test/java/com/iluwatar/proxy/StdOutTest.java index a145b7b80..48831444a 100644 --- a/proxy/src/test/java/com/iluwatar/proxy/StdOutTest.java +++ b/proxy/src/test/java/com/iluwatar/proxy/StdOutTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.proxy; import org.junit.After; diff --git a/proxy/src/test/java/com/iluwatar/proxy/WizardTest.java b/proxy/src/test/java/com/iluwatar/proxy/WizardTest.java index c1b9e6fed..56ad74c8c 100644 --- a/proxy/src/test/java/com/iluwatar/proxy/WizardTest.java +++ b/proxy/src/test/java/com/iluwatar/proxy/WizardTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.proxy; import org.junit.Test; diff --git a/proxy/src/test/java/com/iluwatar/proxy/WizardTowerProxyTest.java b/proxy/src/test/java/com/iluwatar/proxy/WizardTowerProxyTest.java index dcde88f8c..b87b7a0bc 100644 --- a/proxy/src/test/java/com/iluwatar/proxy/WizardTowerProxyTest.java +++ b/proxy/src/test/java/com/iluwatar/proxy/WizardTowerProxyTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.proxy; import org.junit.Test; diff --git a/proxy/src/test/java/com/iluwatar/proxy/WizardTowerTest.java b/proxy/src/test/java/com/iluwatar/proxy/WizardTowerTest.java index 007b92a33..9996434f5 100644 --- a/proxy/src/test/java/com/iluwatar/proxy/WizardTowerTest.java +++ b/proxy/src/test/java/com/iluwatar/proxy/WizardTowerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.proxy; import org.junit.Test; diff --git a/publish-subscribe/pom.xml b/publish-subscribe/pom.xml index fad968b19..ae90fdbf1 100644 --- a/publish-subscribe/pom.xml +++ b/publish-subscribe/pom.xml @@ -1,3 +1,27 @@ + 4.0.0 diff --git a/publish-subscribe/src/main/java/com/iluwatar/publish/subscribe/App.java b/publish-subscribe/src/main/java/com/iluwatar/publish/subscribe/App.java index f80dd1ad1..b3eeaeb8e 100644 --- a/publish-subscribe/src/main/java/com/iluwatar/publish/subscribe/App.java +++ b/publish-subscribe/src/main/java/com/iluwatar/publish/subscribe/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.publish.subscribe; import org.apache.camel.CamelContext; diff --git a/publish-subscribe/src/test/java/com/iluwatar/publish/subscribe/AppTest.java b/publish-subscribe/src/test/java/com/iluwatar/publish/subscribe/AppTest.java index bc8b0153e..9f387be33 100644 --- a/publish-subscribe/src/test/java/com/iluwatar/publish/subscribe/AppTest.java +++ b/publish-subscribe/src/test/java/com/iluwatar/publish/subscribe/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.publish.subscribe; import org.junit.Test; diff --git a/reactor/pom.xml b/reactor/pom.xml index c980d3b10..b22d9669d 100644 --- a/reactor/pom.xml +++ b/reactor/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/reactor/src/main/java/com/iluwatar/reactor/app/App.java b/reactor/src/main/java/com/iluwatar/reactor/app/App.java index d074c9b19..4228b92d3 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/app/App.java +++ b/reactor/src/main/java/com/iluwatar/reactor/app/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reactor.app; import java.io.IOException; diff --git a/reactor/src/main/java/com/iluwatar/reactor/app/AppClient.java b/reactor/src/main/java/com/iluwatar/reactor/app/AppClient.java index 13cdd70e1..29c2f83fa 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/app/AppClient.java +++ b/reactor/src/main/java/com/iluwatar/reactor/app/AppClient.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reactor.app; import java.io.IOException; diff --git a/reactor/src/main/java/com/iluwatar/reactor/app/LoggingHandler.java b/reactor/src/main/java/com/iluwatar/reactor/app/LoggingHandler.java index 0845303df..88716728c 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/app/LoggingHandler.java +++ b/reactor/src/main/java/com/iluwatar/reactor/app/LoggingHandler.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reactor.app; import java.nio.ByteBuffer; diff --git a/reactor/src/main/java/com/iluwatar/reactor/framework/AbstractNioChannel.java b/reactor/src/main/java/com/iluwatar/reactor/framework/AbstractNioChannel.java index cd1318c89..ee830e3b1 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/framework/AbstractNioChannel.java +++ b/reactor/src/main/java/com/iluwatar/reactor/framework/AbstractNioChannel.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reactor.framework; import java.io.IOException; diff --git a/reactor/src/main/java/com/iluwatar/reactor/framework/ChannelHandler.java b/reactor/src/main/java/com/iluwatar/reactor/framework/ChannelHandler.java index 381738ecd..86b30b0dd 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/framework/ChannelHandler.java +++ b/reactor/src/main/java/com/iluwatar/reactor/framework/ChannelHandler.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reactor.framework; import java.nio.channels.SelectionKey; diff --git a/reactor/src/main/java/com/iluwatar/reactor/framework/Dispatcher.java b/reactor/src/main/java/com/iluwatar/reactor/framework/Dispatcher.java index 78aeb84df..d9c93190a 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/framework/Dispatcher.java +++ b/reactor/src/main/java/com/iluwatar/reactor/framework/Dispatcher.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reactor.framework; import java.nio.channels.SelectionKey; diff --git a/reactor/src/main/java/com/iluwatar/reactor/framework/NioDatagramChannel.java b/reactor/src/main/java/com/iluwatar/reactor/framework/NioDatagramChannel.java index a2ff3d3d8..4e493163f 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/framework/NioDatagramChannel.java +++ b/reactor/src/main/java/com/iluwatar/reactor/framework/NioDatagramChannel.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reactor.framework; import java.io.IOException; diff --git a/reactor/src/main/java/com/iluwatar/reactor/framework/NioReactor.java b/reactor/src/main/java/com/iluwatar/reactor/framework/NioReactor.java index 271a6975d..716f88801 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/framework/NioReactor.java +++ b/reactor/src/main/java/com/iluwatar/reactor/framework/NioReactor.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reactor.framework; import java.io.IOException; diff --git a/reactor/src/main/java/com/iluwatar/reactor/framework/NioServerSocketChannel.java b/reactor/src/main/java/com/iluwatar/reactor/framework/NioServerSocketChannel.java index f8be9b777..c7d67fd13 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/framework/NioServerSocketChannel.java +++ b/reactor/src/main/java/com/iluwatar/reactor/framework/NioServerSocketChannel.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reactor.framework; import java.io.IOException; diff --git a/reactor/src/main/java/com/iluwatar/reactor/framework/SameThreadDispatcher.java b/reactor/src/main/java/com/iluwatar/reactor/framework/SameThreadDispatcher.java index ae995428e..855d8b090 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/framework/SameThreadDispatcher.java +++ b/reactor/src/main/java/com/iluwatar/reactor/framework/SameThreadDispatcher.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reactor.framework; import java.nio.channels.SelectionKey; diff --git a/reactor/src/main/java/com/iluwatar/reactor/framework/ThreadPoolDispatcher.java b/reactor/src/main/java/com/iluwatar/reactor/framework/ThreadPoolDispatcher.java index 4a240659e..0ca114abe 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/framework/ThreadPoolDispatcher.java +++ b/reactor/src/main/java/com/iluwatar/reactor/framework/ThreadPoolDispatcher.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reactor.framework; import java.nio.channels.SelectionKey; diff --git a/reactor/src/test/java/com/iluwatar/reactor/app/AppTest.java b/reactor/src/test/java/com/iluwatar/reactor/app/AppTest.java index 10611bdc9..25d43d781 100644 --- a/reactor/src/test/java/com/iluwatar/reactor/app/AppTest.java +++ b/reactor/src/test/java/com/iluwatar/reactor/app/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reactor.app; import java.io.IOException; diff --git a/reader-writer-lock/pom.xml b/reader-writer-lock/pom.xml index 14b17011d..fc6dc810a 100644 --- a/reader-writer-lock/pom.xml +++ b/reader-writer-lock/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/App.java b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/App.java index b11b11be7..0dd8bb544 100644 --- a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/App.java +++ b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reader.writer.lock; import java.util.concurrent.ExecutorService; diff --git a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Reader.java b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Reader.java index 214528080..2b837b341 100644 --- a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Reader.java +++ b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Reader.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reader.writer.lock; import java.util.concurrent.locks.Lock; diff --git a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java index b7edd149c..32760d5b4 100644 --- a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java +++ b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reader.writer.lock; import java.util.HashSet; diff --git a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Writer.java b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Writer.java index ae7b17080..ecb54f330 100644 --- a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Writer.java +++ b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Writer.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reader.writer.lock; import java.util.concurrent.locks.Lock; diff --git a/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/AppTest.java b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/AppTest.java index 5dd6feaab..09c591a48 100644 --- a/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/AppTest.java +++ b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reader.writer.lock; import org.junit.Test; diff --git a/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderAndWriterTest.java b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderAndWriterTest.java index e29f57889..c88cda012 100644 --- a/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderAndWriterTest.java +++ b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderAndWriterTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reader.writer.lock; import static org.mockito.Mockito.inOrder; diff --git a/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderTest.java b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderTest.java index e76fe29c2..7d51e977c 100644 --- a/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderTest.java +++ b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/ReaderTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reader.writer.lock; import static org.mockito.Mockito.inOrder; diff --git a/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/StdOutTest.java b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/StdOutTest.java index 762574b66..03b0dca51 100644 --- a/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/StdOutTest.java +++ b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/StdOutTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reader.writer.lock; import org.junit.After; diff --git a/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/WriterTest.java b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/WriterTest.java index ed37bf3e5..765c491ff 100644 --- a/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/WriterTest.java +++ b/reader-writer-lock/src/test/java/com/iluwatar/reader/writer/lock/WriterTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.reader.writer.lock; import static org.mockito.Mockito.inOrder; diff --git a/repository/pom.xml b/repository/pom.xml index 05b468a04..4b89917fe 100644 --- a/repository/pom.xml +++ b/repository/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/repository/src/main/java/com/iluwatar/repository/App.java b/repository/src/main/java/com/iluwatar/repository/App.java index 9c940b36d..df24e1424 100644 --- a/repository/src/main/java/com/iluwatar/repository/App.java +++ b/repository/src/main/java/com/iluwatar/repository/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.repository; import java.util.List; diff --git a/repository/src/main/java/com/iluwatar/repository/AppConfig.java b/repository/src/main/java/com/iluwatar/repository/AppConfig.java index 62b9a4c04..285ecfbfe 100644 --- a/repository/src/main/java/com/iluwatar/repository/AppConfig.java +++ b/repository/src/main/java/com/iluwatar/repository/AppConfig.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.repository; import java.sql.SQLException; diff --git a/repository/src/main/java/com/iluwatar/repository/Person.java b/repository/src/main/java/com/iluwatar/repository/Person.java index 04d65a6d0..a29a7fd43 100644 --- a/repository/src/main/java/com/iluwatar/repository/Person.java +++ b/repository/src/main/java/com/iluwatar/repository/Person.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.repository; import javax.persistence.Entity; diff --git a/repository/src/main/java/com/iluwatar/repository/PersonRepository.java b/repository/src/main/java/com/iluwatar/repository/PersonRepository.java index 8d687f32d..eb9addd62 100644 --- a/repository/src/main/java/com/iluwatar/repository/PersonRepository.java +++ b/repository/src/main/java/com/iluwatar/repository/PersonRepository.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.repository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; diff --git a/repository/src/main/java/com/iluwatar/repository/PersonSpecifications.java b/repository/src/main/java/com/iluwatar/repository/PersonSpecifications.java index fa96f3ca6..81394fda3 100644 --- a/repository/src/main/java/com/iluwatar/repository/PersonSpecifications.java +++ b/repository/src/main/java/com/iluwatar/repository/PersonSpecifications.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.repository; import javax.persistence.criteria.CriteriaBuilder; diff --git a/repository/src/main/resources/META-INF/persistence.xml b/repository/src/main/resources/META-INF/persistence.xml index 00767fbc2..db4c7be13 100644 --- a/repository/src/main/resources/META-INF/persistence.xml +++ b/repository/src/main/resources/META-INF/persistence.xml @@ -1,4 +1,28 @@ + diff --git a/repository/src/main/resources/applicationContext.xml b/repository/src/main/resources/applicationContext.xml index ed03aba0a..a3b5162da 100644 --- a/repository/src/main/resources/applicationContext.xml +++ b/repository/src/main/resources/applicationContext.xml @@ -1,4 +1,28 @@ + + 4.0.0 diff --git a/resource-acquisition-is-initialization/src/main/java/com/iluwatar/resource/acquisition/is/initialization/App.java b/resource-acquisition-is-initialization/src/main/java/com/iluwatar/resource/acquisition/is/initialization/App.java index f734432af..413fb0eab 100644 --- a/resource-acquisition-is-initialization/src/main/java/com/iluwatar/resource/acquisition/is/initialization/App.java +++ b/resource-acquisition-is-initialization/src/main/java/com/iluwatar/resource/acquisition/is/initialization/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.resource.acquisition.is.initialization; /** diff --git a/resource-acquisition-is-initialization/src/main/java/com/iluwatar/resource/acquisition/is/initialization/SlidingDoor.java b/resource-acquisition-is-initialization/src/main/java/com/iluwatar/resource/acquisition/is/initialization/SlidingDoor.java index 985b761c2..3a1a35f2d 100644 --- a/resource-acquisition-is-initialization/src/main/java/com/iluwatar/resource/acquisition/is/initialization/SlidingDoor.java +++ b/resource-acquisition-is-initialization/src/main/java/com/iluwatar/resource/acquisition/is/initialization/SlidingDoor.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.resource.acquisition.is.initialization; /** diff --git a/resource-acquisition-is-initialization/src/main/java/com/iluwatar/resource/acquisition/is/initialization/TreasureChest.java b/resource-acquisition-is-initialization/src/main/java/com/iluwatar/resource/acquisition/is/initialization/TreasureChest.java index 525e69652..e7b7ebab6 100644 --- a/resource-acquisition-is-initialization/src/main/java/com/iluwatar/resource/acquisition/is/initialization/TreasureChest.java +++ b/resource-acquisition-is-initialization/src/main/java/com/iluwatar/resource/acquisition/is/initialization/TreasureChest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.resource.acquisition.is.initialization; import java.io.Closeable; diff --git a/resource-acquisition-is-initialization/src/test/java/com/iluwatar/resource/acquisition/is/initialization/AppTest.java b/resource-acquisition-is-initialization/src/test/java/com/iluwatar/resource/acquisition/is/initialization/AppTest.java index 71b104b7c..c0e6a29b7 100644 --- a/resource-acquisition-is-initialization/src/test/java/com/iluwatar/resource/acquisition/is/initialization/AppTest.java +++ b/resource-acquisition-is-initialization/src/test/java/com/iluwatar/resource/acquisition/is/initialization/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.resource.acquisition.is.initialization; import org.junit.Test; diff --git a/resource-acquisition-is-initialization/src/test/java/com/iluwatar/resource/acquisition/is/initialization/ClosableTest.java b/resource-acquisition-is-initialization/src/test/java/com/iluwatar/resource/acquisition/is/initialization/ClosableTest.java index 423d0ab51..55bdaf19c 100644 --- a/resource-acquisition-is-initialization/src/test/java/com/iluwatar/resource/acquisition/is/initialization/ClosableTest.java +++ b/resource-acquisition-is-initialization/src/test/java/com/iluwatar/resource/acquisition/is/initialization/ClosableTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.resource.acquisition.is.initialization; import org.junit.Test; diff --git a/resource-acquisition-is-initialization/src/test/java/com/iluwatar/resource/acquisition/is/initialization/StdOutTest.java b/resource-acquisition-is-initialization/src/test/java/com/iluwatar/resource/acquisition/is/initialization/StdOutTest.java index 2fdc09e27..42cb42e6b 100644 --- a/resource-acquisition-is-initialization/src/test/java/com/iluwatar/resource/acquisition/is/initialization/StdOutTest.java +++ b/resource-acquisition-is-initialization/src/test/java/com/iluwatar/resource/acquisition/is/initialization/StdOutTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.resource.acquisition.is.initialization; import org.junit.After; diff --git a/servant/pom.xml b/servant/pom.xml index 3da9cae69..bc5f6a61c 100644 --- a/servant/pom.xml +++ b/servant/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/servant/src/etc/servant.xml b/servant/src/etc/servant.xml index 8da8a9e0b..7b91d0900 100644 --- a/servant/src/etc/servant.xml +++ b/servant/src/etc/servant.xml @@ -1,4 +1,28 @@ +
diff --git a/servant/src/main/java/com/iluwatar/servant/App.java b/servant/src/main/java/com/iluwatar/servant/App.java index cb5a63fa5..92829441d 100644 --- a/servant/src/main/java/com/iluwatar/servant/App.java +++ b/servant/src/main/java/com/iluwatar/servant/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servant; import java.util.ArrayList; diff --git a/servant/src/main/java/com/iluwatar/servant/King.java b/servant/src/main/java/com/iluwatar/servant/King.java index ab99252ad..bc3f8cdcf 100644 --- a/servant/src/main/java/com/iluwatar/servant/King.java +++ b/servant/src/main/java/com/iluwatar/servant/King.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servant; /** diff --git a/servant/src/main/java/com/iluwatar/servant/Queen.java b/servant/src/main/java/com/iluwatar/servant/Queen.java index b8568bdf1..3b6203f3e 100644 --- a/servant/src/main/java/com/iluwatar/servant/Queen.java +++ b/servant/src/main/java/com/iluwatar/servant/Queen.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servant; /** diff --git a/servant/src/main/java/com/iluwatar/servant/Royalty.java b/servant/src/main/java/com/iluwatar/servant/Royalty.java index 38a0a8e7d..b628383c8 100644 --- a/servant/src/main/java/com/iluwatar/servant/Royalty.java +++ b/servant/src/main/java/com/iluwatar/servant/Royalty.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servant; /** diff --git a/servant/src/main/java/com/iluwatar/servant/Servant.java b/servant/src/main/java/com/iluwatar/servant/Servant.java index dbb623331..d24c42ab2 100644 --- a/servant/src/main/java/com/iluwatar/servant/Servant.java +++ b/servant/src/main/java/com/iluwatar/servant/Servant.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servant; import java.util.ArrayList; diff --git a/servant/src/test/java/com/iluwatar/servant/AppTest.java b/servant/src/test/java/com/iluwatar/servant/AppTest.java index 20d5e6c0f..a9e66e783 100644 --- a/servant/src/test/java/com/iluwatar/servant/AppTest.java +++ b/servant/src/test/java/com/iluwatar/servant/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servant; import org.junit.Test; diff --git a/servant/src/test/java/com/iluwatar/servant/KingTest.java b/servant/src/test/java/com/iluwatar/servant/KingTest.java index 3c0811bc5..c56d12b24 100644 --- a/servant/src/test/java/com/iluwatar/servant/KingTest.java +++ b/servant/src/test/java/com/iluwatar/servant/KingTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servant; import org.junit.Test; diff --git a/servant/src/test/java/com/iluwatar/servant/QueenTest.java b/servant/src/test/java/com/iluwatar/servant/QueenTest.java index d6f02774c..85b22fb42 100644 --- a/servant/src/test/java/com/iluwatar/servant/QueenTest.java +++ b/servant/src/test/java/com/iluwatar/servant/QueenTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servant; import org.junit.Test; diff --git a/servant/src/test/java/com/iluwatar/servant/ServantTest.java b/servant/src/test/java/com/iluwatar/servant/ServantTest.java index 9527bdbc9..e4087d86d 100644 --- a/servant/src/test/java/com/iluwatar/servant/ServantTest.java +++ b/servant/src/test/java/com/iluwatar/servant/ServantTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servant; import org.junit.Test; diff --git a/service-layer/bin/pom.xml b/service-layer/bin/pom.xml index 40aa93005..05ed6860d 100644 --- a/service-layer/bin/pom.xml +++ b/service-layer/bin/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/service-layer/pom.xml b/service-layer/pom.xml index b8b977829..b480a75b8 100644 --- a/service-layer/pom.xml +++ b/service-layer/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/app/App.java b/service-layer/src/main/java/com/iluwatar/servicelayer/app/App.java index ab0d3f9a0..8282d800c 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/app/App.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/app/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.app; import java.util.List; diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/common/BaseEntity.java b/service-layer/src/main/java/com/iluwatar/servicelayer/common/BaseEntity.java index ab0000922..53f5f7b0f 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/common/BaseEntity.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/common/BaseEntity.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.common; import javax.persistence.Inheritance; diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/common/Dao.java b/service-layer/src/main/java/com/iluwatar/servicelayer/common/Dao.java index 73fa3b7af..1fed0864b 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/common/Dao.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/common/Dao.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.common; import java.util.List; diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/common/DaoBaseImpl.java b/service-layer/src/main/java/com/iluwatar/servicelayer/common/DaoBaseImpl.java index 2665ff858..88ac2597d 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/common/DaoBaseImpl.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/common/DaoBaseImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.common; import java.lang.reflect.ParameterizedType; diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/hibernate/HibernateUtil.java b/service-layer/src/main/java/com/iluwatar/servicelayer/hibernate/HibernateUtil.java index 9920a50df..e3588b35a 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/hibernate/HibernateUtil.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/hibernate/HibernateUtil.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.hibernate; import com.iluwatar.servicelayer.spell.Spell; diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/magic/MagicService.java b/service-layer/src/main/java/com/iluwatar/servicelayer/magic/MagicService.java index 26f732aa8..c88e1f538 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/magic/MagicService.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/magic/MagicService.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.magic; import java.util.List; diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/magic/MagicServiceImpl.java b/service-layer/src/main/java/com/iluwatar/servicelayer/magic/MagicServiceImpl.java index cda3fe58d..c804f44b8 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/magic/MagicServiceImpl.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/magic/MagicServiceImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.magic; import java.util.ArrayList; diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/spell/Spell.java b/service-layer/src/main/java/com/iluwatar/servicelayer/spell/Spell.java index a3e9e28c4..38d5aafc1 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/spell/Spell.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/spell/Spell.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.spell; import javax.persistence.Column; diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/spell/SpellDao.java b/service-layer/src/main/java/com/iluwatar/servicelayer/spell/SpellDao.java index b6bffb0ec..10a35b73a 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/spell/SpellDao.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/spell/SpellDao.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.spell; import com.iluwatar.servicelayer.common.Dao; diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/spell/SpellDaoImpl.java b/service-layer/src/main/java/com/iluwatar/servicelayer/spell/SpellDaoImpl.java index 708ba033e..bd1860a6b 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/spell/SpellDaoImpl.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/spell/SpellDaoImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.spell; import com.iluwatar.servicelayer.common.DaoBaseImpl; diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/Spellbook.java b/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/Spellbook.java index 165dcdc22..4c7870c4f 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/Spellbook.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/Spellbook.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.spellbook; import java.util.HashSet; diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/SpellbookDao.java b/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/SpellbookDao.java index e39e14175..ddf52cd73 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/SpellbookDao.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/SpellbookDao.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.spellbook; import com.iluwatar.servicelayer.common.Dao; diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/SpellbookDaoImpl.java b/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/SpellbookDaoImpl.java index 842764056..3e2859d59 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/SpellbookDaoImpl.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/SpellbookDaoImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.spellbook; import org.hibernate.Criteria; diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/Wizard.java b/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/Wizard.java index bfe8e46af..3fe1872dd 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/Wizard.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/Wizard.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.wizard; import java.util.HashSet; diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/WizardDao.java b/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/WizardDao.java index fc0f7135a..ddf05fb04 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/WizardDao.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/WizardDao.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.wizard; import com.iluwatar.servicelayer.common.Dao; diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/WizardDaoImpl.java b/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/WizardDaoImpl.java index 9ff36edef..8243e3d5d 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/WizardDaoImpl.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/WizardDaoImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.wizard; import org.hibernate.Criteria; diff --git a/service-layer/src/test/java/com/iluwatar/servicelayer/app/AppTest.java b/service-layer/src/test/java/com/iluwatar/servicelayer/app/AppTest.java index f92af7cff..3626c3339 100644 --- a/service-layer/src/test/java/com/iluwatar/servicelayer/app/AppTest.java +++ b/service-layer/src/test/java/com/iluwatar/servicelayer/app/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.app; import com.iluwatar.servicelayer.hibernate.HibernateUtil; diff --git a/service-layer/src/test/java/com/iluwatar/servicelayer/common/BaseDaoTest.java b/service-layer/src/test/java/com/iluwatar/servicelayer/common/BaseDaoTest.java index 1dabe117a..789ded428 100644 --- a/service-layer/src/test/java/com/iluwatar/servicelayer/common/BaseDaoTest.java +++ b/service-layer/src/test/java/com/iluwatar/servicelayer/common/BaseDaoTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.common; import com.iluwatar.servicelayer.hibernate.HibernateUtil; diff --git a/service-layer/src/test/java/com/iluwatar/servicelayer/magic/MagicServiceImplTest.java b/service-layer/src/test/java/com/iluwatar/servicelayer/magic/MagicServiceImplTest.java index 48f3ae9d3..dddc46916 100644 --- a/service-layer/src/test/java/com/iluwatar/servicelayer/magic/MagicServiceImplTest.java +++ b/service-layer/src/test/java/com/iluwatar/servicelayer/magic/MagicServiceImplTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.magic; import com.iluwatar.servicelayer.spell.Spell; diff --git a/service-layer/src/test/java/com/iluwatar/servicelayer/spell/SpellDaoImplTest.java b/service-layer/src/test/java/com/iluwatar/servicelayer/spell/SpellDaoImplTest.java index 99a8e142f..892ec6d2e 100644 --- a/service-layer/src/test/java/com/iluwatar/servicelayer/spell/SpellDaoImplTest.java +++ b/service-layer/src/test/java/com/iluwatar/servicelayer/spell/SpellDaoImplTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.spell; import com.iluwatar.servicelayer.common.BaseDaoTest; diff --git a/service-layer/src/test/java/com/iluwatar/servicelayer/spellbook/SpellbookDaoImplTest.java b/service-layer/src/test/java/com/iluwatar/servicelayer/spellbook/SpellbookDaoImplTest.java index fda46009e..957c07bea 100644 --- a/service-layer/src/test/java/com/iluwatar/servicelayer/spellbook/SpellbookDaoImplTest.java +++ b/service-layer/src/test/java/com/iluwatar/servicelayer/spellbook/SpellbookDaoImplTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.spellbook; import com.iluwatar.servicelayer.common.BaseDaoTest; diff --git a/service-layer/src/test/java/com/iluwatar/servicelayer/wizard/WizardDaoImplTest.java b/service-layer/src/test/java/com/iluwatar/servicelayer/wizard/WizardDaoImplTest.java index 1812f4c36..8649ee0a0 100644 --- a/service-layer/src/test/java/com/iluwatar/servicelayer/wizard/WizardDaoImplTest.java +++ b/service-layer/src/test/java/com/iluwatar/servicelayer/wizard/WizardDaoImplTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelayer.wizard; import com.iluwatar.servicelayer.common.BaseDaoTest; diff --git a/service-locator/pom.xml b/service-locator/pom.xml index 09acb03b8..8d388ccc8 100644 --- a/service-locator/pom.xml +++ b/service-locator/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/service-locator/src/main/java/com/iluwatar/servicelocator/App.java b/service-locator/src/main/java/com/iluwatar/servicelocator/App.java index d596e7638..72612fb21 100644 --- a/service-locator/src/main/java/com/iluwatar/servicelocator/App.java +++ b/service-locator/src/main/java/com/iluwatar/servicelocator/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelocator; /** diff --git a/service-locator/src/main/java/com/iluwatar/servicelocator/InitContext.java b/service-locator/src/main/java/com/iluwatar/servicelocator/InitContext.java index f30baf771..8063fc818 100644 --- a/service-locator/src/main/java/com/iluwatar/servicelocator/InitContext.java +++ b/service-locator/src/main/java/com/iluwatar/servicelocator/InitContext.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelocator; /** diff --git a/service-locator/src/main/java/com/iluwatar/servicelocator/Service.java b/service-locator/src/main/java/com/iluwatar/servicelocator/Service.java index ef26dbb93..4f5890bba 100644 --- a/service-locator/src/main/java/com/iluwatar/servicelocator/Service.java +++ b/service-locator/src/main/java/com/iluwatar/servicelocator/Service.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelocator; /** diff --git a/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceCache.java b/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceCache.java index 0a44a5d7f..268b01bd6 100644 --- a/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceCache.java +++ b/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceCache.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelocator; import java.util.HashMap; diff --git a/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceImpl.java b/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceImpl.java index f2dd31221..543fb8480 100644 --- a/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceImpl.java +++ b/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceImpl.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelocator; /** diff --git a/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceLocator.java b/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceLocator.java index 6ec51b989..9f0b478ca 100644 --- a/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceLocator.java +++ b/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceLocator.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelocator; /** diff --git a/service-locator/src/test/java/com/iluwatar/servicelocator/AppTest.java b/service-locator/src/test/java/com/iluwatar/servicelocator/AppTest.java index 0ed27656c..40e3820e9 100644 --- a/service-locator/src/test/java/com/iluwatar/servicelocator/AppTest.java +++ b/service-locator/src/test/java/com/iluwatar/servicelocator/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelocator; import org.junit.Test; diff --git a/service-locator/src/test/java/com/iluwatar/servicelocator/ServiceLocatorTest.java b/service-locator/src/test/java/com/iluwatar/servicelocator/ServiceLocatorTest.java index ce54e054f..b9f25ff44 100644 --- a/service-locator/src/test/java/com/iluwatar/servicelocator/ServiceLocatorTest.java +++ b/service-locator/src/test/java/com/iluwatar/servicelocator/ServiceLocatorTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.servicelocator; import org.junit.Test; diff --git a/singleton/pom.xml b/singleton/pom.xml index e08ffec86..2375fe70f 100644 --- a/singleton/pom.xml +++ b/singleton/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/singleton/src/main/java/com/iluwatar/singleton/App.java b/singleton/src/main/java/com/iluwatar/singleton/App.java index 6d4fd9468..4b505085a 100644 --- a/singleton/src/main/java/com/iluwatar/singleton/App.java +++ b/singleton/src/main/java/com/iluwatar/singleton/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.singleton; /** diff --git a/singleton/src/main/java/com/iluwatar/singleton/EnumIvoryTower.java b/singleton/src/main/java/com/iluwatar/singleton/EnumIvoryTower.java index f07afc137..eea1cd8cb 100644 --- a/singleton/src/main/java/com/iluwatar/singleton/EnumIvoryTower.java +++ b/singleton/src/main/java/com/iluwatar/singleton/EnumIvoryTower.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.singleton; /** diff --git a/singleton/src/main/java/com/iluwatar/singleton/InitializingOnDemandHolderIdiom.java b/singleton/src/main/java/com/iluwatar/singleton/InitializingOnDemandHolderIdiom.java index 9ffd56ed1..1a0168ccc 100644 --- a/singleton/src/main/java/com/iluwatar/singleton/InitializingOnDemandHolderIdiom.java +++ b/singleton/src/main/java/com/iluwatar/singleton/InitializingOnDemandHolderIdiom.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.singleton; import java.io.Serializable; diff --git a/singleton/src/main/java/com/iluwatar/singleton/IvoryTower.java b/singleton/src/main/java/com/iluwatar/singleton/IvoryTower.java index f8b7e170f..1dbffa00b 100644 --- a/singleton/src/main/java/com/iluwatar/singleton/IvoryTower.java +++ b/singleton/src/main/java/com/iluwatar/singleton/IvoryTower.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.singleton; /** diff --git a/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLocking.java b/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLocking.java index ab39a652d..d7f723553 100644 --- a/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLocking.java +++ b/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLocking.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.singleton; /** diff --git a/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java b/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java index e67922016..ac4c39f2c 100644 --- a/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java +++ b/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.singleton; /** diff --git a/singleton/src/test/java/com/iluwatar/singleton/AppTest.java b/singleton/src/test/java/com/iluwatar/singleton/AppTest.java index 232de4e40..c2def43a0 100644 --- a/singleton/src/test/java/com/iluwatar/singleton/AppTest.java +++ b/singleton/src/test/java/com/iluwatar/singleton/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.singleton; import org.junit.Test; diff --git a/singleton/src/test/java/com/iluwatar/singleton/EnumIvoryTowerTest.java b/singleton/src/test/java/com/iluwatar/singleton/EnumIvoryTowerTest.java index 49c65c716..ff821c6eb 100644 --- a/singleton/src/test/java/com/iluwatar/singleton/EnumIvoryTowerTest.java +++ b/singleton/src/test/java/com/iluwatar/singleton/EnumIvoryTowerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.singleton; /** diff --git a/singleton/src/test/java/com/iluwatar/singleton/InitializingOnDemandHolderIdiomTest.java b/singleton/src/test/java/com/iluwatar/singleton/InitializingOnDemandHolderIdiomTest.java index 60ae4798d..1aacb3d08 100644 --- a/singleton/src/test/java/com/iluwatar/singleton/InitializingOnDemandHolderIdiomTest.java +++ b/singleton/src/test/java/com/iluwatar/singleton/InitializingOnDemandHolderIdiomTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.singleton; /** diff --git a/singleton/src/test/java/com/iluwatar/singleton/IvoryTowerTest.java b/singleton/src/test/java/com/iluwatar/singleton/IvoryTowerTest.java index e9a222aef..67769d87d 100644 --- a/singleton/src/test/java/com/iluwatar/singleton/IvoryTowerTest.java +++ b/singleton/src/test/java/com/iluwatar/singleton/IvoryTowerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.singleton; /** diff --git a/singleton/src/test/java/com/iluwatar/singleton/SingletonTest.java b/singleton/src/test/java/com/iluwatar/singleton/SingletonTest.java index 6c6c4a3f4..0d9d0aee9 100644 --- a/singleton/src/test/java/com/iluwatar/singleton/SingletonTest.java +++ b/singleton/src/test/java/com/iluwatar/singleton/SingletonTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.singleton; import org.junit.Test; diff --git a/singleton/src/test/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLockingTest.java b/singleton/src/test/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLockingTest.java index f40f0cbc7..61f29d9e8 100644 --- a/singleton/src/test/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLockingTest.java +++ b/singleton/src/test/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLockingTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.singleton; /** diff --git a/singleton/src/test/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTowerTest.java b/singleton/src/test/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTowerTest.java index 8f2a5e6e1..188749d1c 100644 --- a/singleton/src/test/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTowerTest.java +++ b/singleton/src/test/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTowerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.singleton; /** diff --git a/specification/pom.xml b/specification/pom.xml index 64caa16b0..cb7b046ae 100644 --- a/specification/pom.xml +++ b/specification/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/specification/src/main/java/com/iluwatar/specification/app/App.java b/specification/src/main/java/com/iluwatar/specification/app/App.java index 373a24f92..7cbd38470 100644 --- a/specification/src/main/java/com/iluwatar/specification/app/App.java +++ b/specification/src/main/java/com/iluwatar/specification/app/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.app; import java.util.Arrays; diff --git a/specification/src/main/java/com/iluwatar/specification/creature/AbstractCreature.java b/specification/src/main/java/com/iluwatar/specification/creature/AbstractCreature.java index f02befb73..8e88f13ae 100644 --- a/specification/src/main/java/com/iluwatar/specification/creature/AbstractCreature.java +++ b/specification/src/main/java/com/iluwatar/specification/creature/AbstractCreature.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.creature; import com.iluwatar.specification.property.Color; diff --git a/specification/src/main/java/com/iluwatar/specification/creature/Creature.java b/specification/src/main/java/com/iluwatar/specification/creature/Creature.java index e6f48ffd0..a330af4e7 100644 --- a/specification/src/main/java/com/iluwatar/specification/creature/Creature.java +++ b/specification/src/main/java/com/iluwatar/specification/creature/Creature.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.creature; import com.iluwatar.specification.property.Color; diff --git a/specification/src/main/java/com/iluwatar/specification/creature/Dragon.java b/specification/src/main/java/com/iluwatar/specification/creature/Dragon.java index 1c629d652..ab07001f7 100644 --- a/specification/src/main/java/com/iluwatar/specification/creature/Dragon.java +++ b/specification/src/main/java/com/iluwatar/specification/creature/Dragon.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.creature; import com.iluwatar.specification.property.Color; diff --git a/specification/src/main/java/com/iluwatar/specification/creature/Goblin.java b/specification/src/main/java/com/iluwatar/specification/creature/Goblin.java index c01f98505..1b53a7e77 100644 --- a/specification/src/main/java/com/iluwatar/specification/creature/Goblin.java +++ b/specification/src/main/java/com/iluwatar/specification/creature/Goblin.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.creature; import com.iluwatar.specification.property.Color; diff --git a/specification/src/main/java/com/iluwatar/specification/creature/KillerBee.java b/specification/src/main/java/com/iluwatar/specification/creature/KillerBee.java index 909767a67..4c98e9041 100644 --- a/specification/src/main/java/com/iluwatar/specification/creature/KillerBee.java +++ b/specification/src/main/java/com/iluwatar/specification/creature/KillerBee.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.creature; import com.iluwatar.specification.property.Color; diff --git a/specification/src/main/java/com/iluwatar/specification/creature/Octopus.java b/specification/src/main/java/com/iluwatar/specification/creature/Octopus.java index 125b5d0e3..d74ba357f 100644 --- a/specification/src/main/java/com/iluwatar/specification/creature/Octopus.java +++ b/specification/src/main/java/com/iluwatar/specification/creature/Octopus.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.creature; import com.iluwatar.specification.property.Color; diff --git a/specification/src/main/java/com/iluwatar/specification/creature/Shark.java b/specification/src/main/java/com/iluwatar/specification/creature/Shark.java index 7c8b3faba..69f4c9b38 100644 --- a/specification/src/main/java/com/iluwatar/specification/creature/Shark.java +++ b/specification/src/main/java/com/iluwatar/specification/creature/Shark.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.creature; import com.iluwatar.specification.property.Color; diff --git a/specification/src/main/java/com/iluwatar/specification/creature/Troll.java b/specification/src/main/java/com/iluwatar/specification/creature/Troll.java index 788c0d770..f480a0723 100644 --- a/specification/src/main/java/com/iluwatar/specification/creature/Troll.java +++ b/specification/src/main/java/com/iluwatar/specification/creature/Troll.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.creature; import com.iluwatar.specification.property.Color; diff --git a/specification/src/main/java/com/iluwatar/specification/property/Color.java b/specification/src/main/java/com/iluwatar/specification/property/Color.java index 197631737..583602990 100644 --- a/specification/src/main/java/com/iluwatar/specification/property/Color.java +++ b/specification/src/main/java/com/iluwatar/specification/property/Color.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.property; /** diff --git a/specification/src/main/java/com/iluwatar/specification/property/Movement.java b/specification/src/main/java/com/iluwatar/specification/property/Movement.java index 7c09cf642..ae26d1a30 100644 --- a/specification/src/main/java/com/iluwatar/specification/property/Movement.java +++ b/specification/src/main/java/com/iluwatar/specification/property/Movement.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.property; /** diff --git a/specification/src/main/java/com/iluwatar/specification/property/Size.java b/specification/src/main/java/com/iluwatar/specification/property/Size.java index 855d0eadc..239caa586 100644 --- a/specification/src/main/java/com/iluwatar/specification/property/Size.java +++ b/specification/src/main/java/com/iluwatar/specification/property/Size.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.property; /** diff --git a/specification/src/main/java/com/iluwatar/specification/selector/ColorSelector.java b/specification/src/main/java/com/iluwatar/specification/selector/ColorSelector.java index 41b51fa95..c1c178e23 100644 --- a/specification/src/main/java/com/iluwatar/specification/selector/ColorSelector.java +++ b/specification/src/main/java/com/iluwatar/specification/selector/ColorSelector.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.selector; import java.util.function.Predicate; diff --git a/specification/src/main/java/com/iluwatar/specification/selector/MovementSelector.java b/specification/src/main/java/com/iluwatar/specification/selector/MovementSelector.java index 288205c86..67d7abd61 100644 --- a/specification/src/main/java/com/iluwatar/specification/selector/MovementSelector.java +++ b/specification/src/main/java/com/iluwatar/specification/selector/MovementSelector.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.selector; import java.util.function.Predicate; diff --git a/specification/src/main/java/com/iluwatar/specification/selector/SizeSelector.java b/specification/src/main/java/com/iluwatar/specification/selector/SizeSelector.java index 88bdb8793..2792531d0 100644 --- a/specification/src/main/java/com/iluwatar/specification/selector/SizeSelector.java +++ b/specification/src/main/java/com/iluwatar/specification/selector/SizeSelector.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.selector; import java.util.function.Predicate; diff --git a/specification/src/test/java/com/iluwatar/specification/app/AppTest.java b/specification/src/test/java/com/iluwatar/specification/app/AppTest.java index b1bf00c24..13e6c9b5d 100644 --- a/specification/src/test/java/com/iluwatar/specification/app/AppTest.java +++ b/specification/src/test/java/com/iluwatar/specification/app/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.app; import org.junit.Test; diff --git a/specification/src/test/java/com/iluwatar/specification/creature/CreatureTest.java b/specification/src/test/java/com/iluwatar/specification/creature/CreatureTest.java index 0548788a4..22b27c8a0 100644 --- a/specification/src/test/java/com/iluwatar/specification/creature/CreatureTest.java +++ b/specification/src/test/java/com/iluwatar/specification/creature/CreatureTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.creature; import com.iluwatar.specification.property.Color; diff --git a/specification/src/test/java/com/iluwatar/specification/selector/ColorSelectorTest.java b/specification/src/test/java/com/iluwatar/specification/selector/ColorSelectorTest.java index 894f6c58e..0d6dfa080 100644 --- a/specification/src/test/java/com/iluwatar/specification/selector/ColorSelectorTest.java +++ b/specification/src/test/java/com/iluwatar/specification/selector/ColorSelectorTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.selector; import com.iluwatar.specification.creature.Creature; diff --git a/specification/src/test/java/com/iluwatar/specification/selector/MovementSelectorTest.java b/specification/src/test/java/com/iluwatar/specification/selector/MovementSelectorTest.java index c2a251b5a..451c776dd 100644 --- a/specification/src/test/java/com/iluwatar/specification/selector/MovementSelectorTest.java +++ b/specification/src/test/java/com/iluwatar/specification/selector/MovementSelectorTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.selector; import com.iluwatar.specification.creature.Creature; diff --git a/specification/src/test/java/com/iluwatar/specification/selector/SizeSelectorTest.java b/specification/src/test/java/com/iluwatar/specification/selector/SizeSelectorTest.java index d2a534c18..de1228f1b 100644 --- a/specification/src/test/java/com/iluwatar/specification/selector/SizeSelectorTest.java +++ b/specification/src/test/java/com/iluwatar/specification/selector/SizeSelectorTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.specification.selector; import com.iluwatar.specification.creature.Creature; diff --git a/state/pom.xml b/state/pom.xml index 4c0dbe8d3..ecf41e038 100644 --- a/state/pom.xml +++ b/state/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/state/src/main/java/com/iluwatar/state/AngryState.java b/state/src/main/java/com/iluwatar/state/AngryState.java index d9fab7e67..c58f85ae1 100644 --- a/state/src/main/java/com/iluwatar/state/AngryState.java +++ b/state/src/main/java/com/iluwatar/state/AngryState.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.state; /** diff --git a/state/src/main/java/com/iluwatar/state/App.java b/state/src/main/java/com/iluwatar/state/App.java index 63b59ad59..9f9d8d29a 100644 --- a/state/src/main/java/com/iluwatar/state/App.java +++ b/state/src/main/java/com/iluwatar/state/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.state; /** diff --git a/state/src/main/java/com/iluwatar/state/Mammoth.java b/state/src/main/java/com/iluwatar/state/Mammoth.java index 92f4d7188..ffa07ed68 100644 --- a/state/src/main/java/com/iluwatar/state/Mammoth.java +++ b/state/src/main/java/com/iluwatar/state/Mammoth.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.state; /** diff --git a/state/src/main/java/com/iluwatar/state/PeacefulState.java b/state/src/main/java/com/iluwatar/state/PeacefulState.java index d3a53913f..23f4e893c 100644 --- a/state/src/main/java/com/iluwatar/state/PeacefulState.java +++ b/state/src/main/java/com/iluwatar/state/PeacefulState.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.state; /** diff --git a/state/src/main/java/com/iluwatar/state/State.java b/state/src/main/java/com/iluwatar/state/State.java index 4851a5c6c..65c59af16 100644 --- a/state/src/main/java/com/iluwatar/state/State.java +++ b/state/src/main/java/com/iluwatar/state/State.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.state; /** diff --git a/state/src/test/java/com/iluwatar/state/AppTest.java b/state/src/test/java/com/iluwatar/state/AppTest.java index d03592739..9dc3790c7 100644 --- a/state/src/test/java/com/iluwatar/state/AppTest.java +++ b/state/src/test/java/com/iluwatar/state/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.state; import org.junit.Test; diff --git a/state/src/test/java/com/iluwatar/state/MammothTest.java b/state/src/test/java/com/iluwatar/state/MammothTest.java index 4f7224208..4fe37bfd1 100644 --- a/state/src/test/java/com/iluwatar/state/MammothTest.java +++ b/state/src/test/java/com/iluwatar/state/MammothTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.state; import org.junit.After; diff --git a/step-builder/pom.xml b/step-builder/pom.xml index a00d7e8d6..2123f0758 100644 --- a/step-builder/pom.xml +++ b/step-builder/pom.xml @@ -1,4 +1,28 @@ + diff --git a/step-builder/src/main/java/com/iluwatar/stepbuilder/App.java b/step-builder/src/main/java/com/iluwatar/stepbuilder/App.java index a839cd49e..aeb759ba8 100644 --- a/step-builder/src/main/java/com/iluwatar/stepbuilder/App.java +++ b/step-builder/src/main/java/com/iluwatar/stepbuilder/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.stepbuilder; /** diff --git a/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java b/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java index e29b85019..ed2af3a65 100644 --- a/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java +++ b/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.stepbuilder; import java.util.List; diff --git a/step-builder/src/main/java/com/iluwatar/stepbuilder/CharacterStepBuilder.java b/step-builder/src/main/java/com/iluwatar/stepbuilder/CharacterStepBuilder.java index 3a8c3309a..ce402cfe2 100644 --- a/step-builder/src/main/java/com/iluwatar/stepbuilder/CharacterStepBuilder.java +++ b/step-builder/src/main/java/com/iluwatar/stepbuilder/CharacterStepBuilder.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.stepbuilder; import java.util.ArrayList; diff --git a/step-builder/src/test/java/com/iluwatar/stepbuilder/AppTest.java b/step-builder/src/test/java/com/iluwatar/stepbuilder/AppTest.java index 197632288..41511d913 100644 --- a/step-builder/src/test/java/com/iluwatar/stepbuilder/AppTest.java +++ b/step-builder/src/test/java/com/iluwatar/stepbuilder/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.stepbuilder; import org.junit.Test; diff --git a/step-builder/src/test/java/com/iluwatar/stepbuilder/CharacterStepBuilderTest.java b/step-builder/src/test/java/com/iluwatar/stepbuilder/CharacterStepBuilderTest.java index b26635416..baa8f9d1d 100644 --- a/step-builder/src/test/java/com/iluwatar/stepbuilder/CharacterStepBuilderTest.java +++ b/step-builder/src/test/java/com/iluwatar/stepbuilder/CharacterStepBuilderTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.stepbuilder; import org.junit.Test; diff --git a/strategy/pom.xml b/strategy/pom.xml index b194365f1..9b09ede1a 100644 --- a/strategy/pom.xml +++ b/strategy/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/strategy/src/main/java/com/iluwatar/strategy/App.java b/strategy/src/main/java/com/iluwatar/strategy/App.java index e2bcfef8a..be8826fe3 100644 --- a/strategy/src/main/java/com/iluwatar/strategy/App.java +++ b/strategy/src/main/java/com/iluwatar/strategy/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.strategy; /** diff --git a/strategy/src/main/java/com/iluwatar/strategy/DragonSlayer.java b/strategy/src/main/java/com/iluwatar/strategy/DragonSlayer.java index a40065d7f..93214ffbf 100644 --- a/strategy/src/main/java/com/iluwatar/strategy/DragonSlayer.java +++ b/strategy/src/main/java/com/iluwatar/strategy/DragonSlayer.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.strategy; /** diff --git a/strategy/src/main/java/com/iluwatar/strategy/DragonSlayingStrategy.java b/strategy/src/main/java/com/iluwatar/strategy/DragonSlayingStrategy.java index aa57c34f0..23e296279 100644 --- a/strategy/src/main/java/com/iluwatar/strategy/DragonSlayingStrategy.java +++ b/strategy/src/main/java/com/iluwatar/strategy/DragonSlayingStrategy.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.strategy; /** diff --git a/strategy/src/main/java/com/iluwatar/strategy/MeleeStrategy.java b/strategy/src/main/java/com/iluwatar/strategy/MeleeStrategy.java index 86a9dd969..d5b752c52 100644 --- a/strategy/src/main/java/com/iluwatar/strategy/MeleeStrategy.java +++ b/strategy/src/main/java/com/iluwatar/strategy/MeleeStrategy.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.strategy; /** diff --git a/strategy/src/main/java/com/iluwatar/strategy/ProjectileStrategy.java b/strategy/src/main/java/com/iluwatar/strategy/ProjectileStrategy.java index 4b286c2df..7cd731167 100644 --- a/strategy/src/main/java/com/iluwatar/strategy/ProjectileStrategy.java +++ b/strategy/src/main/java/com/iluwatar/strategy/ProjectileStrategy.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.strategy; /** diff --git a/strategy/src/main/java/com/iluwatar/strategy/SpellStrategy.java b/strategy/src/main/java/com/iluwatar/strategy/SpellStrategy.java index ce82ed60d..6309ed31b 100644 --- a/strategy/src/main/java/com/iluwatar/strategy/SpellStrategy.java +++ b/strategy/src/main/java/com/iluwatar/strategy/SpellStrategy.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.strategy; /** diff --git a/strategy/src/test/java/com/iluwatar/strategy/AppTest.java b/strategy/src/test/java/com/iluwatar/strategy/AppTest.java index 88ee28be4..fa81ae747 100644 --- a/strategy/src/test/java/com/iluwatar/strategy/AppTest.java +++ b/strategy/src/test/java/com/iluwatar/strategy/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.strategy; import org.junit.Test; diff --git a/strategy/src/test/java/com/iluwatar/strategy/DragonSlayerTest.java b/strategy/src/test/java/com/iluwatar/strategy/DragonSlayerTest.java index 907d65ac4..ff7e6840a 100644 --- a/strategy/src/test/java/com/iluwatar/strategy/DragonSlayerTest.java +++ b/strategy/src/test/java/com/iluwatar/strategy/DragonSlayerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.strategy; import org.junit.Test; diff --git a/strategy/src/test/java/com/iluwatar/strategy/DragonSlayingStrategyTest.java b/strategy/src/test/java/com/iluwatar/strategy/DragonSlayingStrategyTest.java index f9d18e22c..341db8caf 100644 --- a/strategy/src/test/java/com/iluwatar/strategy/DragonSlayingStrategyTest.java +++ b/strategy/src/test/java/com/iluwatar/strategy/DragonSlayingStrategyTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.strategy; import org.junit.After; diff --git a/template-method/pom.xml b/template-method/pom.xml index ef2980203..f734cfd35 100644 --- a/template-method/pom.xml +++ b/template-method/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/template-method/src/main/java/com/iluwatar/templatemethod/App.java b/template-method/src/main/java/com/iluwatar/templatemethod/App.java index eb1df2f72..ead9c64f4 100644 --- a/template-method/src/main/java/com/iluwatar/templatemethod/App.java +++ b/template-method/src/main/java/com/iluwatar/templatemethod/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.templatemethod; /** diff --git a/template-method/src/main/java/com/iluwatar/templatemethod/HalflingThief.java b/template-method/src/main/java/com/iluwatar/templatemethod/HalflingThief.java index 0b38c5697..e776044f6 100644 --- a/template-method/src/main/java/com/iluwatar/templatemethod/HalflingThief.java +++ b/template-method/src/main/java/com/iluwatar/templatemethod/HalflingThief.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.templatemethod; /** diff --git a/template-method/src/main/java/com/iluwatar/templatemethod/HitAndRunMethod.java b/template-method/src/main/java/com/iluwatar/templatemethod/HitAndRunMethod.java index 80a961093..7a78576a1 100644 --- a/template-method/src/main/java/com/iluwatar/templatemethod/HitAndRunMethod.java +++ b/template-method/src/main/java/com/iluwatar/templatemethod/HitAndRunMethod.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.templatemethod; /** diff --git a/template-method/src/main/java/com/iluwatar/templatemethod/StealingMethod.java b/template-method/src/main/java/com/iluwatar/templatemethod/StealingMethod.java index 096d51b4e..c8c584cdd 100644 --- a/template-method/src/main/java/com/iluwatar/templatemethod/StealingMethod.java +++ b/template-method/src/main/java/com/iluwatar/templatemethod/StealingMethod.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.templatemethod; /** diff --git a/template-method/src/main/java/com/iluwatar/templatemethod/SubtleMethod.java b/template-method/src/main/java/com/iluwatar/templatemethod/SubtleMethod.java index 5249a7ef9..4fdb5d758 100644 --- a/template-method/src/main/java/com/iluwatar/templatemethod/SubtleMethod.java +++ b/template-method/src/main/java/com/iluwatar/templatemethod/SubtleMethod.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.templatemethod; /** diff --git a/template-method/src/test/java/com/iluwatar/templatemethod/AppTest.java b/template-method/src/test/java/com/iluwatar/templatemethod/AppTest.java index 80e867327..e0baf40cb 100644 --- a/template-method/src/test/java/com/iluwatar/templatemethod/AppTest.java +++ b/template-method/src/test/java/com/iluwatar/templatemethod/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.templatemethod; import org.junit.Test; diff --git a/template-method/src/test/java/com/iluwatar/templatemethod/HalflingThiefTest.java b/template-method/src/test/java/com/iluwatar/templatemethod/HalflingThiefTest.java index be049720f..31cb078e3 100644 --- a/template-method/src/test/java/com/iluwatar/templatemethod/HalflingThiefTest.java +++ b/template-method/src/test/java/com/iluwatar/templatemethod/HalflingThiefTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.templatemethod; import org.junit.Test; diff --git a/template-method/src/test/java/com/iluwatar/templatemethod/HitAndRunMethodTest.java b/template-method/src/test/java/com/iluwatar/templatemethod/HitAndRunMethodTest.java index 86fc2591d..27d601ac3 100644 --- a/template-method/src/test/java/com/iluwatar/templatemethod/HitAndRunMethodTest.java +++ b/template-method/src/test/java/com/iluwatar/templatemethod/HitAndRunMethodTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.templatemethod; /** diff --git a/template-method/src/test/java/com/iluwatar/templatemethod/StealingMethodTest.java b/template-method/src/test/java/com/iluwatar/templatemethod/StealingMethodTest.java index 61143a15d..e0cb90d42 100644 --- a/template-method/src/test/java/com/iluwatar/templatemethod/StealingMethodTest.java +++ b/template-method/src/test/java/com/iluwatar/templatemethod/StealingMethodTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.templatemethod; import org.junit.After; diff --git a/template-method/src/test/java/com/iluwatar/templatemethod/SubtleMethodTest.java b/template-method/src/test/java/com/iluwatar/templatemethod/SubtleMethodTest.java index 8b3681a76..78c86adfc 100644 --- a/template-method/src/test/java/com/iluwatar/templatemethod/SubtleMethodTest.java +++ b/template-method/src/test/java/com/iluwatar/templatemethod/SubtleMethodTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.templatemethod; /** diff --git a/thread-pool/pom.xml b/thread-pool/pom.xml index 5965b46bb..7eeae44e2 100644 --- a/thread-pool/pom.xml +++ b/thread-pool/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/thread-pool/src/main/java/com/iluwatar/threadpool/App.java b/thread-pool/src/main/java/com/iluwatar/threadpool/App.java index 1833f3950..16fbca35a 100644 --- a/thread-pool/src/main/java/com/iluwatar/threadpool/App.java +++ b/thread-pool/src/main/java/com/iluwatar/threadpool/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.threadpool; import java.util.ArrayList; diff --git a/thread-pool/src/main/java/com/iluwatar/threadpool/CoffeeMakingTask.java b/thread-pool/src/main/java/com/iluwatar/threadpool/CoffeeMakingTask.java index 3a8464092..fce9ada9c 100644 --- a/thread-pool/src/main/java/com/iluwatar/threadpool/CoffeeMakingTask.java +++ b/thread-pool/src/main/java/com/iluwatar/threadpool/CoffeeMakingTask.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.threadpool; /** diff --git a/thread-pool/src/main/java/com/iluwatar/threadpool/PotatoPeelingTask.java b/thread-pool/src/main/java/com/iluwatar/threadpool/PotatoPeelingTask.java index 2be941406..e55debe28 100644 --- a/thread-pool/src/main/java/com/iluwatar/threadpool/PotatoPeelingTask.java +++ b/thread-pool/src/main/java/com/iluwatar/threadpool/PotatoPeelingTask.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.threadpool; /** diff --git a/thread-pool/src/main/java/com/iluwatar/threadpool/Task.java b/thread-pool/src/main/java/com/iluwatar/threadpool/Task.java index 2426948b3..623d2b78e 100644 --- a/thread-pool/src/main/java/com/iluwatar/threadpool/Task.java +++ b/thread-pool/src/main/java/com/iluwatar/threadpool/Task.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.threadpool; import java.util.concurrent.atomic.AtomicInteger; diff --git a/thread-pool/src/main/java/com/iluwatar/threadpool/Worker.java b/thread-pool/src/main/java/com/iluwatar/threadpool/Worker.java index 0ac690dbe..1354cab41 100644 --- a/thread-pool/src/main/java/com/iluwatar/threadpool/Worker.java +++ b/thread-pool/src/main/java/com/iluwatar/threadpool/Worker.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.threadpool; /** diff --git a/thread-pool/src/test/java/com/iluwatar/threadpool/AppTest.java b/thread-pool/src/test/java/com/iluwatar/threadpool/AppTest.java index f0f7b74bb..5536d6631 100644 --- a/thread-pool/src/test/java/com/iluwatar/threadpool/AppTest.java +++ b/thread-pool/src/test/java/com/iluwatar/threadpool/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.threadpool; import org.junit.Test; diff --git a/thread-pool/src/test/java/com/iluwatar/threadpool/CoffeeMakingTaskTest.java b/thread-pool/src/test/java/com/iluwatar/threadpool/CoffeeMakingTaskTest.java index ab3d47d9a..281ef16ad 100644 --- a/thread-pool/src/test/java/com/iluwatar/threadpool/CoffeeMakingTaskTest.java +++ b/thread-pool/src/test/java/com/iluwatar/threadpool/CoffeeMakingTaskTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.threadpool; /** diff --git a/thread-pool/src/test/java/com/iluwatar/threadpool/PotatoPeelingTaskTest.java b/thread-pool/src/test/java/com/iluwatar/threadpool/PotatoPeelingTaskTest.java index 4f9b1496c..d27e6ba5d 100644 --- a/thread-pool/src/test/java/com/iluwatar/threadpool/PotatoPeelingTaskTest.java +++ b/thread-pool/src/test/java/com/iluwatar/threadpool/PotatoPeelingTaskTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.threadpool; /** diff --git a/thread-pool/src/test/java/com/iluwatar/threadpool/TaskTest.java b/thread-pool/src/test/java/com/iluwatar/threadpool/TaskTest.java index f1ef8160f..ded3e9d42 100644 --- a/thread-pool/src/test/java/com/iluwatar/threadpool/TaskTest.java +++ b/thread-pool/src/test/java/com/iluwatar/threadpool/TaskTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.threadpool; import org.junit.Test; diff --git a/thread-pool/src/test/java/com/iluwatar/threadpool/WorkerTest.java b/thread-pool/src/test/java/com/iluwatar/threadpool/WorkerTest.java index 53a1d8694..24fe87548 100644 --- a/thread-pool/src/test/java/com/iluwatar/threadpool/WorkerTest.java +++ b/thread-pool/src/test/java/com/iluwatar/threadpool/WorkerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.threadpool; import org.junit.Test; diff --git a/tolerant-reader/pom.xml b/tolerant-reader/pom.xml index c7677b934..c6b980fb3 100644 --- a/tolerant-reader/pom.xml +++ b/tolerant-reader/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/App.java b/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/App.java index 242b71390..066b6e737 100644 --- a/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/App.java +++ b/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.tolerantreader; import java.io.IOException; diff --git a/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFish.java b/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFish.java index d12ed4dbf..1b1825a3e 100644 --- a/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFish.java +++ b/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFish.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.tolerantreader; import java.io.Serializable; diff --git a/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java b/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java index 5d2a13735..42f659476 100644 --- a/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java +++ b/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.tolerantreader; import java.io.FileInputStream; diff --git a/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishV2.java b/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishV2.java index 2c72bee4d..55a416734 100644 --- a/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishV2.java +++ b/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishV2.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.tolerantreader; /** diff --git a/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/AppTest.java b/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/AppTest.java index c7906adb2..e1a2ca5f9 100644 --- a/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/AppTest.java +++ b/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.tolerantreader; import org.junit.After; diff --git a/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/RainbowFishSerializerTest.java b/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/RainbowFishSerializerTest.java index 5f7ca0262..1028e7bde 100644 --- a/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/RainbowFishSerializerTest.java +++ b/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/RainbowFishSerializerTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.tolerantreader; import org.junit.Rule; diff --git a/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/RainbowFishTest.java b/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/RainbowFishTest.java index 0f7df25c8..f9dcc5e6d 100644 --- a/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/RainbowFishTest.java +++ b/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/RainbowFishTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.tolerantreader; import org.junit.Test; diff --git a/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/RainbowFishV2Test.java b/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/RainbowFishV2Test.java index 5e8bdcef5..680e3c4ed 100644 --- a/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/RainbowFishV2Test.java +++ b/tolerant-reader/src/test/java/com/iluwatar/tolerantreader/RainbowFishV2Test.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.tolerantreader; import org.junit.Test; diff --git a/twin/pom.xml b/twin/pom.xml index 46e8de15a..6c5ac7473 100644 --- a/twin/pom.xml +++ b/twin/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/twin/src/main/java/com/iluwatar/twin/App.java b/twin/src/main/java/com/iluwatar/twin/App.java index cb971c490..95998df33 100644 --- a/twin/src/main/java/com/iluwatar/twin/App.java +++ b/twin/src/main/java/com/iluwatar/twin/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.twin; /** diff --git a/twin/src/main/java/com/iluwatar/twin/BallItem.java b/twin/src/main/java/com/iluwatar/twin/BallItem.java index b95dc06ee..4e6ecc15e 100644 --- a/twin/src/main/java/com/iluwatar/twin/BallItem.java +++ b/twin/src/main/java/com/iluwatar/twin/BallItem.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.twin; diff --git a/twin/src/main/java/com/iluwatar/twin/BallThread.java b/twin/src/main/java/com/iluwatar/twin/BallThread.java index 2d9e7c41a..194d85b06 100644 --- a/twin/src/main/java/com/iluwatar/twin/BallThread.java +++ b/twin/src/main/java/com/iluwatar/twin/BallThread.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.twin; diff --git a/twin/src/main/java/com/iluwatar/twin/GameItem.java b/twin/src/main/java/com/iluwatar/twin/GameItem.java index e98202d0c..08d7dcce7 100644 --- a/twin/src/main/java/com/iluwatar/twin/GameItem.java +++ b/twin/src/main/java/com/iluwatar/twin/GameItem.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.twin; diff --git a/twin/src/test/java/com/iluwatar/twin/AppTest.java b/twin/src/test/java/com/iluwatar/twin/AppTest.java index 94e178254..73a1d6322 100644 --- a/twin/src/test/java/com/iluwatar/twin/AppTest.java +++ b/twin/src/test/java/com/iluwatar/twin/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.twin; import org.junit.Test; diff --git a/twin/src/test/java/com/iluwatar/twin/BallItemTest.java b/twin/src/test/java/com/iluwatar/twin/BallItemTest.java index ca1da7ac8..4bb9a2111 100644 --- a/twin/src/test/java/com/iluwatar/twin/BallItemTest.java +++ b/twin/src/test/java/com/iluwatar/twin/BallItemTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.twin; import org.junit.Test; diff --git a/twin/src/test/java/com/iluwatar/twin/BallThreadTest.java b/twin/src/test/java/com/iluwatar/twin/BallThreadTest.java index 7e0bdc11e..453109e5a 100644 --- a/twin/src/test/java/com/iluwatar/twin/BallThreadTest.java +++ b/twin/src/test/java/com/iluwatar/twin/BallThreadTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.twin; import org.junit.Test; diff --git a/twin/src/test/java/com/iluwatar/twin/StdOutTest.java b/twin/src/test/java/com/iluwatar/twin/StdOutTest.java index f506886e1..b3baf8abd 100644 --- a/twin/src/test/java/com/iluwatar/twin/StdOutTest.java +++ b/twin/src/test/java/com/iluwatar/twin/StdOutTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.twin; import org.junit.After; diff --git a/update-ghpages.sh b/update-ghpages.sh index 82486d5a4..aee888ba9 100644 --- a/update-ghpages.sh +++ b/update-ghpages.sh @@ -1,4 +1,27 @@ #!/bin/bash +# +# The MIT License +# Copyright (c) 2014 Ilkka Seppälä +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# + # Clone gh-pages git clone -b gh-pages "https://${GH_REF}" ghpagesclone diff --git a/visitor/pom.xml b/visitor/pom.xml index a53e2bcc5..d46a7e0f7 100644 --- a/visitor/pom.xml +++ b/visitor/pom.xml @@ -1,4 +1,28 @@ + 4.0.0 diff --git a/visitor/src/main/java/com/iluwatar/visitor/App.java b/visitor/src/main/java/com/iluwatar/visitor/App.java index 74b3deb63..371756b84 100644 --- a/visitor/src/main/java/com/iluwatar/visitor/App.java +++ b/visitor/src/main/java/com/iluwatar/visitor/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; /** diff --git a/visitor/src/main/java/com/iluwatar/visitor/Commander.java b/visitor/src/main/java/com/iluwatar/visitor/Commander.java index 8a16e7cf5..a1969a41c 100644 --- a/visitor/src/main/java/com/iluwatar/visitor/Commander.java +++ b/visitor/src/main/java/com/iluwatar/visitor/Commander.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; /** diff --git a/visitor/src/main/java/com/iluwatar/visitor/CommanderVisitor.java b/visitor/src/main/java/com/iluwatar/visitor/CommanderVisitor.java index f5adbe1f8..b0b9d5708 100644 --- a/visitor/src/main/java/com/iluwatar/visitor/CommanderVisitor.java +++ b/visitor/src/main/java/com/iluwatar/visitor/CommanderVisitor.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; /** diff --git a/visitor/src/main/java/com/iluwatar/visitor/Sergeant.java b/visitor/src/main/java/com/iluwatar/visitor/Sergeant.java index 0890852a1..3b0087582 100644 --- a/visitor/src/main/java/com/iluwatar/visitor/Sergeant.java +++ b/visitor/src/main/java/com/iluwatar/visitor/Sergeant.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; /** diff --git a/visitor/src/main/java/com/iluwatar/visitor/SergeantVisitor.java b/visitor/src/main/java/com/iluwatar/visitor/SergeantVisitor.java index 460d8fcd2..dbaa93034 100644 --- a/visitor/src/main/java/com/iluwatar/visitor/SergeantVisitor.java +++ b/visitor/src/main/java/com/iluwatar/visitor/SergeantVisitor.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; /** diff --git a/visitor/src/main/java/com/iluwatar/visitor/Soldier.java b/visitor/src/main/java/com/iluwatar/visitor/Soldier.java index a3d8ffc26..6e82a936b 100644 --- a/visitor/src/main/java/com/iluwatar/visitor/Soldier.java +++ b/visitor/src/main/java/com/iluwatar/visitor/Soldier.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; /** diff --git a/visitor/src/main/java/com/iluwatar/visitor/SoldierVisitor.java b/visitor/src/main/java/com/iluwatar/visitor/SoldierVisitor.java index af0bbe472..a2abbb9e5 100644 --- a/visitor/src/main/java/com/iluwatar/visitor/SoldierVisitor.java +++ b/visitor/src/main/java/com/iluwatar/visitor/SoldierVisitor.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; /** diff --git a/visitor/src/main/java/com/iluwatar/visitor/Unit.java b/visitor/src/main/java/com/iluwatar/visitor/Unit.java index 300a6299b..dc8bf2a28 100644 --- a/visitor/src/main/java/com/iluwatar/visitor/Unit.java +++ b/visitor/src/main/java/com/iluwatar/visitor/Unit.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; /** diff --git a/visitor/src/main/java/com/iluwatar/visitor/UnitVisitor.java b/visitor/src/main/java/com/iluwatar/visitor/UnitVisitor.java index 6c1d6b773..e465a6473 100644 --- a/visitor/src/main/java/com/iluwatar/visitor/UnitVisitor.java +++ b/visitor/src/main/java/com/iluwatar/visitor/UnitVisitor.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; /** diff --git a/visitor/src/test/java/com/iluwatar/visitor/AppTest.java b/visitor/src/test/java/com/iluwatar/visitor/AppTest.java index 573a11532..33674053e 100644 --- a/visitor/src/test/java/com/iluwatar/visitor/AppTest.java +++ b/visitor/src/test/java/com/iluwatar/visitor/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; import org.junit.Test; diff --git a/visitor/src/test/java/com/iluwatar/visitor/CommanderTest.java b/visitor/src/test/java/com/iluwatar/visitor/CommanderTest.java index bbf6c7963..abf92765f 100644 --- a/visitor/src/test/java/com/iluwatar/visitor/CommanderTest.java +++ b/visitor/src/test/java/com/iluwatar/visitor/CommanderTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; import static org.mockito.Matchers.eq; diff --git a/visitor/src/test/java/com/iluwatar/visitor/CommanderVisitorTest.java b/visitor/src/test/java/com/iluwatar/visitor/CommanderVisitorTest.java index ac296c332..1331d25a9 100644 --- a/visitor/src/test/java/com/iluwatar/visitor/CommanderVisitorTest.java +++ b/visitor/src/test/java/com/iluwatar/visitor/CommanderVisitorTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; import java.util.Optional; diff --git a/visitor/src/test/java/com/iluwatar/visitor/SergeantTest.java b/visitor/src/test/java/com/iluwatar/visitor/SergeantTest.java index d0e6d3db2..fdc93265d 100644 --- a/visitor/src/test/java/com/iluwatar/visitor/SergeantTest.java +++ b/visitor/src/test/java/com/iluwatar/visitor/SergeantTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; import static org.mockito.Matchers.eq; diff --git a/visitor/src/test/java/com/iluwatar/visitor/SergeantVisitorTest.java b/visitor/src/test/java/com/iluwatar/visitor/SergeantVisitorTest.java index 54e274bc7..dc84d0b54 100644 --- a/visitor/src/test/java/com/iluwatar/visitor/SergeantVisitorTest.java +++ b/visitor/src/test/java/com/iluwatar/visitor/SergeantVisitorTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; import java.util.Optional; diff --git a/visitor/src/test/java/com/iluwatar/visitor/SoldierTest.java b/visitor/src/test/java/com/iluwatar/visitor/SoldierTest.java index e9aa54608..18b2f2c08 100644 --- a/visitor/src/test/java/com/iluwatar/visitor/SoldierTest.java +++ b/visitor/src/test/java/com/iluwatar/visitor/SoldierTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; import static org.mockito.Matchers.eq; diff --git a/visitor/src/test/java/com/iluwatar/visitor/SoldierVisitorTest.java b/visitor/src/test/java/com/iluwatar/visitor/SoldierVisitorTest.java index a5f16e9e3..c56485eb4 100644 --- a/visitor/src/test/java/com/iluwatar/visitor/SoldierVisitorTest.java +++ b/visitor/src/test/java/com/iluwatar/visitor/SoldierVisitorTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; import java.util.Optional; diff --git a/visitor/src/test/java/com/iluwatar/visitor/StdOutTest.java b/visitor/src/test/java/com/iluwatar/visitor/StdOutTest.java index 2c54994bb..075f235f5 100644 --- a/visitor/src/test/java/com/iluwatar/visitor/StdOutTest.java +++ b/visitor/src/test/java/com/iluwatar/visitor/StdOutTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; import org.junit.After; diff --git a/visitor/src/test/java/com/iluwatar/visitor/UnitTest.java b/visitor/src/test/java/com/iluwatar/visitor/UnitTest.java index 291ab544a..cba91a7f6 100644 --- a/visitor/src/test/java/com/iluwatar/visitor/UnitTest.java +++ b/visitor/src/test/java/com/iluwatar/visitor/UnitTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; import org.junit.Test; diff --git a/visitor/src/test/java/com/iluwatar/visitor/VisitorTest.java b/visitor/src/test/java/com/iluwatar/visitor/VisitorTest.java index 7bd9f03c0..4a131bbf2 100644 --- a/visitor/src/test/java/com/iluwatar/visitor/VisitorTest.java +++ b/visitor/src/test/java/com/iluwatar/visitor/VisitorTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.visitor; import org.junit.Test; From cca40a543ab40c0de5f0d698944e155f2ff03daa Mon Sep 17 00:00:00 2001 From: JuhoKang Date: Thu, 28 Jan 2016 22:39:50 +0900 Subject: [PATCH 021/123] Added Code --- value-object/value-object/pom.xml | 6 ++ .../java/com/iluwatar/value/object/App.java | 13 ++- .../com/iluwatar/value/object/HeroStat.java | 91 +++++++++++++++++++ .../com/iluwatar/value/object/AppTest.java | 38 -------- .../iluwatar/value/object/HeroStatTest.java | 23 +++++ 5 files changed, 126 insertions(+), 45 deletions(-) create mode 100644 value-object/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java delete mode 100644 value-object/value-object/src/test/java/com/iluwatar/value/object/AppTest.java create mode 100644 value-object/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java diff --git a/value-object/value-object/pom.xml b/value-object/value-object/pom.xml index f70118bc3..35856e27a 100644 --- a/value-object/value-object/pom.xml +++ b/value-object/value-object/pom.xml @@ -10,6 +10,12 @@ value-object + + com.google.guava + guava-testlib + 19.0 + test + junit junit diff --git a/value-object/value-object/src/main/java/com/iluwatar/value/object/App.java b/value-object/value-object/src/main/java/com/iluwatar/value/object/App.java index ec30d22fc..8c3c56db2 100644 --- a/value-object/value-object/src/main/java/com/iluwatar/value/object/App.java +++ b/value-object/value-object/src/main/java/com/iluwatar/value/object/App.java @@ -1,13 +1,12 @@ package com.iluwatar.value.object; /** - * Hello world! + * Hello world!. * */ -public class App -{ - public static void main( String[] args ) - { - System.out.println( "Hello World!" ); - } +public class App { + public static void main(String[] args) { + HeroStat stat = HeroStat.valueOf(10, 5, 0); + System.out.println(stat.toString()); + } } diff --git a/value-object/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java b/value-object/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java new file mode 100644 index 000000000..b53b5c333 --- /dev/null +++ b/value-object/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java @@ -0,0 +1,91 @@ +package com.iluwatar.value.object; + +/** + * The Discount Coupon only discounts by percentage. + * + */ +public class HeroStat { + + + // stats for a hero + + private final int strength; + private final int intelligence; + private final int luck; + + + // All constructors must be private. + private HeroStat(int strength, int intelligence, int luck) { + super(); + this.strength = strength; + this.intelligence = intelligence; + this.luck = luck; + } + + public static HeroStat valueOf(int strength, int intelligence, int luck) { + return new HeroStat(strength, intelligence, luck); + } + + public int getStrength() { + return strength; + } + + public int getIntelligence() { + return intelligence; + } + + public int getLuck() { + return luck; + } + + /* + * recommended to provide a static factory method capable of creating an instance from the formal + * string representation declared like this. public static Juice parse(String string) {} + */ + + // toString, hashCode, equals + + @Override + public String toString() { + return "HeroStat [strength=" + strength + ", intelligence=" + intelligence + ", luck=" + luck + + "]"; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + intelligence; + result = prime * result + luck; + result = prime * result + strength; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + HeroStat other = (HeroStat) obj; + if (intelligence != other.intelligence) { + return false; + } + if (luck != other.luck) { + return false; + } + if (strength != other.strength) { + return false; + } + return true; + } + + + // the clone() method should not be public + +} diff --git a/value-object/value-object/src/test/java/com/iluwatar/value/object/AppTest.java b/value-object/value-object/src/test/java/com/iluwatar/value/object/AppTest.java deleted file mode 100644 index 4b614462c..000000000 --- a/value-object/value-object/src/test/java/com/iluwatar/value/object/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.iluwatar.value.object; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/value-object/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java b/value-object/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java new file mode 100644 index 000000000..a7c07d226 --- /dev/null +++ b/value-object/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java @@ -0,0 +1,23 @@ +package com.iluwatar.value.object; + +import com.google.common.testing.EqualsTester; + +import org.junit.Test; + +/** + * Unit test for HeroStat. + */ +public class HeroStatTest { + + /** + * Tester for equals() and hashCode() methods of a class. + * @see http://www.javadoc.io/doc/com.google.guava/guava-testlib/19.0 + */ + @Test + public void testEquals() { + HeroStat heroStatA = HeroStat.valueOf(3, 9, 2); + HeroStat heroStatB = HeroStat.valueOf(3, 9, 2); + new EqualsTester().addEqualityGroup(heroStatA, heroStatB).testEquals(); + } + +} From 083065ba93fd676aff02e1c0b1def10713d31c12 Mon Sep 17 00:00:00 2001 From: JuhoKang Date: Thu, 28 Jan 2016 23:33:46 +0900 Subject: [PATCH 022/123] Added index.md Added index.md with explanation which seems a little bit short of detail. Fixed the directory of the files. --- front-controller/index.md | 4 +-- value-object/etc/value-object.png | Bin 0 -> 5025 bytes value-object/etc/value-object.ucls | 19 ++++++++++ value-object/index.md | 34 ++++++++++++++++++ value-object/{value-object => }/pom.xml | 0 .../java/com/iluwatar/value/object/App.java | 0 .../com/iluwatar/value/object/HeroStat.java | 0 .../iluwatar/value/object/HeroStatTest.java | 0 8 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 value-object/etc/value-object.png create mode 100644 value-object/etc/value-object.ucls create mode 100644 value-object/index.md rename value-object/{value-object => }/pom.xml (100%) rename value-object/{value-object => }/src/main/java/com/iluwatar/value/object/App.java (100%) rename value-object/{value-object => }/src/main/java/com/iluwatar/value/object/HeroStat.java (100%) rename value-object/{value-object => }/src/test/java/com/iluwatar/value/object/HeroStatTest.java (100%) diff --git a/front-controller/index.md b/front-controller/index.md index a462a08e0..bc8f38d9f 100644 --- a/front-controller/index.md +++ b/front-controller/index.md @@ -3,14 +3,14 @@ layout: pattern title: Front Controller folder: front-controller permalink: /patterns/front-controller/ -categories: Presentation Tier +categories: Creational tags: - Java - Difficulty-Intermediate --- ## Intent -Introduce a common handler for all requests for a web site. This +Introduce how to create objects which follow value semantics rather than reference semantics. way we can encapsulate common functionality such as security, internationalization, routing and logging in a single place. diff --git a/value-object/etc/value-object.png b/value-object/etc/value-object.png new file mode 100644 index 0000000000000000000000000000000000000000..69a244c80691b8ac63ed5b732b8b0828c592a1f8 GIT binary patch literal 5025 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 literal 0 HcmV?d00001 diff --git a/value-object/etc/value-object.ucls b/value-object/etc/value-object.ucls new file mode 100644 index 000000000..7bbf5e47c --- /dev/null +++ b/value-object/etc/value-object.ucls @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/value-object/index.md b/value-object/index.md new file mode 100644 index 000000000..8645a2384 --- /dev/null +++ b/value-object/index.md @@ -0,0 +1,34 @@ +--- +layout: pattern +title: Value Object +folder: value-object +permalink: /patterns/value-object/ +categories: Creational +tags: + - Java + - Difficulty-Beginner +--- + +## Intent +Provide objects which follow value semantics rather than reference semantics. +This means value objects' equality are not based on identity. Two value objects are +equal when they have the same value, not necessarily being the same object. + +![alt text](./etc/value-object.png "Value Object") + +## Applicability +Use the Value Object when + +* you need to measure the objects' equality based on the objects' value + +## Real world examples + +* [java.util.Date](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html) +* [joda-time, money, beans](http://www.joda.org/) +* [JSR-310 / ThreeTen project LocalDate](http://www.threeten.org/articles/local-date.html) + +## Credits + +* [Patterns of Enterprise Application Architecture](http://www.martinfowler.com/books/eaa.html) +* [VALJOs - Value Java Objects : Stephen Colebourne's blog](http://blog.joda.org/2014/03/valjos-value-java-objects.html) +* [Value Object : Wikipedia](https://en.wikipedia.org/wiki/Value_object) diff --git a/value-object/value-object/pom.xml b/value-object/pom.xml similarity index 100% rename from value-object/value-object/pom.xml rename to value-object/pom.xml diff --git a/value-object/value-object/src/main/java/com/iluwatar/value/object/App.java b/value-object/src/main/java/com/iluwatar/value/object/App.java similarity index 100% rename from value-object/value-object/src/main/java/com/iluwatar/value/object/App.java rename to value-object/src/main/java/com/iluwatar/value/object/App.java diff --git a/value-object/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java b/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java similarity index 100% rename from value-object/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java rename to value-object/src/main/java/com/iluwatar/value/object/HeroStat.java diff --git a/value-object/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java b/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java similarity index 100% rename from value-object/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java rename to value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java From d3eb8a2ef257bae97a49d9c91f48e96eca6a1cb9 Mon Sep 17 00:00:00 2001 From: JuhoKang Date: Fri, 29 Jan 2016 00:53:27 +0900 Subject: [PATCH 023/123] Added comments in the code. modified index.md --- value-object/index.md | 4 ++-- .../java/com/iluwatar/value/object/App.java | 13 ++++++++--- .../com/iluwatar/value/object/HeroStat.java | 18 +++++++++++---- .../iluwatar/value/object/HeroStatTest.java | 23 +++++++++++++++++++ 4 files changed, 48 insertions(+), 10 deletions(-) diff --git a/value-object/index.md b/value-object/index.md index 8645a2384..83223d8a2 100644 --- a/value-object/index.md +++ b/value-object/index.md @@ -23,9 +23,9 @@ Use the Value Object when ## Real world examples -* [java.util.Date](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html) +* [java.util.Optional](https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html) +* [java.time.LocalDate](https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html) * [joda-time, money, beans](http://www.joda.org/) -* [JSR-310 / ThreeTen project LocalDate](http://www.threeten.org/articles/local-date.html) ## Credits diff --git a/value-object/src/main/java/com/iluwatar/value/object/App.java b/value-object/src/main/java/com/iluwatar/value/object/App.java index 8c3c56db2..da4c81812 100644 --- a/value-object/src/main/java/com/iluwatar/value/object/App.java +++ b/value-object/src/main/java/com/iluwatar/value/object/App.java @@ -1,12 +1,19 @@ package com.iluwatar.value.object; /** - * Hello world!. + * App Class. * */ public class App { + /** + * main method. + */ public static void main(String[] args) { - HeroStat stat = HeroStat.valueOf(10, 5, 0); - System.out.println(stat.toString()); + HeroStat statA = HeroStat.valueOf(10, 5, 0); + HeroStat statB = HeroStat.valueOf(5, 1, 8); + + System.out.println(statA.toString()); + // When using Value Objects do not use ==, only compare using equals(). + System.out.println("is statA and statB equal : " + statA.equals(statB)); } } diff --git a/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java b/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java index b53b5c333..efcbce7ea 100644 --- a/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java +++ b/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java @@ -1,13 +1,20 @@ package com.iluwatar.value.object; /** - * The Discount Coupon only discounts by percentage. - * + * HeroStat is a Value Object. following rules are from Stephen Colebourne's term VALJO(not the + * entire rule set) from : http://blog.joda.org/2014/03/valjos-value-java-objects.html
+ * Value Objects must override equals(), hashCode() to check the equality with values.
+ * Value Objects should be immutable so declare members final. Obtain instances by static factory + * methods.
+ * The elements of the state must be other values, including primitive types.
+ * Provide methods, typically simple getters, to get the elements of the state.
+ * + * {@link http://docs.oracle.com/javase/8/docs/api/java/lang/doc-files/ValueBased.html} */ public class HeroStat { - // stats for a hero + // Stats for a hero private final int strength; private final int intelligence; @@ -22,6 +29,7 @@ public class HeroStat { this.luck = luck; } + // Static factory method to create new instances. public static HeroStat valueOf(int strength, int intelligence, int luck) { return new HeroStat(strength, intelligence, luck); } @@ -39,7 +47,7 @@ public class HeroStat { } /* - * recommended to provide a static factory method capable of creating an instance from the formal + * Recommended to provide a static factory method capable of creating an instance from the formal * string representation declared like this. public static Juice parse(String string) {} */ @@ -86,6 +94,6 @@ public class HeroStat { } - // the clone() method should not be public + // The clone() method should not be public } diff --git a/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java b/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java index a7c07d226..f8785e538 100644 --- a/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java +++ b/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java @@ -1,5 +1,10 @@ package com.iluwatar.value.object; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; + +import static org.junit.Assert.assertThat; + import com.google.common.testing.EqualsTester; import org.junit.Test; @@ -11,6 +16,7 @@ public class HeroStatTest { /** * Tester for equals() and hashCode() methods of a class. + * * @see http://www.javadoc.io/doc/com.google.guava/guava-testlib/19.0 */ @Test @@ -20,4 +26,21 @@ public class HeroStatTest { new EqualsTester().addEqualityGroup(heroStatA, heroStatB).testEquals(); } + /** + * The toString() for two equal values must be the same. For two non-equal values it must be + * different. + */ + @Test + public void testToString() { + + HeroStat heroStatA = HeroStat.valueOf(3, 9, 2); + HeroStat heroStatB = HeroStat.valueOf(3, 9, 2); + HeroStat heroStatC = HeroStat.valueOf(3, 9, 8); + + assertThat(heroStatA.toString(), is(heroStatB.toString())); + assertThat(heroStatA.toString(), is(not(heroStatC.toString()))); + + + } + } From 98326a1e5e27d112f91949bcdfede5ecfda40704 Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Thu, 28 Jan 2016 21:14:40 +0000 Subject: [PATCH 024/123] #354 Start Adding Java docs --- .../com/iluwatar/featuretoggle/user/User.java | 12 ++++++++++++ .../iluwatar/featuretoggle/user/UserGroup.java | 15 ++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java index 12b4cc06e..70b241389 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java @@ -1,13 +1,25 @@ package com.iluwatar.featuretoggle.user; +/** + * Used to demonstrate the purpose of the feature toggle. This class actually has nothing to do with the pattern. + */ public class User { private String name; + /** + * Default Constructor setting the username. + * + * @param name {@link String} to represent the name of the user. + */ public User(String name) { this.name = name; } + /** + * {@inheritDoc} + * @return The {@link String} representation of the User, in this case just return the name of the user. + */ @Override public String toString() { return name; diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java index d3052ac21..fec972eb1 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java @@ -4,7 +4,10 @@ import java.util.ArrayList; import java.util.List; /** - * Contains the lists of users of different groups paid and free + * Contains the lists of users of different groups paid and free. Used to demonstrate the tiered example of feature + * toggle. Allowing certain features to be available to only certain groups of users. + * + * @see User */ public class UserGroup { @@ -13,10 +16,13 @@ public class UserGroup { /** + * Add the passed {@link User} to the free user group list. * * @param user {@link User} to be added to the free group + * @throws IllegalArgumentException + * @see User */ - public static void addUserToFreeGroup(final User user) { + public static void addUserToFreeGroup(final User user) throws IllegalArgumentException { if (paidGroup.contains(user)) { throw new IllegalArgumentException("User all ready member of paid group."); } else { @@ -27,10 +33,13 @@ public class UserGroup { } /** + * Add the passed {@link User} to the paid user group list. * * @param user {@link User} to be added to the paid group + * @throws IllegalArgumentException + * @see User */ - public static void addUserToPaidGroup(final User user) { + public static void addUserToPaidGroup(final User user) throws IllegalArgumentException { if (freeGroup.contains(user)) { throw new IllegalArgumentException("User all ready member of free group."); } else { From 409ff027b8d7161b2a724a68bd1dc69343c2ac68 Mon Sep 17 00:00:00 2001 From: Mohammed Ezzat Date: Fri, 29 Jan 2016 07:33:34 +0200 Subject: [PATCH 025/123] squid:S2293 - The diamond operator should be used --- caching/src/main/java/com/iluwatar/caching/DbManager.java | 2 +- caching/src/main/java/com/iluwatar/caching/LruCache.java | 4 ++-- .../src/main/java/com/iluwatar/composite/LetterComposite.java | 2 +- composite/src/main/java/com/iluwatar/composite/Messenger.java | 4 ++-- dao/src/main/java/com/iluwatar/dao/App.java | 2 +- dao/src/test/java/com/iluwatar/dao/CustomerDaoImplTest.java | 2 +- .../main/java/com/iluwatar/layers/CakeBakingServiceImpl.java | 2 +- .../java/com/iluwatar/poison/pill/SimpleMessageQueue.java | 2 +- .../main/java/com/iluwatar/producer/consumer/ItemQueue.java | 2 +- .../com/iluwatar/servicelayer/magic/MagicServiceImpl.java | 4 ++-- .../java/com/iluwatar/servicelayer/spellbook/Spellbook.java | 4 ++-- .../main/java/com/iluwatar/servicelayer/wizard/Wizard.java | 2 +- .../main/java/com/iluwatar/servicelocator/ServiceCache.java | 2 +- 13 files changed, 17 insertions(+), 17 deletions(-) diff --git a/caching/src/main/java/com/iluwatar/caching/DbManager.java b/caching/src/main/java/com/iluwatar/caching/DbManager.java index bfde07103..b259b5b33 100644 --- a/caching/src/main/java/com/iluwatar/caching/DbManager.java +++ b/caching/src/main/java/com/iluwatar/caching/DbManager.java @@ -37,7 +37,7 @@ public class DbManager { */ public static void createVirtualDb() { useMongoDB = false; - virtualDB = new HashMap(); + virtualDB = new HashMap<>(); } /** diff --git a/caching/src/main/java/com/iluwatar/caching/LruCache.java b/caching/src/main/java/com/iluwatar/caching/LruCache.java index e20275a40..b9454744b 100644 --- a/caching/src/main/java/com/iluwatar/caching/LruCache.java +++ b/caching/src/main/java/com/iluwatar/caching/LruCache.java @@ -27,7 +27,7 @@ public class LruCache { } int capacity; - HashMap cache = new HashMap(); + HashMap cache = new HashMap<>(); Node head = null; Node end = null; @@ -140,7 +140,7 @@ public class LruCache { * Returns cache data in list form. */ public ArrayList getCacheDataInListForm() { - ArrayList listOfCacheData = new ArrayList(); + ArrayList listOfCacheData = new ArrayList<>(); Node temp = head; while (temp != null) { listOfCacheData.add(temp.userAccount); diff --git a/composite/src/main/java/com/iluwatar/composite/LetterComposite.java b/composite/src/main/java/com/iluwatar/composite/LetterComposite.java index 39655fa37..e0a406337 100644 --- a/composite/src/main/java/com/iluwatar/composite/LetterComposite.java +++ b/composite/src/main/java/com/iluwatar/composite/LetterComposite.java @@ -10,7 +10,7 @@ import java.util.List; */ public abstract class LetterComposite { - private List children = new ArrayList(); + private List children = new ArrayList<>(); public void add(LetterComposite letter) { children.add(letter); diff --git a/composite/src/main/java/com/iluwatar/composite/Messenger.java b/composite/src/main/java/com/iluwatar/composite/Messenger.java index 37fa84bc2..e0efcc63d 100644 --- a/composite/src/main/java/com/iluwatar/composite/Messenger.java +++ b/composite/src/main/java/com/iluwatar/composite/Messenger.java @@ -13,7 +13,7 @@ public class Messenger { LetterComposite messageFromOrcs() { - List words = new ArrayList(); + List words = new ArrayList<>(); words.add(new Word(Arrays.asList(new Letter('W'), new Letter('h'), new Letter('e'), new Letter( 'r'), new Letter('e')))); @@ -35,7 +35,7 @@ public class Messenger { LetterComposite messageFromElves() { - List words = new ArrayList(); + List words = new ArrayList<>(); words.add(new Word(Arrays.asList(new Letter('M'), new Letter('u'), new Letter('c'), new Letter( 'h')))); diff --git a/dao/src/main/java/com/iluwatar/dao/App.java b/dao/src/main/java/com/iluwatar/dao/App.java index a9351689d..5fe9a52d7 100644 --- a/dao/src/main/java/com/iluwatar/dao/App.java +++ b/dao/src/main/java/com/iluwatar/dao/App.java @@ -52,7 +52,7 @@ public class App { final Customer customer1 = new Customer(1, "Adam", "Adamson"); final Customer customer2 = new Customer(2, "Bob", "Bobson"); final Customer customer3 = new Customer(3, "Carl", "Carlson"); - final List customers = new ArrayList(); + final List customers = new ArrayList<>(); customers.add(customer1); customers.add(customer2); customers.add(customer3); diff --git a/dao/src/test/java/com/iluwatar/dao/CustomerDaoImplTest.java b/dao/src/test/java/com/iluwatar/dao/CustomerDaoImplTest.java index 245efb505..652bae3e3 100644 --- a/dao/src/test/java/com/iluwatar/dao/CustomerDaoImplTest.java +++ b/dao/src/test/java/com/iluwatar/dao/CustomerDaoImplTest.java @@ -18,7 +18,7 @@ public class CustomerDaoImplTest { @Before public void setUp() { - customers = new ArrayList(); + customers = new ArrayList<>(); customers.add(CUSTOMER); impl = new CustomerDaoImpl(customers); } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java b/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java index 79917842d..ed2aa19f0 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java @@ -141,7 +141,7 @@ public class CakeBakingServiceImpl implements CakeBakingService { CakeToppingInfo cakeToppingInfo = new CakeToppingInfo(cake.getTopping().getId(), cake.getTopping().getName(), cake .getTopping().getCalories()); - ArrayList cakeLayerInfos = new ArrayList(); + ArrayList cakeLayerInfos = new ArrayList<>(); for (CakeLayer layer : cake.getLayers()) { cakeLayerInfos.add(new CakeLayerInfo(layer.getId(), layer.getName(), layer.getCalories())); } diff --git a/poison-pill/src/main/java/com/iluwatar/poison/pill/SimpleMessageQueue.java b/poison-pill/src/main/java/com/iluwatar/poison/pill/SimpleMessageQueue.java index dd0b3ed0a..5c8d3a7b0 100644 --- a/poison-pill/src/main/java/com/iluwatar/poison/pill/SimpleMessageQueue.java +++ b/poison-pill/src/main/java/com/iluwatar/poison/pill/SimpleMessageQueue.java @@ -11,7 +11,7 @@ public class SimpleMessageQueue implements MessageQueue { private final BlockingQueue queue; public SimpleMessageQueue(int bound) { - queue = new ArrayBlockingQueue(bound); + queue = new ArrayBlockingQueue<>(bound); } @Override diff --git a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/ItemQueue.java b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/ItemQueue.java index 8d41fb456..cd87f049e 100644 --- a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/ItemQueue.java +++ b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/ItemQueue.java @@ -11,7 +11,7 @@ public class ItemQueue { public ItemQueue() { - queue = new LinkedBlockingQueue(5); + queue = new LinkedBlockingQueue<>(5); } public void put(Item item) throws InterruptedException { diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/magic/MagicServiceImpl.java b/service-layer/src/main/java/com/iluwatar/servicelayer/magic/MagicServiceImpl.java index cda3fe58d..ed24fea9d 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/magic/MagicServiceImpl.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/magic/MagicServiceImpl.java @@ -48,13 +48,13 @@ public class MagicServiceImpl implements MagicService { @Override public List findWizardsWithSpellbook(String name) { Spellbook spellbook = spellbookDao.findByName(name); - return new ArrayList(spellbook.getWizards()); + return new ArrayList<>(spellbook.getWizards()); } @Override public List findWizardsWithSpell(String name) { Spell spell = spellDao.findByName(name); Spellbook spellbook = spell.getSpellbook(); - return new ArrayList(spellbook.getWizards()); + return new ArrayList<>(spellbook.getWizards()); } } diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/Spellbook.java b/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/Spellbook.java index 165dcdc22..4f910ee40 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/Spellbook.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/Spellbook.java @@ -27,8 +27,8 @@ import com.iluwatar.servicelayer.wizard.Wizard; public class Spellbook extends BaseEntity { public Spellbook() { - spells = new HashSet(); - wizards = new HashSet(); + spells = new HashSet<>(); + wizards = new HashSet<>(); } public Spellbook(String name) { diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/Wizard.java b/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/Wizard.java index bfe8e46af..23f2f0aec 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/Wizard.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/Wizard.java @@ -24,7 +24,7 @@ import com.iluwatar.servicelayer.spellbook.Spellbook; public class Wizard extends BaseEntity { public Wizard() { - spellbooks = new HashSet(); + spellbooks = new HashSet<>(); } public Wizard(String name) { diff --git a/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceCache.java b/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceCache.java index 0a44a5d7f..57c841a3a 100644 --- a/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceCache.java +++ b/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceCache.java @@ -16,7 +16,7 @@ public class ServiceCache { private final Map serviceCache; public ServiceCache() { - serviceCache = new HashMap(); + serviceCache = new HashMap<>(); } /** From 59c32d3937158be4362bf954714bbbe149a59161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sun, 31 Jan 2016 11:38:41 +0200 Subject: [PATCH 026/123] Add tests that run the examples --- .../abstractfactory/AbstractFactoryTest.java | 100 ++++++++++++++++++ .../com/iluwatar/abstractfactory/AppTest.java | 78 ++------------ .../java/com/iluwatar/adapter/AppTest.java | 38 +++++++ .../iluwatar/business/delegate/AppTest.java | 38 +++++++ .../java/com/iluwatar/caching/AppTest.java | 37 ++----- .../com/iluwatar/caching/CachingTest.java | 63 +++++++++++ .../java/com/iluwatar/callback/AppTest.java | 51 +-------- .../com/iluwatar/callback/CallbackTest.java | 79 ++++++++++++++ .../java/com/iluwatar/command/AppTest.java | 38 +++++++ .../test/java/com/iluwatar/dao/AppTest.java | 38 +++++++ .../test/java/com/iluwatar/eda/AppTest.java | 38 +++++++ .../com/iluwatar/factory/method/AppTest.java | 38 +++++++ .../app/{AppTest.java => ReactorTest.java} | 2 +- .../java/com/iluwatar/repository/AppTest.java | 38 +++++++ 14 files changed, 528 insertions(+), 148 deletions(-) create mode 100644 abstract-factory/src/test/java/com/iluwatar/abstractfactory/AbstractFactoryTest.java create mode 100644 adapter/src/test/java/com/iluwatar/adapter/AppTest.java create mode 100644 business-delegate/src/test/java/com/iluwatar/business/delegate/AppTest.java create mode 100644 caching/src/test/java/com/iluwatar/caching/CachingTest.java create mode 100644 callback/src/test/java/com/iluwatar/callback/CallbackTest.java create mode 100644 command/src/test/java/com/iluwatar/command/AppTest.java create mode 100644 dao/src/test/java/com/iluwatar/dao/AppTest.java create mode 100644 event-driven-architecture/src/test/java/com/iluwatar/eda/AppTest.java create mode 100644 factory-method/src/test/java/com/iluwatar/factory/method/AppTest.java rename reactor/src/test/java/com/iluwatar/reactor/app/{AppTest.java => ReactorTest.java} (99%) create mode 100644 repository/src/test/java/com/iluwatar/repository/AppTest.java diff --git a/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AbstractFactoryTest.java b/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AbstractFactoryTest.java new file mode 100644 index 000000000..5eb083deb --- /dev/null +++ b/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AbstractFactoryTest.java @@ -0,0 +1,100 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.abstractfactory; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Test; + +public class AbstractFactoryTest { + + private App app = new App(); + private KingdomFactory elfFactory; + private KingdomFactory orcFactory; + + @Before + public void setUp() { + elfFactory = app.getElfKingdomFactory(); + orcFactory = app.getOrcKingdomFactory(); + } + + @Test + public void king() { + final King elfKing = app.getKing(elfFactory); + assertTrue(elfKing instanceof ElfKing); + assertEquals(ElfKing.DESCRIPTION, elfKing.getDescription()); + final King orcKing = app.getKing(orcFactory); + assertTrue(orcKing instanceof OrcKing); + assertEquals(OrcKing.DESCRIPTION, orcKing.getDescription()); + } + + @Test + public void castle() { + final Castle elfCastle = app.getCastle(elfFactory); + assertTrue(elfCastle instanceof ElfCastle); + assertEquals(ElfCastle.DESCRIPTION, elfCastle.getDescription()); + final Castle orcCastle = app.getCastle(orcFactory); + assertTrue(orcCastle instanceof OrcCastle); + assertEquals(OrcCastle.DESCRIPTION, orcCastle.getDescription()); + } + + @Test + public void army() { + final Army elfArmy = app.getArmy(elfFactory); + assertTrue(elfArmy instanceof ElfArmy); + assertEquals(ElfArmy.DESCRIPTION, elfArmy.getDescription()); + final Army orcArmy = app.getArmy(orcFactory); + assertTrue(orcArmy instanceof OrcArmy); + assertEquals(OrcArmy.DESCRIPTION, orcArmy.getDescription()); + } + + @Test + public void createElfKingdom() { + app.createKingdom(elfFactory); + final King king = app.getKing(); + final Castle castle = app.getCastle(); + final Army army = app.getArmy(); + assertTrue(king instanceof ElfKing); + assertEquals(ElfKing.DESCRIPTION, king.getDescription()); + assertTrue(castle instanceof ElfCastle); + assertEquals(ElfCastle.DESCRIPTION, castle.getDescription()); + assertTrue(army instanceof ElfArmy); + assertEquals(ElfArmy.DESCRIPTION, army.getDescription()); + } + + @Test + public void createOrcKingdom() { + app.createKingdom(orcFactory); + final King king = app.getKing(); + final Castle castle = app.getCastle(); + final Army army = app.getArmy(); + assertTrue(king instanceof OrcKing); + assertEquals(OrcKing.DESCRIPTION, king.getDescription()); + assertTrue(castle instanceof OrcCastle); + assertEquals(OrcCastle.DESCRIPTION, castle.getDescription()); + assertTrue(army instanceof OrcArmy); + assertEquals(OrcArmy.DESCRIPTION, army.getDescription()); + } +} diff --git a/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java b/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java index 0270f4cef..a965284f7 100644 --- a/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java +++ b/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java @@ -22,79 +22,17 @@ */ package com.iluwatar.abstractfactory; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import org.junit.Before; import org.junit.Test; +import java.io.IOException; + +/** + * Tests that Abstract Factory example runs without errors. + */ public class AppTest { - - private App app = new App(); - private KingdomFactory elfFactory; - private KingdomFactory orcFactory; - - @Before - public void setUp() { - elfFactory = app.getElfKingdomFactory(); - orcFactory = app.getOrcKingdomFactory(); - } - @Test - public void king() { - final King elfKing = app.getKing(elfFactory); - assertTrue(elfKing instanceof ElfKing); - assertEquals(ElfKing.DESCRIPTION, elfKing.getDescription()); - final King orcKing = app.getKing(orcFactory); - assertTrue(orcKing instanceof OrcKing); - assertEquals(OrcKing.DESCRIPTION, orcKing.getDescription()); - } - - @Test - public void castle() { - final Castle elfCastle = app.getCastle(elfFactory); - assertTrue(elfCastle instanceof ElfCastle); - assertEquals(ElfCastle.DESCRIPTION, elfCastle.getDescription()); - final Castle orcCastle = app.getCastle(orcFactory); - assertTrue(orcCastle instanceof OrcCastle); - assertEquals(OrcCastle.DESCRIPTION, orcCastle.getDescription()); - } - - @Test - public void army() { - final Army elfArmy = app.getArmy(elfFactory); - assertTrue(elfArmy instanceof ElfArmy); - assertEquals(ElfArmy.DESCRIPTION, elfArmy.getDescription()); - final Army orcArmy = app.getArmy(orcFactory); - assertTrue(orcArmy instanceof OrcArmy); - assertEquals(OrcArmy.DESCRIPTION, orcArmy.getDescription()); - } - - @Test - public void createElfKingdom() { - app.createKingdom(elfFactory); - final King king = app.getKing(); - final Castle castle = app.getCastle(); - final Army army = app.getArmy(); - assertTrue(king instanceof ElfKing); - assertEquals(ElfKing.DESCRIPTION, king.getDescription()); - assertTrue(castle instanceof ElfCastle); - assertEquals(ElfCastle.DESCRIPTION, castle.getDescription()); - assertTrue(army instanceof ElfArmy); - assertEquals(ElfArmy.DESCRIPTION, army.getDescription()); - } - - @Test - public void createOrcKingdom() { - app.createKingdom(orcFactory); - final King king = app.getKing(); - final Castle castle = app.getCastle(); - final Army army = app.getArmy(); - assertTrue(king instanceof OrcKing); - assertEquals(OrcKing.DESCRIPTION, king.getDescription()); - assertTrue(castle instanceof OrcCastle); - assertEquals(OrcCastle.DESCRIPTION, castle.getDescription()); - assertTrue(army instanceof OrcArmy); - assertEquals(OrcArmy.DESCRIPTION, army.getDescription()); + public void test() throws IOException { + String[] args = {}; + App.main(args); } } diff --git a/adapter/src/test/java/com/iluwatar/adapter/AppTest.java b/adapter/src/test/java/com/iluwatar/adapter/AppTest.java new file mode 100644 index 000000000..4f5fcd91d --- /dev/null +++ b/adapter/src/test/java/com/iluwatar/adapter/AppTest.java @@ -0,0 +1,38 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.adapter; + +import org.junit.Test; + +import java.io.IOException; + +/** + * Tests that Adapter example runs without errors. + */ +public class AppTest { + @Test + public void test() throws IOException { + String[] args = {}; + App.main(args); + } +} diff --git a/business-delegate/src/test/java/com/iluwatar/business/delegate/AppTest.java b/business-delegate/src/test/java/com/iluwatar/business/delegate/AppTest.java new file mode 100644 index 000000000..1767b7ac5 --- /dev/null +++ b/business-delegate/src/test/java/com/iluwatar/business/delegate/AppTest.java @@ -0,0 +1,38 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.business.delegate; + +import org.junit.Test; + +import java.io.IOException; + +/** + * Tests that Business Delegate example runs without errors. + */ +public class AppTest { + @Test + public void test() throws IOException { + String[] args = {}; + App.main(args); + } +} diff --git a/caching/src/test/java/com/iluwatar/caching/AppTest.java b/caching/src/test/java/com/iluwatar/caching/AppTest.java index d2b6a393c..90ed1c275 100644 --- a/caching/src/test/java/com/iluwatar/caching/AppTest.java +++ b/caching/src/test/java/com/iluwatar/caching/AppTest.java @@ -22,42 +22,17 @@ */ package com.iluwatar.caching; -import org.junit.Before; import org.junit.Test; +import java.io.IOException; + /** - * - * Application test - * + * Tests that Caching example runs without errors. */ public class AppTest { - App app; - - /** - * Setup of application test includes: initializing DB connection and cache size/capacity. - */ - @Before - public void setUp() { - AppManager.initDb(false); // VirtualDB (instead of MongoDB) was used in running the JUnit tests - // to avoid Maven compilation errors. Set flag to true to run the - // tests with MongoDB (provided that MongoDB is installed and socket - // connection is open). - AppManager.initCacheCapacity(3); - app = new App(); - } - @Test - public void testReadAndWriteThroughStrategy() { - app.useReadAndWriteThroughStrategy(); - } - - @Test - public void testReadThroughAndWriteAroundStrategy() { - app.useReadThroughAndWriteAroundStrategy(); - } - - @Test - public void testReadThroughAndWriteBehindStrategy() { - app.useReadThroughAndWriteBehindStrategy(); + public void test() throws IOException { + String[] args = {}; + App.main(args); } } diff --git a/caching/src/test/java/com/iluwatar/caching/CachingTest.java b/caching/src/test/java/com/iluwatar/caching/CachingTest.java new file mode 100644 index 000000000..19262a3b6 --- /dev/null +++ b/caching/src/test/java/com/iluwatar/caching/CachingTest.java @@ -0,0 +1,63 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.caching; + +import org.junit.Before; +import org.junit.Test; + +/** + * + * Application test + * + */ +public class CachingTest { + App app; + + /** + * Setup of application test includes: initializing DB connection and cache size/capacity. + */ + @Before + public void setUp() { + AppManager.initDb(false); // VirtualDB (instead of MongoDB) was used in running the JUnit tests + // to avoid Maven compilation errors. Set flag to true to run the + // tests with MongoDB (provided that MongoDB is installed and socket + // connection is open). + AppManager.initCacheCapacity(3); + app = new App(); + } + + @Test + public void testReadAndWriteThroughStrategy() { + app.useReadAndWriteThroughStrategy(); + } + + @Test + public void testReadThroughAndWriteAroundStrategy() { + app.useReadThroughAndWriteAroundStrategy(); + } + + @Test + public void testReadThroughAndWriteBehindStrategy() { + app.useReadThroughAndWriteBehindStrategy(); + } +} diff --git a/callback/src/test/java/com/iluwatar/callback/AppTest.java b/callback/src/test/java/com/iluwatar/callback/AppTest.java index f5ef1504c..b7ab3fe75 100644 --- a/callback/src/test/java/com/iluwatar/callback/AppTest.java +++ b/callback/src/test/java/com/iluwatar/callback/AppTest.java @@ -24,56 +24,15 @@ package com.iluwatar.callback; import org.junit.Test; -import static org.junit.Assert.assertEquals; +import java.io.IOException; /** - * Add a field as a counter. Every time the callback method is called increment this field. Unit - * test checks that the field is being incremented. - * - * Could be done with mock objects as well where the call method call is verified. + * Tests that Callback example runs without errors. */ public class AppTest { - - private Integer callingCount = 0; - @Test - public void test() { - Callback callback = new Callback() { - @Override - public void call() { - callingCount++; - } - }; - - Task task = new SimpleTask(); - - assertEquals("Initial calling count of 0", new Integer(0), callingCount); - - task.executeWith(callback); - - assertEquals("Callback called once", new Integer(1), callingCount); - - task.executeWith(callback); - - assertEquals("Callback called twice", new Integer(2), callingCount); - - } - - @Test - public void testWithLambdasExample() { - Callback callback = () -> callingCount++; - - Task task = new SimpleTask(); - - assertEquals("Initial calling count of 0", new Integer(0), callingCount); - - task.executeWith(callback); - - assertEquals("Callback called once", new Integer(1), callingCount); - - task.executeWith(callback); - - assertEquals("Callback called twice", new Integer(2), callingCount); - + public void test() throws IOException { + String[] args = {}; + App.main(args); } } diff --git a/callback/src/test/java/com/iluwatar/callback/CallbackTest.java b/callback/src/test/java/com/iluwatar/callback/CallbackTest.java new file mode 100644 index 000000000..b48ac36ff --- /dev/null +++ b/callback/src/test/java/com/iluwatar/callback/CallbackTest.java @@ -0,0 +1,79 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.callback; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +/** + * Add a field as a counter. Every time the callback method is called increment this field. Unit + * test checks that the field is being incremented. + * + * Could be done with mock objects as well where the call method call is verified. + */ +public class CallbackTest { + + private Integer callingCount = 0; + + @Test + public void test() { + Callback callback = new Callback() { + @Override + public void call() { + callingCount++; + } + }; + + Task task = new SimpleTask(); + + assertEquals("Initial calling count of 0", new Integer(0), callingCount); + + task.executeWith(callback); + + assertEquals("Callback called once", new Integer(1), callingCount); + + task.executeWith(callback); + + assertEquals("Callback called twice", new Integer(2), callingCount); + + } + + @Test + public void testWithLambdasExample() { + Callback callback = () -> callingCount++; + + Task task = new SimpleTask(); + + assertEquals("Initial calling count of 0", new Integer(0), callingCount); + + task.executeWith(callback); + + assertEquals("Callback called once", new Integer(1), callingCount); + + task.executeWith(callback); + + assertEquals("Callback called twice", new Integer(2), callingCount); + + } +} diff --git a/command/src/test/java/com/iluwatar/command/AppTest.java b/command/src/test/java/com/iluwatar/command/AppTest.java new file mode 100644 index 000000000..560594272 --- /dev/null +++ b/command/src/test/java/com/iluwatar/command/AppTest.java @@ -0,0 +1,38 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.command; + +import org.junit.Test; + +import java.io.IOException; + +/** + * Tests that Command example runs without errors. + */ +public class AppTest { + @Test + public void test() throws IOException { + String[] args = {}; + App.main(args); + } +} diff --git a/dao/src/test/java/com/iluwatar/dao/AppTest.java b/dao/src/test/java/com/iluwatar/dao/AppTest.java new file mode 100644 index 000000000..b4caa54b4 --- /dev/null +++ b/dao/src/test/java/com/iluwatar/dao/AppTest.java @@ -0,0 +1,38 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.dao; + +import org.junit.Test; + +import java.io.IOException; + +/** + * Tests that DAO example runs without errors. + */ +public class AppTest { + @Test + public void test() throws IOException { + String[] args = {}; + App.main(args); + } +} diff --git a/event-driven-architecture/src/test/java/com/iluwatar/eda/AppTest.java b/event-driven-architecture/src/test/java/com/iluwatar/eda/AppTest.java new file mode 100644 index 000000000..603d0a61b --- /dev/null +++ b/event-driven-architecture/src/test/java/com/iluwatar/eda/AppTest.java @@ -0,0 +1,38 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.eda; + +import org.junit.Test; + +import java.io.IOException; + +/** + * Tests that Event Driven Architecture example runs without errors. + */ +public class AppTest { + @Test + public void test() throws IOException { + String[] args = {}; + App.main(args); + } +} diff --git a/factory-method/src/test/java/com/iluwatar/factory/method/AppTest.java b/factory-method/src/test/java/com/iluwatar/factory/method/AppTest.java new file mode 100644 index 000000000..818ee96cd --- /dev/null +++ b/factory-method/src/test/java/com/iluwatar/factory/method/AppTest.java @@ -0,0 +1,38 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.factory.method; + +import org.junit.Test; + +import java.io.IOException; + +/** + * Tests that Factory Method example runs without errors. + */ +public class AppTest { + @Test + public void test() throws IOException { + String[] args = {}; + App.main(args); + } +} diff --git a/reactor/src/test/java/com/iluwatar/reactor/app/AppTest.java b/reactor/src/test/java/com/iluwatar/reactor/app/ReactorTest.java similarity index 99% rename from reactor/src/test/java/com/iluwatar/reactor/app/AppTest.java rename to reactor/src/test/java/com/iluwatar/reactor/app/ReactorTest.java index 25d43d781..1ec70f87f 100644 --- a/reactor/src/test/java/com/iluwatar/reactor/app/AppTest.java +++ b/reactor/src/test/java/com/iluwatar/reactor/app/ReactorTest.java @@ -34,7 +34,7 @@ import com.iluwatar.reactor.framework.ThreadPoolDispatcher; * This class tests the Distributed Logging service by starting a Reactor and then sending it * concurrent logging requests using multiple clients. */ -public class AppTest { +public class ReactorTest { /** * Test the application using pooled thread dispatcher. diff --git a/repository/src/test/java/com/iluwatar/repository/AppTest.java b/repository/src/test/java/com/iluwatar/repository/AppTest.java new file mode 100644 index 000000000..e1fc27bef --- /dev/null +++ b/repository/src/test/java/com/iluwatar/repository/AppTest.java @@ -0,0 +1,38 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.repository; + +import org.junit.Test; + +import java.io.IOException; + +/** + * Tests that Repository example runs without errors. + */ +public class AppTest { + @Test + public void test() throws IOException { + String[] args = {}; + App.main(args); + } +} From c2e750aca1fa5669a8eb7b354784b881ad7bd20c Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Sun, 31 Jan 2016 13:46:34 +0000 Subject: [PATCH 027/123] #354 finished method javadocs --- .../featuretoggle/pattern/Service.java | 22 ++++++++++++++- .../PropertiesFeatureToggleVersion.java | 27 +++++++++++++++++++ .../TieredFeatureToggleVersion.java | 21 +++++++++++++++ .../featuretoggle/user/UserGroup.java | 11 ++++++-- 4 files changed, 78 insertions(+), 3 deletions(-) diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java index c3849a45f..970780714 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java @@ -2,11 +2,31 @@ package com.iluwatar.featuretoggle.pattern; import com.iluwatar.featuretoggle.user.User; - +/** + * Simple interfaces to allow the calling of the method to generate the welcome message for a given user. While there is + * a helper method to gather the the status of the feature toggle. In some cases there is no need for the + * {@link Service#isEnhanced()} in {@link com.iluwatar.featuretoggle.pattern.tieredversion.TieredFeatureToggleVersion} + * where the toggle is determined by the actual {@link User}. + * + * @see com.iluwatar.featuretoggle.pattern.propertiesversion.PropertiesFeatureToggleVersion + * @see com.iluwatar.featuretoggle.pattern.tieredversion.TieredFeatureToggleVersion + * @see User + */ public interface Service { + /** + * Generates a welcome message for the passed user. + * + * @param user the {@link User} to be used if the message is to be personalised. + * @return Generated {@link String} welcome message + */ String getWelcomeMessage(User user); + /** + * Returns if the welcome message to be displayed will be the enhanced version. + * + * @return Boolean {@value true} if enhanced. + */ boolean isEnhanced(); } diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java index aa795b975..947efec6a 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java @@ -5,13 +5,21 @@ import com.iluwatar.featuretoggle.user.User; import java.util.Properties; +/** + * + */ public class PropertiesFeatureToggleVersion implements Service { private boolean isEnhanced; /** + * Creates an instance of {@link PropertiesFeatureToggleVersion} using the passed {@link Properties} to determine, + * the status of the feature toggle {@link PropertiesFeatureToggleVersion#isEnhanced()}. There is also some defensive + * code to ensure the {@link Properties} passed are as expected. * * @param properties {@link Properties} used to configure the service and toggle features. + * @throws IllegalArgumentException when the passed {@link Properties} is not as expected + * @see Properties */ public PropertiesFeatureToggleVersion(final Properties properties) { if (properties == null) { @@ -25,6 +33,18 @@ public class PropertiesFeatureToggleVersion implements Service { } } + /** + * Generate a welcome message based on the user being passed and the status of the feature toggle. If the enhanced + * version is enabled, then the message will be personalised with the name of the passed {@link User}. However if + * disabled then a generic version fo the message is returned. + * + * @param user the {@link User} to be displayed in the message if the enhanced version is enabled see + * {@link PropertiesFeatureToggleVersion#isEnhanced()}. If the enhanced version is enabled, then the + * message will be personalised with the name of the passed {@link User}. However if disabled then a + * generic version fo the message is returned. + * @return Resulting welcome message. + * @see User + */ @Override public String getWelcomeMessage(final User user) { @@ -35,6 +55,13 @@ public class PropertiesFeatureToggleVersion implements Service { return "Welcome to the application."; } + /** + * Method that checks if the welcome message to be returned is the enhanced venison or not. For this service it will + * see the value of the boolean that was set in the constructor + * {@link PropertiesFeatureToggleVersion#PropertiesFeatureToggleVersion(Properties)} + * + * @return Boolean value {@value true} if enhanced. + */ @Override public boolean isEnhanced() { return isEnhanced; diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java index 2942618f1..a011b7b61 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java @@ -4,8 +4,22 @@ import com.iluwatar.featuretoggle.pattern.Service; import com.iluwatar.featuretoggle.user.User; import com.iluwatar.featuretoggle.user.UserGroup; +/** + * + */ public class TieredFeatureToggleVersion implements Service { + /** + * Generates a welcome message from the passed {@link User}. The resulting message depends on the group of the + * {@link User}. So if the {@link User} is in the {@link UserGroup#paidGroup} then the enhanced version of the + * welcome message will be returned where the username is displayed. + * + * @param user the {@link User} to generate the welcome message for, different messages are displayed if the user is + * in the {@link UserGroup#isPaid(User)} or {@link UserGroup#freeGroup} + * @return Resulting welcome message. + * @see User + * @see UserGroup + */ @Override public String getWelcomeMessage(User user) { if (UserGroup.isPaid(user)) { @@ -15,6 +29,13 @@ public class TieredFeatureToggleVersion implements Service { return "I suppose you can use this software."; } + /** + * Method that checks if the welcome message to be returned is the enhanced version. For this instance as the logic + * is driven by the user group. This method is a little redundant. However can be used to show that there is an + * enhanced version available. + * + * @return Boolean value {@value true} if enhanced. + */ @Override public boolean isEnhanced() { return true; diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java index fec972eb1..2bdfcfdfc 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java @@ -19,7 +19,7 @@ public class UserGroup { * Add the passed {@link User} to the free user group list. * * @param user {@link User} to be added to the free group - * @throws IllegalArgumentException + * @throws IllegalArgumentException when user is already added to the paid group * @see User */ public static void addUserToFreeGroup(final User user) throws IllegalArgumentException { @@ -36,7 +36,7 @@ public class UserGroup { * Add the passed {@link User} to the paid user group list. * * @param user {@link User} to be added to the paid group - * @throws IllegalArgumentException + * @throws IllegalArgumentException when the user is already added to the free group * @see User */ public static void addUserToPaidGroup(final User user) throws IllegalArgumentException { @@ -49,6 +49,13 @@ public class UserGroup { } } + /** + * Method to take a {@link User} to determine if the user is in the {@link UserGroup#paidGroup}. + * + * @param user {@link User} to check if they are in the {@link UserGroup#paidGroup} + * + * @return true if the {@link User} is in {@link UserGroup#paidGroup} + */ public static boolean isPaid(User user) { return paidGroup.contains(user); } From 8603333e5d065207e8af68fe229e7252726e68e7 Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Sun, 31 Jan 2016 14:10:34 +0000 Subject: [PATCH 028/123] #354 Adding Class Diagram --- feature-toggle/etc/feature-toggle.png | Bin 0 -> 55425 bytes feature-toggle/etc/feature-toggle.ucls | 111 +++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 feature-toggle/etc/feature-toggle.png create mode 100644 feature-toggle/etc/feature-toggle.ucls diff --git a/feature-toggle/etc/feature-toggle.png b/feature-toggle/etc/feature-toggle.png new file mode 100644 index 0000000000000000000000000000000000000000..5c118e57e44e86a22a426dcfa9aff8291dc246ac GIT binary patch literal 55425 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ⅈ_4h)^X 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 xw7`b``B#ay@U58d!Tbqz^ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From bf5ba442608f720880b1bd635c5d8dd94f87369c Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Sun, 31 Jan 2016 23:24:35 +0000 Subject: [PATCH 029/123] #354 add App.java --- .../java/com/iluwatar/featuretoggle/App.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 feature-toggle/src/main/java/com/iluwatar/featuretoggle/App.java diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/App.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/App.java new file mode 100644 index 000000000..74db991ba --- /dev/null +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/App.java @@ -0,0 +1,65 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package com.iluwatar.featuretoggle; + +import com.iluwatar.featuretoggle.pattern.Service; +import com.iluwatar.featuretoggle.pattern.propertiesversion.PropertiesFeatureToggleVersion; +import com.iluwatar.featuretoggle.user.User; +import com.iluwatar.featuretoggle.user.UserGroup; + +import java.util.Properties; + +/** + * + */ +public class App { + + /** + * + */ + public static void main(String[] args) { + final Properties properties = new Properties(); + properties.put("enhancedWelcome", true); + Service service = new PropertiesFeatureToggleVersion(properties); + final String welcomeMessage = service.getWelcomeMessage(new User("Jamie No Code")); + System.out.println(welcomeMessage); + + final Properties turnedOff = new Properties(); + turnedOff.put("enhancedWelcome", false); + Service turnedOffService = new PropertiesFeatureToggleVersion(turnedOff); + final String welcomeMessageturnedOff = turnedOffService.getWelcomeMessage(new User("Jamie No Code")); + System.out.println(welcomeMessageturnedOff); + + final User paidUser = new User("Jamie Coder"); + final User freeUser = new User("Alan Defect"); + + UserGroup.addUserToPaidGroup(paidUser); + UserGroup.addUserToFreeGroup(freeUser); + + final String welcomeMessagePaidUser = service.getWelcomeMessage(paidUser); + final String welcomeMessageFreeUser = service.getWelcomeMessage(freeUser); + System.out.println(welcomeMessageFreeUser); + System.out.println(welcomeMessagePaidUser); + } +} From 7adefc89ba56800134d03702a9c8657a01cd250c Mon Sep 17 00:00:00 2001 From: Mohammed Ezzat Date: Mon, 1 Feb 2016 04:19:41 +0200 Subject: [PATCH 030/123] pmd:AppendCharacterWithChar - Append Character With Char --- builder/src/main/java/com/iluwatar/builder/Hero.java | 6 +++--- property/src/main/java/com/iluwatar/property/Character.java | 6 +++--- .../src/main/java/com/iluwatar/stepbuilder/Character.java | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/builder/src/main/java/com/iluwatar/builder/Hero.java b/builder/src/main/java/com/iluwatar/builder/Hero.java index 8cd67fc63..f92e61761 100644 --- a/builder/src/main/java/com/iluwatar/builder/Hero.java +++ b/builder/src/main/java/com/iluwatar/builder/Hero.java @@ -71,10 +71,10 @@ public class Hero { if (hairColor != null || hairType != null) { sb.append(" with "); if (hairColor != null) { - sb.append(hairColor).append(" "); + sb.append(hairColor).append(' '); } if (hairType != null) { - sb.append(hairType).append(" "); + sb.append(hairType).append(' '); } sb.append(hairType != HairType.BALD ? "hair" : "head"); } @@ -84,7 +84,7 @@ public class Hero { if (weapon != null) { sb.append(" and wielding a ").append(weapon); } - sb.append("."); + sb.append('.'); return sb.toString(); } diff --git a/property/src/main/java/com/iluwatar/property/Character.java b/property/src/main/java/com/iluwatar/property/Character.java index 38d78ae27..6a45d16b2 100644 --- a/property/src/main/java/com/iluwatar/property/Character.java +++ b/property/src/main/java/com/iluwatar/property/Character.java @@ -114,11 +114,11 @@ public class Character implements Prototype { public String toString() { StringBuilder builder = new StringBuilder(); if (name != null) { - builder.append("Player: ").append(name).append("\n"); + builder.append("Player: ").append(name).append('\n'); } if (type != null) { - builder.append("Character type: ").append(type.name()).append("\n"); + builder.append("Character type: ").append(type.name()).append('\n'); } builder.append("Stats:\n"); @@ -127,7 +127,7 @@ public class Character implements Prototype { if (value == null) { continue; } - builder.append(" - ").append(stat.name()).append(":").append(value).append("\n"); + builder.append(" - ").append(stat.name()).append(':').append(value).append('\n'); } return builder.toString(); } diff --git a/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java b/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java index e77f7430b..092993f5c 100644 --- a/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java +++ b/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java @@ -98,7 +98,7 @@ public class Character { .append(" armed with a ") .append(weapon != null ? weapon : spell != null ? spell : "with nothing") .append(abilities != null ? (" and wielding " + abilities + " abilities") : "") - .append("."); + .append('.'); return sb.toString(); } } From 37da470178e05a7461c50c433c292199c211dcd2 Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Mon, 1 Feb 2016 18:45:54 +0000 Subject: [PATCH 031/123] #354 Finish Readme --- feature-toggle/index.md | 32 +++++++++++++++++++ .../java/com/iluwatar/featuretoggle/App.java | 6 ++-- .../featuretoggle/pattern/Service.java | 6 ++-- .../PropertiesFeatureToggleVersion.java | 15 +++++++-- .../TieredFeatureToggleVersion.java | 15 +++++++-- .../com/iluwatar/featuretoggle/user/User.java | 6 ++-- .../featuretoggle/user/UserGroup.java | 6 ++-- .../PropertiesFeatureToggleVersionTest.java | 16 +++++----- .../TieredFeatureToggleVersionTest.java | 6 ++-- .../featuretoggle/user/UserGroupTest.java | 6 ++-- 10 files changed, 82 insertions(+), 32 deletions(-) diff --git a/feature-toggle/index.md b/feature-toggle/index.md index e69de29bb..51747ac09 100644 --- a/feature-toggle/index.md +++ b/feature-toggle/index.md @@ -0,0 +1,32 @@ +--- +layout: pattern +title: Feature Toggle +folder: feature-toggle +permalink: /patterns/feature-toggle/ +categories: Behavioral +tags: + - Java + - Difficulty-Beginner +--- + +## Also known as +Feature Flag + +## Intent +Used to switch code execution paths based on properties or groupings. Allowing new features to be released, tested +and rolled out. Allowing switching back to the older feature quickly if needed. It should be noted that this pattern, +can easily introduce code complexity. There is also cause for concern that the old feature that the toggle is eventually +going to phase out is never removed, causing redundant code smells and increased maintainability. + +![alt text](./etc/feature-toggle.png "Feature Toggle") + +## Applicability +Use the Feature Toogle pattern when + +* Giving different features to different users. +* Rolling out a new feature incrementally. +* Switching between development and production environments. + +## Credits + +* [Martin Fowler 29 October 2010 (2010-10-29).](http://martinfowler.com/bliki/FeatureToggle.html) \ No newline at end of file diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/App.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/App.java index 74db991ba..71cdb3781 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/App.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/App.java @@ -1,17 +1,17 @@ /** * The MIT License * Copyright (c) 2014 Ilkka Seppälä - * + *

* Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + *

* The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + *

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java index 337fdc386..d2542b2b7 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java @@ -1,17 +1,17 @@ /** * The MIT License * Copyright (c) 2014 Ilkka Seppälä - * + *

* Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + *

* The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + *

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java index 7c4e8e3b0..761d7d39a 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java @@ -1,17 +1,17 @@ /** * The MIT License * Copyright (c) 2014 Ilkka Seppälä - * + *

* Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + *

* The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + *

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -28,7 +28,16 @@ import com.iluwatar.featuretoggle.user.User; import java.util.Properties; /** + * This example of the Feature Toogle pattern is less dynamic version than + * {@link com.iluwatar.featuretoggle.pattern.tieredversion.TieredFeatureToggleVersion} where the feature is turned on + * or off at the time of creation of the service. This example uses simple Java {@link Properties} however it could as + * easily be done with an external configuration file loaded by Spring and so on. A good example of when to use this + * version of the feature toggle is when new features are being developed. So you could have a configuration property + * boolean named development or some sort of system environment variable. * + * @see Service + * @see com.iluwatar.featuretoggle.pattern.tieredversion.TieredFeatureToggleVersion + * @see User */ public class PropertiesFeatureToggleVersion implements Service { diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java index e62ea1a6e..124c9533f 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java @@ -1,17 +1,17 @@ /** * The MIT License * Copyright (c) 2014 Ilkka Seppälä - * + *

* Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + *

* The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + *

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -27,7 +27,16 @@ import com.iluwatar.featuretoggle.user.User; import com.iluwatar.featuretoggle.user.UserGroup; /** + * This example of the Feature Toogle pattern shows how it could be implemented based on a {@link User}. Therefore + * showing its use within a tiered application where the paying users get access to different content or + * better versions of features. So in this instance a {@link User} is passed in and if they are found to be + * on the {@link UserGroup#isPaid(User)} they are welcomed with a personalised message. While the other is more + * generic. However this pattern is limited to simple examples such as the one below. * + * @see Service + * @see User + * @see com.iluwatar.featuretoggle.pattern.propertiesversion.PropertiesFeatureToggleVersion + * @see UserGroup */ public class TieredFeatureToggleVersion implements Service { diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java index b9882a711..ce7b54b7b 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java @@ -1,17 +1,17 @@ /** * The MIT License * Copyright (c) 2014 Ilkka Seppälä - * + *

* Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + *

* The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + *

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java index 1fe556119..c9d9fd027 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java @@ -1,17 +1,17 @@ /** * The MIT License * Copyright (c) 2014 Ilkka Seppälä - * + *

* Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + *

* The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + *

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java index 61c20ba71..69afc9bb4 100644 --- a/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java +++ b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java @@ -1,17 +1,17 @@ /** * The MIT License * Copyright (c) 2014 Ilkka Seppälä - * + *

* Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + *

* The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + *

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -43,27 +43,27 @@ public class PropertiesFeatureToggleVersionTest { @Test(expected = IllegalArgumentException.class) public void testNonBooleanProperty() throws Exception { final Properties properties = new Properties(); - properties.setProperty("enhancedWelcome","Something"); + properties.setProperty("enhancedWelcome", "Something"); new PropertiesFeatureToggleVersion(properties); } @Test public void testFeatureTurnedOn() throws Exception { final Properties properties = new Properties(); - properties.put("enhancedWelcome",true); + properties.put("enhancedWelcome", true); Service service = new PropertiesFeatureToggleVersion(properties); assertTrue(service.isEnhanced()); final String welcomeMessage = service.getWelcomeMessage(new User("Jamie No Code")); - assertEquals("Welcome Jamie No Code. You're using the enhanced welcome message.",welcomeMessage); + assertEquals("Welcome Jamie No Code. You're using the enhanced welcome message.", welcomeMessage); } @Test public void testFeatureTurnedOff() throws Exception { final Properties properties = new Properties(); - properties.put("enhancedWelcome",false); + properties.put("enhancedWelcome", false); Service service = new PropertiesFeatureToggleVersion(properties); assertFalse(service.isEnhanced()); final String welcomeMessage = service.getWelcomeMessage(new User("Jamie No Code")); - assertEquals("Welcome to the application.",welcomeMessage); + assertEquals("Welcome to the application.", welcomeMessage); } } \ No newline at end of file diff --git a/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java index 04122160d..dca1d9b82 100644 --- a/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java +++ b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java @@ -1,17 +1,17 @@ /** * The MIT License * Copyright (c) 2014 Ilkka Seppälä - * + *

* Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + *

* The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + *

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE diff --git a/feature-toggle/src/test/java/com/iluwatar/featuretoggle/user/UserGroupTest.java b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/user/UserGroupTest.java index 716060e6f..6659815d3 100644 --- a/feature-toggle/src/test/java/com/iluwatar/featuretoggle/user/UserGroupTest.java +++ b/feature-toggle/src/test/java/com/iluwatar/featuretoggle/user/UserGroupTest.java @@ -1,17 +1,17 @@ /** * The MIT License * Copyright (c) 2014 Ilkka Seppälä - * + *

* Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + *

* The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. - * + *

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE From c7f4311706c33a743aeb9a853d303877d3a2e68b Mon Sep 17 00:00:00 2001 From: Joseph McCarthy Date: Mon, 1 Feb 2016 18:57:05 +0000 Subject: [PATCH 032/123] #354 Clean up --- .../java/com/iluwatar/featuretoggle/App.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/App.java b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/App.java index 71cdb3781..debe99580 100644 --- a/feature-toggle/src/main/java/com/iluwatar/featuretoggle/App.java +++ b/feature-toggle/src/main/java/com/iluwatar/featuretoggle/App.java @@ -31,26 +31,57 @@ import com.iluwatar.featuretoggle.user.UserGroup; import java.util.Properties; /** + * The Feature Toggle pattern allows for complete code executions to be turned on or off with ease. This allows features + * to be controlled by either dynamic methods just as {@link User} information or by {@link Properties}. In the App + * below there are two examples. Firstly the {@link Properties} version of the feature toggle, where the enhanced + * version of the welcome message which is personalised is turned either on or off at instance creation. This method + * is not as dynamic as the {@link User} driven version where the feature of the personalised welcome message is + * dependant on the {@link UserGroup} the {@link User} is in. So if the user is a memeber of the + * {@link UserGroup#isPaid(User)} then they get an ehanced version of the welcome message. + * + * Note that this pattern can easily introduce code complexity, and if not kept in check can result in redundant + * unmaintained code within the codebase. * */ public class App { /** + * Block 1 shows the {@link PropertiesFeatureToggleVersion} being run with {@link Properties} setting the feature + * toggle to enabled. * + * Block 2 shows the {@link PropertiesFeatureToggleVersion} being run with {@link Properties} setting the feature + * toggle to disabled. Notice the difference with the printed welcome message the username is not included. + * + * Block 3 shows the {@link com.iluwatar.featuretoggle.pattern.tieredversion.TieredFeatureToggleVersion} being + * set up with two users on who is on the free level, while the other is on the paid level. When the + * {@link Service#getWelcomeMessage(User)} is called with the paid {@link User} note that the welcome message + * contains their username, while the same service call with the free tier user is more generic. No username is + * printed. + * + * @see User + * @see UserGroup + * @see Service + * @see PropertiesFeatureToggleVersion + * @see com.iluwatar.featuretoggle.pattern.tieredversion.TieredFeatureToggleVersion; */ public static void main(String[] args) { + final Properties properties = new Properties(); properties.put("enhancedWelcome", true); Service service = new PropertiesFeatureToggleVersion(properties); final String welcomeMessage = service.getWelcomeMessage(new User("Jamie No Code")); System.out.println(welcomeMessage); + // --------------------------------------------- + final Properties turnedOff = new Properties(); turnedOff.put("enhancedWelcome", false); Service turnedOffService = new PropertiesFeatureToggleVersion(turnedOff); final String welcomeMessageturnedOff = turnedOffService.getWelcomeMessage(new User("Jamie No Code")); System.out.println(welcomeMessageturnedOff); + // -------------------------------------------- + final User paidUser = new User("Jamie Coder"); final User freeUser = new User("Alan Defect"); From 0e7fae21c359177b34a636362b70d341abf85143 Mon Sep 17 00:00:00 2001 From: JuhoKang Date: Tue, 2 Feb 2016 07:48:43 +0900 Subject: [PATCH 033/123] Edit pom.xml --- pom.xml | 665 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 330 insertions(+), 335 deletions(-) diff --git a/pom.xml b/pom.xml index d62241f7e..c39e3f1ef 100644 --- a/pom.xml +++ b/pom.xml @@ -24,318 +24,318 @@ --> - 4.0.0 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - com.iluwatar - java-design-patterns - 1.10.0-SNAPSHOT - pom + com.iluwatar + java-design-patterns + 1.10.0-SNAPSHOT + pom - 2014 + 2014 - - UTF-8 - 5.0.1.Final - 4.2.4.RELEASE - 1.9.2.RELEASE - 1.4.190 - 4.12 - 3.0 - 4.0.0 - 0.7.2.201409121644 - 1.4 - 2.16.1 - 1.2.17 - 19.0 - 1.15.1 - 1.10.19 - - - abstract-factory - builder - factory-method - prototype - singleton - adapter - bridge - composite - dao - decorator - facade - flyweight - proxy - chain - command - interpreter - iterator - mediator - memento - model-view-presenter - observer - state - strategy - template-method - visitor - double-checked-locking - servant - service-locator - null-object - event-aggregator - callback - execute-around - property - intercepting-filter - producer-consumer - poison-pill - reader-writer-lock - lazy-loading - service-layer - specification - tolerant-reader - model-view-controller - flux - double-dispatch - multiton - resource-acquisition-is-initialization - thread-pool - twin - private-class-data - object-pool - dependency-injection - naked-objects - front-controller - repository - async-method-invocation - monostate - step-builder - business-delegate - half-sync-half-async - layers - message-channel - fluentinterface - reactor - caching - publish-subscribe - delegation - event-driven-architecture - value-object - + + UTF-8 + 5.0.1.Final + 4.2.4.RELEASE + 1.9.2.RELEASE + 1.4.190 + 4.12 + 3.0 + 4.0.0 + 0.7.2.201409121644 + 1.4 + 2.16.1 + 1.2.17 + 19.0 + 1.15.1 + 1.10.19 + + + abstract-factory + builder + factory-method + prototype + singleton + adapter + bridge + composite + dao + decorator + facade + flyweight + proxy + chain + command + interpreter + iterator + mediator + memento + model-view-presenter + observer + state + strategy + template-method + visitor + double-checked-locking + servant + service-locator + null-object + event-aggregator + callback + execute-around + property + intercepting-filter + producer-consumer + poison-pill + reader-writer-lock + lazy-loading + service-layer + specification + tolerant-reader + model-view-controller + flux + double-dispatch + multiton + resource-acquisition-is-initialization + thread-pool + twin + private-class-data + object-pool + dependency-injection + naked-objects + front-controller + repository + async-method-invocation + monostate + step-builder + business-delegate + half-sync-half-async + layers + message-channel + fluentinterface + reactor + caching + publish-subscribe + delegation + event-driven-architecture + value-object + - - - - org.hibernate - hibernate-core - ${hibernate.version} - - - org.hibernate - hibernate-entitymanager - ${hibernate.version} - - - org.springframework - spring-test - ${spring.version} - - - org.springframework.data - spring-data-jpa - ${spring-data.version} - - - com.h2database - h2 - ${h2.version} - - - commons-dbcp - commons-dbcp - ${commons-dbcp.version} - - - org.apache.camel - camel-core - ${camel.version} - - - org.apache.camel - camel-stream - ${camel.version} - - - junit - junit - ${junit.version} - test - - - org.mockito - mockito-core - ${mockito.version} - test - - - log4j - log4j - ${log4j.version} - - - com.google.guava - guava - ${guava.version} - - - com.github.stefanbirkner - system-rules - ${systemrules.version} - test - - - + + + + org.hibernate + hibernate-core + ${hibernate.version} + + + org.hibernate + hibernate-entitymanager + ${hibernate.version} + + + org.springframework + spring-test + ${spring.version} + + + org.springframework.data + spring-data-jpa + ${spring-data.version} + + + com.h2database + h2 + ${h2.version} + + + commons-dbcp + commons-dbcp + ${commons-dbcp.version} + + + org.apache.camel + camel-core + ${camel.version} + + + org.apache.camel + camel-stream + ${camel.version} + + + junit + junit + ${junit.version} + test + + + org.mockito + mockito-core + ${mockito.version} + test + + + log4j + log4j + ${log4j.version} + + + com.google.guava + guava + ${guava.version} + + + com.github.stefanbirkner + system-rules + ${systemrules.version} + test + + + - - - - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - org.jacoco - - jacoco-maven-plugin - - - [0.6.2,) - - - prepare-agent - - - - - - - - - - - - + + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + org.jacoco + + jacoco-maven-plugin + + + [0.6.2,) + + + prepare-agent + + + + + + + + + + + + - - - - org.apache.maven.plugins - maven-compiler-plugin - ${compiler.version} - - 1.8 - 1.8 - - - - org.eluder.coveralls - coveralls-maven-plugin - ${coveralls.version} - - jb6wYzxkVvjolD6qOWpzWdcWBzYk2fAmF - - - - org.jacoco - jacoco-maven-plugin - ${jacoco.version} - - - - - domainapp/dom/modules/simple/QSimpleObject.class - - - - - prepare-agent - - prepare-agent - - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + ${compiler.version} + + 1.8 + 1.8 + + + + org.eluder.coveralls + coveralls-maven-plugin + ${coveralls.version} + + jb6wYzxkVvjolD6qOWpzWdcWBzYk2fAmF + + + + org.jacoco + jacoco-maven-plugin + ${jacoco.version} + + + + + domainapp/dom/modules/simple/QSimpleObject.class + + + + + prepare-agent + + prepare-agent + + + + - - - org.apache.maven.plugins - maven-checkstyle-plugin - 2.17 - - - validate - - check - - validate - - checkstyle.xml - checkstyle-suppressions.xml - UTF-8 - true - true - true - - - - + + + org.apache.maven.plugins + maven-checkstyle-plugin + 2.17 + + + validate + + check + + validate + + checkstyle.xml + checkstyle-suppressions.xml + UTF-8 + true + true + true + + + + - - org.jacoco - jacoco-maven-plugin - 0.7.5.201505241946 - - - - prepare-agent - - - - report - prepare-package - - report - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.18.1 - - - org.apache.maven.surefire - surefire-junit47 - 2.18.1 - - - - -Xmx1024M ${argLine} - - + + org.jacoco + jacoco-maven-plugin + 0.7.5.201505241946 + + + + prepare-agent + + + + report + prepare-package + + report + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.18.1 + + + org.apache.maven.surefire + surefire-junit47 + 2.18.1 + + + + -Xmx1024M ${argLine} + + org.apache.maven.plugins maven-pmd-plugin @@ -351,40 +351,35 @@ check - exclude-pmd.properties - + exclude-pmd.properties + -<<<<<<< HEAD - - -======= - - com.mycila - license-maven-plugin - 2.11 - -

com/mycila/maven/plugin/license/templates/MIT.txt
- - Ilkka Seppälä - - true - - - - install-format - install - - format - - - - ->>>>>>> upstream/master - - + + com.mycila + license-maven-plugin + 2.11 + +
com/mycila/maven/plugin/license/templates/MIT.txt
+ + Ilkka Seppälä + + true +
+ + + install-format + install + + format + + + +
+ + @@ -395,5 +390,5 @@ - -
+ +
\ No newline at end of file From d8378915a1e51a43b043e433dfc11999d0c2f4fa Mon Sep 17 00:00:00 2001 From: JuhoKang Date: Tue, 2 Feb 2016 08:02:38 +0900 Subject: [PATCH 034/123] pom.xml change to fit upstream --- pom.xml | 662 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 331 insertions(+), 331 deletions(-) diff --git a/pom.xml b/pom.xml index c39e3f1ef..7e8cc5eb1 100644 --- a/pom.xml +++ b/pom.xml @@ -24,318 +24,318 @@ --> - 4.0.0 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - com.iluwatar - java-design-patterns - 1.10.0-SNAPSHOT - pom + com.iluwatar + java-design-patterns + 1.10.0-SNAPSHOT + pom - 2014 + 2014 - - UTF-8 - 5.0.1.Final - 4.2.4.RELEASE - 1.9.2.RELEASE - 1.4.190 - 4.12 - 3.0 - 4.0.0 - 0.7.2.201409121644 - 1.4 - 2.16.1 - 1.2.17 - 19.0 - 1.15.1 - 1.10.19 - - - abstract-factory - builder - factory-method - prototype - singleton - adapter - bridge - composite - dao - decorator - facade - flyweight - proxy - chain - command - interpreter - iterator - mediator - memento - model-view-presenter - observer - state - strategy - template-method - visitor - double-checked-locking - servant - service-locator - null-object - event-aggregator - callback - execute-around - property - intercepting-filter - producer-consumer - poison-pill - reader-writer-lock - lazy-loading - service-layer - specification - tolerant-reader - model-view-controller - flux - double-dispatch - multiton - resource-acquisition-is-initialization - thread-pool - twin - private-class-data - object-pool - dependency-injection - naked-objects - front-controller - repository - async-method-invocation - monostate - step-builder - business-delegate - half-sync-half-async - layers - message-channel - fluentinterface - reactor - caching - publish-subscribe - delegation - event-driven-architecture - value-object - + + UTF-8 + 5.0.1.Final + 4.2.4.RELEASE + 1.9.2.RELEASE + 1.4.190 + 4.12 + 3.0 + 4.0.0 + 0.7.2.201409121644 + 1.4 + 2.16.1 + 1.2.17 + 19.0 + 1.15.1 + 1.10.19 + + + abstract-factory + builder + factory-method + prototype + singleton + adapter + bridge + composite + dao + decorator + facade + flyweight + proxy + chain + command + interpreter + iterator + mediator + memento + model-view-presenter + observer + state + strategy + template-method + visitor + double-checked-locking + servant + service-locator + null-object + event-aggregator + callback + execute-around + property + intercepting-filter + producer-consumer + poison-pill + reader-writer-lock + lazy-loading + service-layer + specification + tolerant-reader + model-view-controller + flux + double-dispatch + multiton + resource-acquisition-is-initialization + thread-pool + twin + private-class-data + object-pool + dependency-injection + naked-objects + front-controller + repository + async-method-invocation + monostate + step-builder + business-delegate + half-sync-half-async + layers + message-channel + fluentinterface + reactor + caching + publish-subscribe + delegation + event-driven-architecture + value-object + - - - - org.hibernate - hibernate-core - ${hibernate.version} - - - org.hibernate - hibernate-entitymanager - ${hibernate.version} - - - org.springframework - spring-test - ${spring.version} - - - org.springframework.data - spring-data-jpa - ${spring-data.version} - - - com.h2database - h2 - ${h2.version} - - - commons-dbcp - commons-dbcp - ${commons-dbcp.version} - - - org.apache.camel - camel-core - ${camel.version} - - - org.apache.camel - camel-stream - ${camel.version} - - - junit - junit - ${junit.version} - test - - - org.mockito - mockito-core - ${mockito.version} - test - - - log4j - log4j - ${log4j.version} - - - com.google.guava - guava - ${guava.version} - - - com.github.stefanbirkner - system-rules - ${systemrules.version} - test - - - + + + + org.hibernate + hibernate-core + ${hibernate.version} + + + org.hibernate + hibernate-entitymanager + ${hibernate.version} + + + org.springframework + spring-test + ${spring.version} + + + org.springframework.data + spring-data-jpa + ${spring-data.version} + + + com.h2database + h2 + ${h2.version} + + + commons-dbcp + commons-dbcp + ${commons-dbcp.version} + + + org.apache.camel + camel-core + ${camel.version} + + + org.apache.camel + camel-stream + ${camel.version} + + + junit + junit + ${junit.version} + test + + + org.mockito + mockito-core + ${mockito.version} + test + + + log4j + log4j + ${log4j.version} + + + com.google.guava + guava + ${guava.version} + + + com.github.stefanbirkner + system-rules + ${systemrules.version} + test + + + - - - - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - org.jacoco - - jacoco-maven-plugin - - - [0.6.2,) - - - prepare-agent - - - - - - - - - - - - + + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + org.jacoco + + jacoco-maven-plugin + + + [0.6.2,) + + + prepare-agent + + + + + + + + + + + + - - - - org.apache.maven.plugins - maven-compiler-plugin - ${compiler.version} - - 1.8 - 1.8 - - - - org.eluder.coveralls - coveralls-maven-plugin - ${coveralls.version} - - jb6wYzxkVvjolD6qOWpzWdcWBzYk2fAmF - - - - org.jacoco - jacoco-maven-plugin - ${jacoco.version} - - - - - domainapp/dom/modules/simple/QSimpleObject.class - - - - - prepare-agent - - prepare-agent - - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + ${compiler.version} + + 1.8 + 1.8 + + + + org.eluder.coveralls + coveralls-maven-plugin + ${coveralls.version} + + jb6wYzxkVvjolD6qOWpzWdcWBzYk2fAmF + + + + org.jacoco + jacoco-maven-plugin + ${jacoco.version} + + + + + domainapp/dom/modules/simple/QSimpleObject.class + + + + + prepare-agent + + prepare-agent + + + + - - - org.apache.maven.plugins - maven-checkstyle-plugin - 2.17 - - - validate - - check - - validate - - checkstyle.xml - checkstyle-suppressions.xml - UTF-8 - true - true - true - - - - + + + org.apache.maven.plugins + maven-checkstyle-plugin + 2.17 + + + validate + + check + + validate + + checkstyle.xml + checkstyle-suppressions.xml + UTF-8 + true + true + true + + + + - - org.jacoco - jacoco-maven-plugin - 0.7.5.201505241946 - - - - prepare-agent - - - - report - prepare-package - - report - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.18.1 - - - org.apache.maven.surefire - surefire-junit47 - 2.18.1 - - - - -Xmx1024M ${argLine} - - + + org.jacoco + jacoco-maven-plugin + 0.7.5.201505241946 + + + + prepare-agent + + + + report + prepare-package + + report + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.18.1 + + + org.apache.maven.surefire + surefire-junit47 + 2.18.1 + + + + -Xmx1024M ${argLine} + + org.apache.maven.plugins maven-pmd-plugin @@ -351,35 +351,35 @@ check - exclude-pmd.properties - + exclude-pmd.properties + - + - - com.mycila - license-maven-plugin - 2.11 - -
com/mycila/maven/plugin/license/templates/MIT.txt
- - Ilkka Seppälä - - true -
- - - install-format - install - - format - - - -
-
-
+ + com.mycila + license-maven-plugin + 2.11 + +
com/mycila/maven/plugin/license/templates/MIT.txt
+ + Ilkka Seppälä + + true +
+ + + install-format + install + + format + + + +
+ +
@@ -390,5 +390,5 @@ - -
\ No newline at end of file + +
From 6caea8557bb76518d2356b7e1a82901cc76131c8 Mon Sep 17 00:00:00 2001 From: Markus Moser Date: Tue, 2 Feb 2016 17:31:12 +0100 Subject: [PATCH 035/123] added missing space, 'cause website didnt display correctly --- execute-around/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/execute-around/index.md b/execute-around/index.md index 784a02b15..f669f18ff 100644 --- a/execute-around/index.md +++ b/execute-around/index.md @@ -23,5 +23,5 @@ Use the Execute Around idiom when * you use an API that requires methods to be called in pairs such as open/close or allocate/deallocate. -##Credits +## Credits * [Functional Programming in Java: Harnessing the Power of Java 8 Lambda Expressions](http://www.amazon.com/Functional-Programming-Java-Harnessing-Expressions/dp/1937785467/ref=sr_1_1) From 4f56f7b0976ad1eff2acc0dbd4117a5bed661da4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Tue, 2 Feb 2016 22:11:38 +0200 Subject: [PATCH 036/123] Achieved milestone 1.10.0 --- abstract-factory/pom.xml | 2 +- adapter/pom.xml | 2 +- async-method-invocation/pom.xml | 2 +- bridge/pom.xml | 2 +- builder/pom.xml | 2 +- business-delegate/pom.xml | 2 +- caching/pom.xml | 2 +- callback/pom.xml | 2 +- chain/pom.xml | 2 +- command/pom.xml | 2 +- composite/pom.xml | 2 +- dao/pom.xml | 2 +- decorator/pom.xml | 2 +- delegation/pom.xml | 2 +- dependency-injection/pom.xml | 2 +- double-checked-locking/pom.xml | 2 +- double-dispatch/pom.xml | 2 +- event-aggregator/pom.xml | 2 +- event-driven-architecture/pom.xml | 2 +- execute-around/pom.xml | 2 +- facade/pom.xml | 2 +- factory-method/pom.xml | 2 +- feature-toggle/pom.xml | 2 +- fluentinterface/pom.xml | 2 +- flux/pom.xml | 2 +- flyweight/pom.xml | 2 +- front-controller/pom.xml | 2 +- half-sync-half-async/pom.xml | 2 +- intercepting-filter/pom.xml | 2 +- interpreter/pom.xml | 2 +- iterator/pom.xml | 2 +- layers/pom.xml | 2 +- lazy-loading/pom.xml | 2 +- mediator/pom.xml | 2 +- memento/pom.xml | 2 +- message-channel/pom.xml | 2 +- model-view-controller/pom.xml | 2 +- model-view-presenter/pom.xml | 2 +- monostate/pom.xml | 2 +- multiton/pom.xml | 2 +- naked-objects/dom/pom.xml | 2 +- naked-objects/fixture/pom.xml | 2 +- naked-objects/integtests/pom.xml | 2 +- naked-objects/pom.xml | 8 ++++---- naked-objects/webapp/pom.xml | 2 +- null-object/pom.xml | 2 +- object-pool/pom.xml | 2 +- observer/pom.xml | 2 +- poison-pill/pom.xml | 2 +- pom.xml | 2 +- private-class-data/pom.xml | 2 +- producer-consumer/pom.xml | 2 +- property/pom.xml | 2 +- prototype/pom.xml | 2 +- proxy/pom.xml | 2 +- publish-subscribe/pom.xml | 2 +- reactor/pom.xml | 2 +- reader-writer-lock/pom.xml | 2 +- repository/pom.xml | 2 +- resource-acquisition-is-initialization/pom.xml | 2 +- servant/pom.xml | 2 +- service-layer/pom.xml | 2 +- service-locator/pom.xml | 2 +- singleton/pom.xml | 2 +- specification/pom.xml | 2 +- state/pom.xml | 2 +- step-builder/pom.xml | 2 +- strategy/pom.xml | 2 +- template-method/pom.xml | 2 +- thread-pool/pom.xml | 2 +- tolerant-reader/pom.xml | 2 +- twin/pom.xml | 2 +- visitor/pom.xml | 2 +- 73 files changed, 76 insertions(+), 76 deletions(-) diff --git a/abstract-factory/pom.xml b/abstract-factory/pom.xml index 00118f62c..feedab5c7 100644 --- a/abstract-factory/pom.xml +++ b/abstract-factory/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 abstract-factory diff --git a/adapter/pom.xml b/adapter/pom.xml index fc5fdff23..5b34dd1db 100644 --- a/adapter/pom.xml +++ b/adapter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 adapter diff --git a/async-method-invocation/pom.xml b/async-method-invocation/pom.xml index 815b347da..dd57da865 100644 --- a/async-method-invocation/pom.xml +++ b/async-method-invocation/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 async-method-invocation diff --git a/bridge/pom.xml b/bridge/pom.xml index eee2e1c6c..457afcdeb 100644 --- a/bridge/pom.xml +++ b/bridge/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 bridge diff --git a/builder/pom.xml b/builder/pom.xml index c099818ce..a20843a07 100644 --- a/builder/pom.xml +++ b/builder/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 builder diff --git a/business-delegate/pom.xml b/business-delegate/pom.xml index 933518ec0..e6c58f488 100644 --- a/business-delegate/pom.xml +++ b/business-delegate/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 business-delegate diff --git a/caching/pom.xml b/caching/pom.xml index 969ca7d40..80e151bb5 100644 --- a/caching/pom.xml +++ b/caching/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 caching diff --git a/callback/pom.xml b/callback/pom.xml index 2c63059e4..7a5da0f92 100644 --- a/callback/pom.xml +++ b/callback/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 callback diff --git a/chain/pom.xml b/chain/pom.xml index 007a1a224..1962e6f01 100644 --- a/chain/pom.xml +++ b/chain/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 chain diff --git a/command/pom.xml b/command/pom.xml index 2ee281cee..43ac2d73e 100644 --- a/command/pom.xml +++ b/command/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 command diff --git a/composite/pom.xml b/composite/pom.xml index 3c35d1eda..a2573c962 100644 --- a/composite/pom.xml +++ b/composite/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 composite diff --git a/dao/pom.xml b/dao/pom.xml index 422134ec8..4d54c4df1 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 dao diff --git a/decorator/pom.xml b/decorator/pom.xml index e98842da3..4ed52ab54 100644 --- a/decorator/pom.xml +++ b/decorator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 decorator diff --git a/delegation/pom.xml b/delegation/pom.xml index 62726d4ad..79ab70fca 100644 --- a/delegation/pom.xml +++ b/delegation/pom.xml @@ -30,7 +30,7 @@ java-design-patterns com.iluwatar - 1.10.0-SNAPSHOT + 1.10.0 4.0.0 diff --git a/dependency-injection/pom.xml b/dependency-injection/pom.xml index a5ce41ef5..643d1c599 100644 --- a/dependency-injection/pom.xml +++ b/dependency-injection/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 dependency-injection diff --git a/double-checked-locking/pom.xml b/double-checked-locking/pom.xml index e5985a84e..6801bec6e 100644 --- a/double-checked-locking/pom.xml +++ b/double-checked-locking/pom.xml @@ -27,7 +27,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 double-checked-locking diff --git a/double-dispatch/pom.xml b/double-dispatch/pom.xml index 57da13a09..a73c20b01 100644 --- a/double-dispatch/pom.xml +++ b/double-dispatch/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 double-dispatch diff --git a/event-aggregator/pom.xml b/event-aggregator/pom.xml index d773abf0d..1a951bb4c 100644 --- a/event-aggregator/pom.xml +++ b/event-aggregator/pom.xml @@ -28,7 +28,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 event-aggregator diff --git a/event-driven-architecture/pom.xml b/event-driven-architecture/pom.xml index 0a77eec8e..cf1e18695 100644 --- a/event-driven-architecture/pom.xml +++ b/event-driven-architecture/pom.xml @@ -31,7 +31,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 event-driven-architecture diff --git a/execute-around/pom.xml b/execute-around/pom.xml index 569747ff2..38900b888 100644 --- a/execute-around/pom.xml +++ b/execute-around/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 execute-around diff --git a/facade/pom.xml b/facade/pom.xml index e4440b234..fba6d6294 100644 --- a/facade/pom.xml +++ b/facade/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 facade diff --git a/factory-method/pom.xml b/factory-method/pom.xml index e7a56518f..fa9a3540d 100644 --- a/factory-method/pom.xml +++ b/factory-method/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 factory-method diff --git a/feature-toggle/pom.xml b/feature-toggle/pom.xml index 06271524c..cfbe417ac 100644 --- a/feature-toggle/pom.xml +++ b/feature-toggle/pom.xml @@ -30,7 +30,7 @@ java-design-patterns com.iluwatar - 1.10.0-SNAPSHOT + 1.10.0 4.0.0 diff --git a/fluentinterface/pom.xml b/fluentinterface/pom.xml index 9912139f9..9997f29af 100644 --- a/fluentinterface/pom.xml +++ b/fluentinterface/pom.xml @@ -29,7 +29,7 @@ java-design-patterns com.iluwatar - 1.10.0-SNAPSHOT + 1.10.0 4.0.0 diff --git a/flux/pom.xml b/flux/pom.xml index e35868c3e..f0159daa0 100644 --- a/flux/pom.xml +++ b/flux/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 flux diff --git a/flyweight/pom.xml b/flyweight/pom.xml index 341d03c7c..38573d5c5 100644 --- a/flyweight/pom.xml +++ b/flyweight/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 flyweight diff --git a/front-controller/pom.xml b/front-controller/pom.xml index 44aed6265..463812be0 100644 --- a/front-controller/pom.xml +++ b/front-controller/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 front-controller diff --git a/half-sync-half-async/pom.xml b/half-sync-half-async/pom.xml index 487afc3a0..66a8d379d 100644 --- a/half-sync-half-async/pom.xml +++ b/half-sync-half-async/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 half-sync-half-async diff --git a/intercepting-filter/pom.xml b/intercepting-filter/pom.xml index 6758d81aa..8bf58e611 100644 --- a/intercepting-filter/pom.xml +++ b/intercepting-filter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 intercepting-filter diff --git a/interpreter/pom.xml b/interpreter/pom.xml index 91efe5033..65b831e74 100644 --- a/interpreter/pom.xml +++ b/interpreter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 interpreter diff --git a/iterator/pom.xml b/iterator/pom.xml index abc18311c..d241ab91e 100644 --- a/iterator/pom.xml +++ b/iterator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 iterator diff --git a/layers/pom.xml b/layers/pom.xml index 3ac0156c0..d154904e4 100644 --- a/layers/pom.xml +++ b/layers/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 com.iluwatar.layers layers diff --git a/lazy-loading/pom.xml b/lazy-loading/pom.xml index bbdf88995..c52c0a9dc 100644 --- a/lazy-loading/pom.xml +++ b/lazy-loading/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 lazy-loading diff --git a/mediator/pom.xml b/mediator/pom.xml index f7d1a5fd4..7429b667f 100644 --- a/mediator/pom.xml +++ b/mediator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 mediator diff --git a/memento/pom.xml b/memento/pom.xml index 22a67c5d9..6741d287c 100644 --- a/memento/pom.xml +++ b/memento/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 memento diff --git a/message-channel/pom.xml b/message-channel/pom.xml index e8b0ca567..0edb6d075 100644 --- a/message-channel/pom.xml +++ b/message-channel/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 message-channel diff --git a/model-view-controller/pom.xml b/model-view-controller/pom.xml index eaf9f210d..e02b1e34b 100644 --- a/model-view-controller/pom.xml +++ b/model-view-controller/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 model-view-controller diff --git a/model-view-presenter/pom.xml b/model-view-presenter/pom.xml index 343a39f57..286511382 100644 --- a/model-view-presenter/pom.xml +++ b/model-view-presenter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 model-view-presenter model-view-presenter diff --git a/monostate/pom.xml b/monostate/pom.xml index 61598db4f..838b00276 100644 --- a/monostate/pom.xml +++ b/monostate/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 monostate diff --git a/multiton/pom.xml b/multiton/pom.xml index 22bd12861..69df8b94d 100644 --- a/multiton/pom.xml +++ b/multiton/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 multiton diff --git a/naked-objects/dom/pom.xml b/naked-objects/dom/pom.xml index 24a054c67..626f84b54 100644 --- a/naked-objects/dom/pom.xml +++ b/naked-objects/dom/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.10.0-SNAPSHOT + 1.10.0 naked-objects-dom diff --git a/naked-objects/fixture/pom.xml b/naked-objects/fixture/pom.xml index 2cc097e92..9ec93892b 100644 --- a/naked-objects/fixture/pom.xml +++ b/naked-objects/fixture/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.10.0-SNAPSHOT + 1.10.0 naked-objects-fixture diff --git a/naked-objects/integtests/pom.xml b/naked-objects/integtests/pom.xml index d5fb3c581..e460cb113 100644 --- a/naked-objects/integtests/pom.xml +++ b/naked-objects/integtests/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.10.0-SNAPSHOT + 1.10.0 naked-objects-integtests diff --git a/naked-objects/pom.xml b/naked-objects/pom.xml index c5b188098..ea51dee3b 100644 --- a/naked-objects/pom.xml +++ b/naked-objects/pom.xml @@ -15,7 +15,7 @@ java-design-patterns com.iluwatar - 1.10.0-SNAPSHOT + 1.10.0 naked-objects @@ -350,17 +350,17 @@ ${project.groupId} naked-objects-dom - 1.10.0-SNAPSHOT + 1.10.0 ${project.groupId} naked-objects-fixture - 1.10.0-SNAPSHOT + 1.10.0 ${project.groupId} naked-objects-webapp - 1.10.0-SNAPSHOT + 1.10.0 diff --git a/naked-objects/webapp/pom.xml b/naked-objects/webapp/pom.xml index ad43bf91f..4d1f62afd 100644 --- a/naked-objects/webapp/pom.xml +++ b/naked-objects/webapp/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.10.0-SNAPSHOT + 1.10.0 naked-objects-webapp diff --git a/null-object/pom.xml b/null-object/pom.xml index 204b874fd..a95f5ff90 100644 --- a/null-object/pom.xml +++ b/null-object/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 null-object diff --git a/object-pool/pom.xml b/object-pool/pom.xml index c681d957d..7b089170c 100644 --- a/object-pool/pom.xml +++ b/object-pool/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 object-pool diff --git a/observer/pom.xml b/observer/pom.xml index 682125cdc..dc0a7a3ff 100644 --- a/observer/pom.xml +++ b/observer/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 observer diff --git a/poison-pill/pom.xml b/poison-pill/pom.xml index 85f030036..93fbd0c96 100644 --- a/poison-pill/pom.xml +++ b/poison-pill/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 poison-pill diff --git a/pom.xml b/pom.xml index 077d3c95e..7e35567e0 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 pom 2014 diff --git a/private-class-data/pom.xml b/private-class-data/pom.xml index c3f536abb..a5b115edc 100644 --- a/private-class-data/pom.xml +++ b/private-class-data/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 private-class-data diff --git a/producer-consumer/pom.xml b/producer-consumer/pom.xml index 90e323241..b970b2a4f 100644 --- a/producer-consumer/pom.xml +++ b/producer-consumer/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 producer-consumer diff --git a/property/pom.xml b/property/pom.xml index 6906bee68..454f20323 100644 --- a/property/pom.xml +++ b/property/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 property diff --git a/prototype/pom.xml b/prototype/pom.xml index 1cc5d9599..80fcd0738 100644 --- a/prototype/pom.xml +++ b/prototype/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 prototype diff --git a/proxy/pom.xml b/proxy/pom.xml index 890f95b5c..5a86b4e30 100644 --- a/proxy/pom.xml +++ b/proxy/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 proxy diff --git a/publish-subscribe/pom.xml b/publish-subscribe/pom.xml index ae90fdbf1..8afaa3b53 100644 --- a/publish-subscribe/pom.xml +++ b/publish-subscribe/pom.xml @@ -28,7 +28,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 publish-subscribe diff --git a/reactor/pom.xml b/reactor/pom.xml index b22d9669d..5dd39d824 100644 --- a/reactor/pom.xml +++ b/reactor/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 reactor diff --git a/reader-writer-lock/pom.xml b/reader-writer-lock/pom.xml index e5eae25a2..d95daa4cb 100644 --- a/reader-writer-lock/pom.xml +++ b/reader-writer-lock/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 reader-writer-lock diff --git a/repository/pom.xml b/repository/pom.xml index 4b89917fe..79d8f5897 100644 --- a/repository/pom.xml +++ b/repository/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 repository diff --git a/resource-acquisition-is-initialization/pom.xml b/resource-acquisition-is-initialization/pom.xml index f183d16a1..17ec6e217 100644 --- a/resource-acquisition-is-initialization/pom.xml +++ b/resource-acquisition-is-initialization/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 resource-acquisition-is-initialization diff --git a/servant/pom.xml b/servant/pom.xml index bc5f6a61c..6d92991ab 100644 --- a/servant/pom.xml +++ b/servant/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 servant diff --git a/service-layer/pom.xml b/service-layer/pom.xml index b480a75b8..1c12694b2 100644 --- a/service-layer/pom.xml +++ b/service-layer/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 service-layer diff --git a/service-locator/pom.xml b/service-locator/pom.xml index 8d388ccc8..78ed58a26 100644 --- a/service-locator/pom.xml +++ b/service-locator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 service-locator diff --git a/singleton/pom.xml b/singleton/pom.xml index 2375fe70f..d18ed2190 100644 --- a/singleton/pom.xml +++ b/singleton/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 singleton diff --git a/specification/pom.xml b/specification/pom.xml index cb7b046ae..8ad3ff3e9 100644 --- a/specification/pom.xml +++ b/specification/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 specification diff --git a/state/pom.xml b/state/pom.xml index ecf41e038..590eda4b0 100644 --- a/state/pom.xml +++ b/state/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 state diff --git a/step-builder/pom.xml b/step-builder/pom.xml index 2123f0758..30bbdfad5 100644 --- a/step-builder/pom.xml +++ b/step-builder/pom.xml @@ -30,7 +30,7 @@ java-design-patterns com.iluwatar - 1.10.0-SNAPSHOT + 1.10.0 step-builder diff --git a/strategy/pom.xml b/strategy/pom.xml index 9b09ede1a..703d0c307 100644 --- a/strategy/pom.xml +++ b/strategy/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 strategy diff --git a/template-method/pom.xml b/template-method/pom.xml index f734cfd35..7d3cbbfaa 100644 --- a/template-method/pom.xml +++ b/template-method/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 template-method diff --git a/thread-pool/pom.xml b/thread-pool/pom.xml index 7eeae44e2..7e50843ac 100644 --- a/thread-pool/pom.xml +++ b/thread-pool/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 thread-pool diff --git a/tolerant-reader/pom.xml b/tolerant-reader/pom.xml index c6b980fb3..e0ce85e9f 100644 --- a/tolerant-reader/pom.xml +++ b/tolerant-reader/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 tolerant-reader diff --git a/twin/pom.xml b/twin/pom.xml index 6c5ac7473..b4bac4e29 100644 --- a/twin/pom.xml +++ b/twin/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 twin diff --git a/visitor/pom.xml b/visitor/pom.xml index d46a7e0f7..992c82c04 100644 --- a/visitor/pom.xml +++ b/visitor/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.10.0 visitor From 33224dd7d7b6d4d3a0845ba8f9ecdf5d699ca2e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Tue, 2 Feb 2016 22:14:20 +0200 Subject: [PATCH 037/123] Prepare for next development iteration --- abstract-factory/pom.xml | 2 +- adapter/pom.xml | 2 +- async-method-invocation/pom.xml | 2 +- bridge/pom.xml | 2 +- builder/pom.xml | 2 +- business-delegate/pom.xml | 2 +- caching/pom.xml | 2 +- callback/pom.xml | 2 +- chain/pom.xml | 2 +- command/pom.xml | 2 +- composite/pom.xml | 2 +- dao/pom.xml | 2 +- decorator/pom.xml | 2 +- delegation/pom.xml | 2 +- dependency-injection/pom.xml | 2 +- double-checked-locking/pom.xml | 2 +- double-dispatch/pom.xml | 2 +- event-aggregator/pom.xml | 2 +- event-driven-architecture/pom.xml | 2 +- execute-around/pom.xml | 2 +- facade/pom.xml | 2 +- factory-method/pom.xml | 2 +- feature-toggle/pom.xml | 2 +- fluentinterface/pom.xml | 2 +- flux/pom.xml | 2 +- flyweight/pom.xml | 2 +- front-controller/pom.xml | 2 +- half-sync-half-async/pom.xml | 2 +- intercepting-filter/pom.xml | 2 +- interpreter/pom.xml | 2 +- iterator/pom.xml | 2 +- layers/pom.xml | 2 +- lazy-loading/pom.xml | 2 +- mediator/pom.xml | 2 +- memento/pom.xml | 2 +- message-channel/pom.xml | 2 +- model-view-controller/pom.xml | 2 +- model-view-presenter/pom.xml | 2 +- monostate/pom.xml | 2 +- multiton/pom.xml | 2 +- naked-objects/dom/pom.xml | 2 +- naked-objects/fixture/pom.xml | 2 +- naked-objects/integtests/pom.xml | 2 +- naked-objects/pom.xml | 8 ++++---- naked-objects/webapp/pom.xml | 2 +- null-object/pom.xml | 2 +- object-pool/pom.xml | 2 +- observer/pom.xml | 2 +- poison-pill/pom.xml | 2 +- pom.xml | 2 +- private-class-data/pom.xml | 2 +- producer-consumer/pom.xml | 2 +- property/pom.xml | 2 +- prototype/pom.xml | 2 +- proxy/pom.xml | 2 +- publish-subscribe/pom.xml | 2 +- reactor/pom.xml | 2 +- reader-writer-lock/pom.xml | 2 +- repository/pom.xml | 2 +- resource-acquisition-is-initialization/pom.xml | 2 +- servant/pom.xml | 2 +- service-layer/pom.xml | 2 +- service-locator/pom.xml | 2 +- singleton/pom.xml | 2 +- specification/pom.xml | 2 +- state/pom.xml | 2 +- step-builder/pom.xml | 2 +- strategy/pom.xml | 2 +- template-method/pom.xml | 2 +- thread-pool/pom.xml | 2 +- tolerant-reader/pom.xml | 2 +- twin/pom.xml | 2 +- visitor/pom.xml | 2 +- 73 files changed, 76 insertions(+), 76 deletions(-) diff --git a/abstract-factory/pom.xml b/abstract-factory/pom.xml index feedab5c7..32171a5f2 100644 --- a/abstract-factory/pom.xml +++ b/abstract-factory/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT abstract-factory diff --git a/adapter/pom.xml b/adapter/pom.xml index 5b34dd1db..3c231d60a 100644 --- a/adapter/pom.xml +++ b/adapter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT adapter diff --git a/async-method-invocation/pom.xml b/async-method-invocation/pom.xml index dd57da865..d640b890e 100644 --- a/async-method-invocation/pom.xml +++ b/async-method-invocation/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT async-method-invocation diff --git a/bridge/pom.xml b/bridge/pom.xml index 457afcdeb..ba474af55 100644 --- a/bridge/pom.xml +++ b/bridge/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT bridge diff --git a/builder/pom.xml b/builder/pom.xml index a20843a07..66f679cc6 100644 --- a/builder/pom.xml +++ b/builder/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT builder diff --git a/business-delegate/pom.xml b/business-delegate/pom.xml index e6c58f488..920672062 100644 --- a/business-delegate/pom.xml +++ b/business-delegate/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT business-delegate diff --git a/caching/pom.xml b/caching/pom.xml index 80e151bb5..1dad83d0e 100644 --- a/caching/pom.xml +++ b/caching/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT caching diff --git a/callback/pom.xml b/callback/pom.xml index 7a5da0f92..55b1abbc5 100644 --- a/callback/pom.xml +++ b/callback/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT callback diff --git a/chain/pom.xml b/chain/pom.xml index 1962e6f01..4a0c5a96a 100644 --- a/chain/pom.xml +++ b/chain/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT chain diff --git a/command/pom.xml b/command/pom.xml index 43ac2d73e..69c499371 100644 --- a/command/pom.xml +++ b/command/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT command diff --git a/composite/pom.xml b/composite/pom.xml index a2573c962..551dc1f2d 100644 --- a/composite/pom.xml +++ b/composite/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT composite diff --git a/dao/pom.xml b/dao/pom.xml index 4d54c4df1..3b6fc7d1e 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT dao diff --git a/decorator/pom.xml b/decorator/pom.xml index 4ed52ab54..d8f253bd2 100644 --- a/decorator/pom.xml +++ b/decorator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT decorator diff --git a/delegation/pom.xml b/delegation/pom.xml index 79ab70fca..1cfb3e4e3 100644 --- a/delegation/pom.xml +++ b/delegation/pom.xml @@ -30,7 +30,7 @@ java-design-patterns com.iluwatar - 1.10.0 + 1.11.0-SNAPSHOT 4.0.0 diff --git a/dependency-injection/pom.xml b/dependency-injection/pom.xml index 643d1c599..cb210ca5a 100644 --- a/dependency-injection/pom.xml +++ b/dependency-injection/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT dependency-injection diff --git a/double-checked-locking/pom.xml b/double-checked-locking/pom.xml index 6801bec6e..e3b4c5bff 100644 --- a/double-checked-locking/pom.xml +++ b/double-checked-locking/pom.xml @@ -27,7 +27,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT double-checked-locking diff --git a/double-dispatch/pom.xml b/double-dispatch/pom.xml index a73c20b01..8414a6aa1 100644 --- a/double-dispatch/pom.xml +++ b/double-dispatch/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT double-dispatch diff --git a/event-aggregator/pom.xml b/event-aggregator/pom.xml index 1a951bb4c..6627bdb1a 100644 --- a/event-aggregator/pom.xml +++ b/event-aggregator/pom.xml @@ -28,7 +28,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT event-aggregator diff --git a/event-driven-architecture/pom.xml b/event-driven-architecture/pom.xml index cf1e18695..b0b588c6b 100644 --- a/event-driven-architecture/pom.xml +++ b/event-driven-architecture/pom.xml @@ -31,7 +31,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT event-driven-architecture diff --git a/execute-around/pom.xml b/execute-around/pom.xml index 38900b888..a8654ac77 100644 --- a/execute-around/pom.xml +++ b/execute-around/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT execute-around diff --git a/facade/pom.xml b/facade/pom.xml index fba6d6294..daa3853cd 100644 --- a/facade/pom.xml +++ b/facade/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT facade diff --git a/factory-method/pom.xml b/factory-method/pom.xml index fa9a3540d..25ca9f726 100644 --- a/factory-method/pom.xml +++ b/factory-method/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT factory-method diff --git a/feature-toggle/pom.xml b/feature-toggle/pom.xml index cfbe417ac..5f732f5a3 100644 --- a/feature-toggle/pom.xml +++ b/feature-toggle/pom.xml @@ -30,7 +30,7 @@ java-design-patterns com.iluwatar - 1.10.0 + 1.11.0-SNAPSHOT 4.0.0 diff --git a/fluentinterface/pom.xml b/fluentinterface/pom.xml index 9997f29af..5faf359d1 100644 --- a/fluentinterface/pom.xml +++ b/fluentinterface/pom.xml @@ -29,7 +29,7 @@ java-design-patterns com.iluwatar - 1.10.0 + 1.11.0-SNAPSHOT 4.0.0 diff --git a/flux/pom.xml b/flux/pom.xml index f0159daa0..25182d784 100644 --- a/flux/pom.xml +++ b/flux/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT flux diff --git a/flyweight/pom.xml b/flyweight/pom.xml index 38573d5c5..a066c8924 100644 --- a/flyweight/pom.xml +++ b/flyweight/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT flyweight diff --git a/front-controller/pom.xml b/front-controller/pom.xml index 463812be0..8cb7ddc6d 100644 --- a/front-controller/pom.xml +++ b/front-controller/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT front-controller diff --git a/half-sync-half-async/pom.xml b/half-sync-half-async/pom.xml index 66a8d379d..357cabf4b 100644 --- a/half-sync-half-async/pom.xml +++ b/half-sync-half-async/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT half-sync-half-async diff --git a/intercepting-filter/pom.xml b/intercepting-filter/pom.xml index 8bf58e611..0ff3be16b 100644 --- a/intercepting-filter/pom.xml +++ b/intercepting-filter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT intercepting-filter diff --git a/interpreter/pom.xml b/interpreter/pom.xml index 65b831e74..3a09ae310 100644 --- a/interpreter/pom.xml +++ b/interpreter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT interpreter diff --git a/iterator/pom.xml b/iterator/pom.xml index d241ab91e..2aeea6100 100644 --- a/iterator/pom.xml +++ b/iterator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT iterator diff --git a/layers/pom.xml b/layers/pom.xml index d154904e4..c6e68150b 100644 --- a/layers/pom.xml +++ b/layers/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT com.iluwatar.layers layers diff --git a/lazy-loading/pom.xml b/lazy-loading/pom.xml index c52c0a9dc..0ca7272a0 100644 --- a/lazy-loading/pom.xml +++ b/lazy-loading/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT lazy-loading diff --git a/mediator/pom.xml b/mediator/pom.xml index 7429b667f..8e24da4b9 100644 --- a/mediator/pom.xml +++ b/mediator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT mediator diff --git a/memento/pom.xml b/memento/pom.xml index 6741d287c..fc78cb65b 100644 --- a/memento/pom.xml +++ b/memento/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT memento diff --git a/message-channel/pom.xml b/message-channel/pom.xml index 0edb6d075..a6f626a11 100644 --- a/message-channel/pom.xml +++ b/message-channel/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT message-channel diff --git a/model-view-controller/pom.xml b/model-view-controller/pom.xml index e02b1e34b..4e8697171 100644 --- a/model-view-controller/pom.xml +++ b/model-view-controller/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT model-view-controller diff --git a/model-view-presenter/pom.xml b/model-view-presenter/pom.xml index 286511382..c4f1c82dd 100644 --- a/model-view-presenter/pom.xml +++ b/model-view-presenter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT model-view-presenter model-view-presenter diff --git a/monostate/pom.xml b/monostate/pom.xml index 838b00276..bb6119253 100644 --- a/monostate/pom.xml +++ b/monostate/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT monostate diff --git a/multiton/pom.xml b/multiton/pom.xml index 69df8b94d..6b07c638d 100644 --- a/multiton/pom.xml +++ b/multiton/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT multiton diff --git a/naked-objects/dom/pom.xml b/naked-objects/dom/pom.xml index 626f84b54..102c7178e 100644 --- a/naked-objects/dom/pom.xml +++ b/naked-objects/dom/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.10.0 + 1.11.0-SNAPSHOT naked-objects-dom diff --git a/naked-objects/fixture/pom.xml b/naked-objects/fixture/pom.xml index 9ec93892b..6f476bc9b 100644 --- a/naked-objects/fixture/pom.xml +++ b/naked-objects/fixture/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.10.0 + 1.11.0-SNAPSHOT naked-objects-fixture diff --git a/naked-objects/integtests/pom.xml b/naked-objects/integtests/pom.xml index e460cb113..6dbfc9946 100644 --- a/naked-objects/integtests/pom.xml +++ b/naked-objects/integtests/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.10.0 + 1.11.0-SNAPSHOT naked-objects-integtests diff --git a/naked-objects/pom.xml b/naked-objects/pom.xml index ea51dee3b..451944aa5 100644 --- a/naked-objects/pom.xml +++ b/naked-objects/pom.xml @@ -15,7 +15,7 @@ java-design-patterns com.iluwatar - 1.10.0 + 1.11.0-SNAPSHOT naked-objects @@ -350,17 +350,17 @@ ${project.groupId} naked-objects-dom - 1.10.0 + 1.11.0-SNAPSHOT ${project.groupId} naked-objects-fixture - 1.10.0 + 1.11.0-SNAPSHOT ${project.groupId} naked-objects-webapp - 1.10.0 + 1.11.0-SNAPSHOT diff --git a/naked-objects/webapp/pom.xml b/naked-objects/webapp/pom.xml index 4d1f62afd..c8b483513 100644 --- a/naked-objects/webapp/pom.xml +++ b/naked-objects/webapp/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.10.0 + 1.11.0-SNAPSHOT naked-objects-webapp diff --git a/null-object/pom.xml b/null-object/pom.xml index a95f5ff90..e8b1d2465 100644 --- a/null-object/pom.xml +++ b/null-object/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT null-object diff --git a/object-pool/pom.xml b/object-pool/pom.xml index 7b089170c..5a2e4b8b6 100644 --- a/object-pool/pom.xml +++ b/object-pool/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT object-pool diff --git a/observer/pom.xml b/observer/pom.xml index dc0a7a3ff..c8cca3edc 100644 --- a/observer/pom.xml +++ b/observer/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT observer diff --git a/poison-pill/pom.xml b/poison-pill/pom.xml index 93fbd0c96..0cc3bd6e8 100644 --- a/poison-pill/pom.xml +++ b/poison-pill/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT poison-pill diff --git a/pom.xml b/pom.xml index 7e35567e0..482110e64 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT pom 2014 diff --git a/private-class-data/pom.xml b/private-class-data/pom.xml index a5b115edc..97d623b46 100644 --- a/private-class-data/pom.xml +++ b/private-class-data/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT private-class-data diff --git a/producer-consumer/pom.xml b/producer-consumer/pom.xml index b970b2a4f..5c00b85f9 100644 --- a/producer-consumer/pom.xml +++ b/producer-consumer/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT producer-consumer diff --git a/property/pom.xml b/property/pom.xml index 454f20323..a5cd459df 100644 --- a/property/pom.xml +++ b/property/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT property diff --git a/prototype/pom.xml b/prototype/pom.xml index 80fcd0738..da1aa0fd2 100644 --- a/prototype/pom.xml +++ b/prototype/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT prototype diff --git a/proxy/pom.xml b/proxy/pom.xml index 5a86b4e30..4640a1bba 100644 --- a/proxy/pom.xml +++ b/proxy/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT proxy diff --git a/publish-subscribe/pom.xml b/publish-subscribe/pom.xml index 8afaa3b53..bfa4838e7 100644 --- a/publish-subscribe/pom.xml +++ b/publish-subscribe/pom.xml @@ -28,7 +28,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT publish-subscribe diff --git a/reactor/pom.xml b/reactor/pom.xml index 5dd39d824..9e228ce6e 100644 --- a/reactor/pom.xml +++ b/reactor/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT reactor diff --git a/reader-writer-lock/pom.xml b/reader-writer-lock/pom.xml index d95daa4cb..dbfafff66 100644 --- a/reader-writer-lock/pom.xml +++ b/reader-writer-lock/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT reader-writer-lock diff --git a/repository/pom.xml b/repository/pom.xml index 79d8f5897..82e4b4d67 100644 --- a/repository/pom.xml +++ b/repository/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT repository diff --git a/resource-acquisition-is-initialization/pom.xml b/resource-acquisition-is-initialization/pom.xml index 17ec6e217..e79ec99ee 100644 --- a/resource-acquisition-is-initialization/pom.xml +++ b/resource-acquisition-is-initialization/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT resource-acquisition-is-initialization diff --git a/servant/pom.xml b/servant/pom.xml index 6d92991ab..0161e71f6 100644 --- a/servant/pom.xml +++ b/servant/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT servant diff --git a/service-layer/pom.xml b/service-layer/pom.xml index 1c12694b2..ff88256a9 100644 --- a/service-layer/pom.xml +++ b/service-layer/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT service-layer diff --git a/service-locator/pom.xml b/service-locator/pom.xml index 78ed58a26..4a64e8615 100644 --- a/service-locator/pom.xml +++ b/service-locator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT service-locator diff --git a/singleton/pom.xml b/singleton/pom.xml index d18ed2190..66c02e664 100644 --- a/singleton/pom.xml +++ b/singleton/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT singleton diff --git a/specification/pom.xml b/specification/pom.xml index 8ad3ff3e9..125c34e0b 100644 --- a/specification/pom.xml +++ b/specification/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT specification diff --git a/state/pom.xml b/state/pom.xml index 590eda4b0..08b4846e6 100644 --- a/state/pom.xml +++ b/state/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT state diff --git a/step-builder/pom.xml b/step-builder/pom.xml index 30bbdfad5..dde7443f9 100644 --- a/step-builder/pom.xml +++ b/step-builder/pom.xml @@ -30,7 +30,7 @@ java-design-patterns com.iluwatar - 1.10.0 + 1.11.0-SNAPSHOT step-builder diff --git a/strategy/pom.xml b/strategy/pom.xml index 703d0c307..0b6b2dc4e 100644 --- a/strategy/pom.xml +++ b/strategy/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT strategy diff --git a/template-method/pom.xml b/template-method/pom.xml index 7d3cbbfaa..0feb89c02 100644 --- a/template-method/pom.xml +++ b/template-method/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT template-method diff --git a/thread-pool/pom.xml b/thread-pool/pom.xml index 7e50843ac..a2e683359 100644 --- a/thread-pool/pom.xml +++ b/thread-pool/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT thread-pool diff --git a/tolerant-reader/pom.xml b/tolerant-reader/pom.xml index e0ce85e9f..6c8c96b3c 100644 --- a/tolerant-reader/pom.xml +++ b/tolerant-reader/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT tolerant-reader diff --git a/twin/pom.xml b/twin/pom.xml index b4bac4e29..dc23b26ef 100644 --- a/twin/pom.xml +++ b/twin/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT twin diff --git a/visitor/pom.xml b/visitor/pom.xml index 992c82c04..cdffb0151 100644 --- a/visitor/pom.xml +++ b/visitor/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.10.0 + 1.11.0-SNAPSHOT visitor From 53cc97e9d0ed76e4aa103d6e049926bd066178fe Mon Sep 17 00:00:00 2001 From: Jeroen Meulemeester Date: Wed, 3 Feb 2016 07:15:19 +0100 Subject: [PATCH 038/123] Update license year from 2014 to range '2014-2016' --- LICENSE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE.md b/LICENSE.md index d1f75f80a..e73cf6618 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014 Ilkka Seppälä +Copyright (c) 2014-2016 Ilkka Seppälä Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 049841298e3a108a9ce2736500843291cdfab97b Mon Sep 17 00:00:00 2001 From: JuhoKang Date: Wed, 3 Feb 2016 22:59:15 +0900 Subject: [PATCH 039/123] deleted the change in parent pom --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 34f9174fa..67f97c373 100644 --- a/pom.xml +++ b/pom.xml @@ -119,7 +119,6 @@ publish-subscribe delegation event-driven-architecture - value-object feature-toggle From db2140ecc9784666641fc76fd682b595ea232565 Mon Sep 17 00:00:00 2001 From: JuhoKang Date: Wed, 3 Feb 2016 23:02:27 +0900 Subject: [PATCH 040/123] updated child and parent pom --- pom.xml | 1 + value-object/pom.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 67f97c373..c15ca20cf 100644 --- a/pom.xml +++ b/pom.xml @@ -120,6 +120,7 @@ delegation event-driven-architecture feature-toggle + value-object diff --git a/value-object/pom.xml b/value-object/pom.xml index 35856e27a..1ed2adb43 100644 --- a/value-object/pom.xml +++ b/value-object/pom.xml @@ -6,7 +6,7 @@ com.iluwatar java-design-patterns - 1.10.0-SNAPSHOT + 1.11.0-SNAPSHOT value-object From f71e1869592d105385b7aaf4c8e66db361da5c67 Mon Sep 17 00:00:00 2001 From: JuhoKang Date: Wed, 3 Feb 2016 23:33:40 +0900 Subject: [PATCH 041/123] Fixed descriptions in code. --- .../java/com/iluwatar/value/object/App.java | 20 +++++++++++++++---- .../com/iluwatar/value/object/HeroStat.java | 8 +------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/value-object/src/main/java/com/iluwatar/value/object/App.java b/value-object/src/main/java/com/iluwatar/value/object/App.java index f28e86bbe..012f93b74 100644 --- a/value-object/src/main/java/com/iluwatar/value/object/App.java +++ b/value-object/src/main/java/com/iluwatar/value/object/App.java @@ -1,12 +1,24 @@ package com.iluwatar.value.object; /** - * App Class. + * A Value Object are objects which follow value semantics rather than reference semantics. This + * means value objects' equality are not based on identity. Two value objects are equal when they + * have the same value, not necessarily being the same object.. + * + * Value Objects must override equals(), hashCode() to check the equality with values. + * Value Objects should be immutable so declare members final. + * Obtain instances by static factory methods. + * The elements of the state must be other values, including primitive types. + * Provide methods, typically simple getters, to get the elements of the state. + * A Value Object must check equality with equals() not == + * + * For more specific and strict rules to implement value objects check the rules from Stephen + * Colebourne's term VALJO : http://blog.joda.org/2014/03/valjos-value-java-objects.html + * */ public class App { /** - * main method. - * A Value Object must check equality with equals() not ==
+ * * This practice creates three HeroStats(Value object) and checks equality between those. */ public static void main(String[] args) { @@ -15,7 +27,7 @@ public class App { HeroStat statC = HeroStat.valueOf(5, 1, 8); System.out.println(statA.toString()); - + System.out.println("Is statA and statB equal : " + statA.equals(statB)); System.out.println("Is statA and statC equal : " + statA.equals(statC)); } diff --git a/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java b/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java index e7dd1edd1..9a3e2e4bf 100644 --- a/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java +++ b/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java @@ -1,13 +1,7 @@ package com.iluwatar.value.object; /** - * HeroStat is a Value Object. following rules are from Stephen Colebourne's term VALJO(not the - * entire rule set) from : http://blog.joda.org/2014/03/valjos-value-java-objects.html
- * Value Objects must override equals(), hashCode() to check the equality with values.
- * Value Objects should be immutable so declare members final. Obtain instances by static factory - * methods.
- * The elements of the state must be other values, including primitive types.
- * Provide methods, typically simple getters, to get the elements of the state.
+ * HeroStat is a value object * * {@link http://docs.oracle.com/javase/8/docs/api/java/lang/doc-files/ValueBased.html} */ From 83533543e69013ca93442a76119b78430b1bbd1b Mon Sep 17 00:00:00 2001 From: JuhoKang Date: Wed, 3 Feb 2016 23:38:13 +0900 Subject: [PATCH 042/123] format code --- .../src/main/java/com/iluwatar/value/object/App.java | 2 -- .../src/main/java/com/iluwatar/value/object/HeroStat.java | 3 --- .../test/java/com/iluwatar/value/object/HeroStatTest.java | 5 +---- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/value-object/src/main/java/com/iluwatar/value/object/App.java b/value-object/src/main/java/com/iluwatar/value/object/App.java index 012f93b74..85779fcb7 100644 --- a/value-object/src/main/java/com/iluwatar/value/object/App.java +++ b/value-object/src/main/java/com/iluwatar/value/object/App.java @@ -14,11 +14,9 @@ package com.iluwatar.value.object; * * For more specific and strict rules to implement value objects check the rules from Stephen * Colebourne's term VALJO : http://blog.joda.org/2014/03/valjos-value-java-objects.html - * */ public class App { /** - * * This practice creates three HeroStats(Value object) and checks equality between those. */ public static void main(String[] args) { diff --git a/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java b/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java index 9a3e2e4bf..101837db0 100644 --- a/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java +++ b/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java @@ -7,14 +7,12 @@ package com.iluwatar.value.object; */ public class HeroStat { - // Stats for a hero private final int strength; private final int intelligence; private final int luck; - // All constructors must be private. private HeroStat(int strength, int intelligence, int luck) { super(); @@ -87,7 +85,6 @@ public class HeroStat { return true; } - // The clone() method should not be public. Just don't override it. } diff --git a/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java b/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java index 162d9e736..785a4d8fe 100644 --- a/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java +++ b/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java @@ -15,7 +15,7 @@ import org.junit.Test; public class HeroStatTest { /** - * Tester for equals() and hashCode() methods of a class. Using guava's EqualsTester + * Tester for equals() and hashCode() methods of a class. Using guava's EqualsTester. * * @see http://static.javadoc.io/com.google.guava/guava-testlib/19.0/com/google/common/testing/ * EqualsTester.html @@ -33,15 +33,12 @@ public class HeroStatTest { */ @Test public void testToString() { - HeroStat heroStatA = HeroStat.valueOf(3, 9, 2); HeroStat heroStatB = HeroStat.valueOf(3, 9, 2); HeroStat heroStatC = HeroStat.valueOf(3, 9, 8); assertThat(heroStatA.toString(), is(heroStatB.toString())); assertThat(heroStatA.toString(), is(not(heroStatC.toString()))); - - } } From df4a40fc1338c9bc7ecc7cde6343c832423228df Mon Sep 17 00:00:00 2001 From: Mohammed Ezzat Date: Wed, 3 Feb 2016 17:40:02 +0200 Subject: [PATCH 043/123] squid:S1186 - Methods should not be empty --- .../src/main/java/com/iluwatar/nullobject/NullNode.java | 4 +++- .../main/java/com/iluwatar/visitor/CommanderVisitor.java | 8 ++++++-- .../main/java/com/iluwatar/visitor/SergeantVisitor.java | 8 ++++++-- .../main/java/com/iluwatar/visitor/SoldierVisitor.java | 8 ++++++-- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/null-object/src/main/java/com/iluwatar/nullobject/NullNode.java b/null-object/src/main/java/com/iluwatar/nullobject/NullNode.java index 485b1bd5d..26e3db4f1 100644 --- a/null-object/src/main/java/com/iluwatar/nullobject/NullNode.java +++ b/null-object/src/main/java/com/iluwatar/nullobject/NullNode.java @@ -60,5 +60,7 @@ public class NullNode implements Node { } @Override - public void walk() {} + public void walk() { + // Do nothing + } } diff --git a/visitor/src/main/java/com/iluwatar/visitor/CommanderVisitor.java b/visitor/src/main/java/com/iluwatar/visitor/CommanderVisitor.java index b0b9d5708..6e54c7861 100644 --- a/visitor/src/main/java/com/iluwatar/visitor/CommanderVisitor.java +++ b/visitor/src/main/java/com/iluwatar/visitor/CommanderVisitor.java @@ -30,10 +30,14 @@ package com.iluwatar.visitor; public class CommanderVisitor implements UnitVisitor { @Override - public void visitSoldier(Soldier soldier) {} + public void visitSoldier(Soldier soldier) { + // Do nothing + } @Override - public void visitSergeant(Sergeant sergeant) {} + public void visitSergeant(Sergeant sergeant) { + // Do nothing + } @Override public void visitCommander(Commander commander) { diff --git a/visitor/src/main/java/com/iluwatar/visitor/SergeantVisitor.java b/visitor/src/main/java/com/iluwatar/visitor/SergeantVisitor.java index dbaa93034..4fca0a5bd 100644 --- a/visitor/src/main/java/com/iluwatar/visitor/SergeantVisitor.java +++ b/visitor/src/main/java/com/iluwatar/visitor/SergeantVisitor.java @@ -30,7 +30,9 @@ package com.iluwatar.visitor; public class SergeantVisitor implements UnitVisitor { @Override - public void visitSoldier(Soldier soldier) {} + public void visitSoldier(Soldier soldier) { + // Do nothing + } @Override public void visitSergeant(Sergeant sergeant) { @@ -38,5 +40,7 @@ public class SergeantVisitor implements UnitVisitor { } @Override - public void visitCommander(Commander commander) {} + public void visitCommander(Commander commander) { + // Do nothing + } } diff --git a/visitor/src/main/java/com/iluwatar/visitor/SoldierVisitor.java b/visitor/src/main/java/com/iluwatar/visitor/SoldierVisitor.java index a2abbb9e5..fff24f699 100644 --- a/visitor/src/main/java/com/iluwatar/visitor/SoldierVisitor.java +++ b/visitor/src/main/java/com/iluwatar/visitor/SoldierVisitor.java @@ -35,8 +35,12 @@ public class SoldierVisitor implements UnitVisitor { } @Override - public void visitSergeant(Sergeant sergeant) {} + public void visitSergeant(Sergeant sergeant) { + // Do nothing + } @Override - public void visitCommander(Commander commander) {} + public void visitCommander(Commander commander) { + // Do nothing + } } From 9c5745763dd428935e063c30b1e3c223ef9cc611 Mon Sep 17 00:00:00 2001 From: Mohammed Ezzat Date: Sat, 6 Feb 2016 01:10:56 +0200 Subject: [PATCH 044/123] squid:S1213 - The members of an interface declaration or class should appear in a pre-defined order --- .../main/java/com/iluwatar/builder/Hero.java | 18 +++++----- .../dom/app/homepage/HomePageService.java | 17 ++++----- .../dom/app/homepage/HomePageViewModel.java | 17 ++++----- .../dom/modules/simple/SimpleObject.java | 11 +++--- .../dom/modules/simple/SimpleObjects.java | 16 ++++----- .../modules/simple/SimpleObjectCreate.java | 22 ++++++------ .../modules/simple/SimpleObjectsTearDown.java | 9 +++-- .../scenarios/RecreateSimpleObjects.java | 20 +++++------ .../iluwatar/servicelayer/spell/Spell.java | 22 ++++++------ .../servicelayer/spellbook/Spellbook.java | 36 +++++++++---------- .../iluwatar/servicelayer/wizard/Wizard.java | 24 ++++++------- 11 files changed, 106 insertions(+), 106 deletions(-) diff --git a/builder/src/main/java/com/iluwatar/builder/Hero.java b/builder/src/main/java/com/iluwatar/builder/Hero.java index f92e61761..a77e3bc6b 100644 --- a/builder/src/main/java/com/iluwatar/builder/Hero.java +++ b/builder/src/main/java/com/iluwatar/builder/Hero.java @@ -36,6 +36,15 @@ public class Hero { private final Armor armor; private final Weapon weapon; + private Hero(HeroBuilder builder) { + this.profession = builder.profession; + this.name = builder.name; + this.hairColor = builder.hairColor; + this.hairType = builder.hairType; + this.weapon = builder.weapon; + this.armor = builder.armor; + } + public Profession getProfession() { return profession; } @@ -88,15 +97,6 @@ public class Hero { return sb.toString(); } - private Hero(HeroBuilder builder) { - this.profession = builder.profession; - this.name = builder.name; - this.hairColor = builder.hairColor; - this.hairType = builder.hairType; - this.weapon = builder.weapon; - this.armor = builder.armor; - } - /** * * The builder class. diff --git a/naked-objects/dom/src/main/java/domainapp/dom/app/homepage/HomePageService.java b/naked-objects/dom/src/main/java/domainapp/dom/app/homepage/HomePageService.java index fa1e74048..162cd3bb4 100644 --- a/naked-objects/dom/src/main/java/domainapp/dom/app/homepage/HomePageService.java +++ b/naked-objects/dom/src/main/java/domainapp/dom/app/homepage/HomePageService.java @@ -24,14 +24,6 @@ import org.apache.isis.applib.annotation.SemanticsOf; @DomainService(nature = NatureOfService.VIEW_CONTRIBUTIONS_ONLY) public class HomePageService { - // region > homePage (action) - - @Action(semantics = SemanticsOf.SAFE) - @HomePage - public HomePageViewModel homePage() { - return container.injectServicesInto(new HomePageViewModel()); - } - // endregion // region > injected services @@ -40,4 +32,13 @@ public class HomePageService { DomainObjectContainer container; // endregion + + // region > homePage (action) + + @Action(semantics = SemanticsOf.SAFE) + @HomePage + public HomePageViewModel homePage() { + return container.injectServicesInto(new HomePageViewModel()); + } + } diff --git a/naked-objects/dom/src/main/java/domainapp/dom/app/homepage/HomePageViewModel.java b/naked-objects/dom/src/main/java/domainapp/dom/app/homepage/HomePageViewModel.java index 1391bac6a..f367a39fd 100644 --- a/naked-objects/dom/src/main/java/domainapp/dom/app/homepage/HomePageViewModel.java +++ b/naked-objects/dom/src/main/java/domainapp/dom/app/homepage/HomePageViewModel.java @@ -24,6 +24,15 @@ import domainapp.dom.modules.simple.SimpleObjects; @ViewModel public class HomePageViewModel { + // endregion + + // region > injected services + + @javax.inject.Inject + SimpleObjects simpleObjects; + + // endregion + // region > title public String title() { return getObjects().size() + " objects"; @@ -37,12 +46,4 @@ public class HomePageViewModel { return simpleObjects.listAll(); } - // endregion - - // region > injected services - - @javax.inject.Inject - SimpleObjects simpleObjects; - - // endregion } diff --git a/naked-objects/dom/src/main/java/domainapp/dom/modules/simple/SimpleObject.java b/naked-objects/dom/src/main/java/domainapp/dom/modules/simple/SimpleObject.java index 300e184fa..bbbd54b00 100644 --- a/naked-objects/dom/src/main/java/domainapp/dom/modules/simple/SimpleObject.java +++ b/naked-objects/dom/src/main/java/domainapp/dom/modules/simple/SimpleObject.java @@ -48,17 +48,16 @@ import org.apache.isis.applib.util.ObjectContracts; @DomainObjectLayout(bookmarking = BookmarkPolicy.AS_ROOT, cssClassFa = "fa-flag") public class SimpleObject implements Comparable { - - // region > identificatiom - public TranslatableString title() { - return TranslatableString.tr("Object: {name}", "name", getName()); - } - // endregion // region > name (property) private String name; + + // region > identificatiom + public TranslatableString title() { + return TranslatableString.tr("Object: {name}", "name", getName()); + } @javax.jdo.annotations.Column(allowsNull = "false", length = 40) @Title(sequence = "1") diff --git a/naked-objects/dom/src/main/java/domainapp/dom/modules/simple/SimpleObjects.java b/naked-objects/dom/src/main/java/domainapp/dom/modules/simple/SimpleObjects.java index 849f01c5d..5ebad0159 100644 --- a/naked-objects/dom/src/main/java/domainapp/dom/modules/simple/SimpleObjects.java +++ b/naked-objects/dom/src/main/java/domainapp/dom/modules/simple/SimpleObjects.java @@ -33,6 +33,14 @@ import org.apache.isis.applib.services.i18n.TranslatableString; @DomainService(repositoryFor = SimpleObject.class) @DomainServiceLayout(menuOrder = "10") public class SimpleObjects { + // endregion + + // region > injected services + + @javax.inject.Inject + DomainObjectContainer container; + + // endregion // region > title public TranslatableString title() { @@ -81,12 +89,4 @@ public class SimpleObjects { return obj; } - // endregion - - // region > injected services - - @javax.inject.Inject - DomainObjectContainer container; - - // endregion } diff --git a/naked-objects/fixture/src/main/java/domainapp/fixture/modules/simple/SimpleObjectCreate.java b/naked-objects/fixture/src/main/java/domainapp/fixture/modules/simple/SimpleObjectCreate.java index 9a922a7be..f0617fea2 100644 --- a/naked-objects/fixture/src/main/java/domainapp/fixture/modules/simple/SimpleObjectCreate.java +++ b/naked-objects/fixture/src/main/java/domainapp/fixture/modules/simple/SimpleObjectCreate.java @@ -22,6 +22,15 @@ import domainapp.dom.modules.simple.SimpleObjects; public class SimpleObjectCreate extends FixtureScript { + // endregion + + + // region > simpleObject (output) + private SimpleObject simpleObject; + + @javax.inject.Inject + private SimpleObjects simpleObjects; + // region > name (input) private String name; @@ -36,13 +45,7 @@ public class SimpleObjectCreate extends FixtureScript { this.name = name; return this; } - - // endregion - - - // region > simpleObject (output) - private SimpleObject simpleObject; - + /** * The created simple object (output). */ @@ -62,8 +65,5 @@ public class SimpleObjectCreate extends FixtureScript { // also make available to UI ec.addResult(this, simpleObject); } - - @javax.inject.Inject - private SimpleObjects simpleObjects; - + } diff --git a/naked-objects/fixture/src/main/java/domainapp/fixture/modules/simple/SimpleObjectsTearDown.java b/naked-objects/fixture/src/main/java/domainapp/fixture/modules/simple/SimpleObjectsTearDown.java index e844af9c7..7000bf4c0 100644 --- a/naked-objects/fixture/src/main/java/domainapp/fixture/modules/simple/SimpleObjectsTearDown.java +++ b/naked-objects/fixture/src/main/java/domainapp/fixture/modules/simple/SimpleObjectsTearDown.java @@ -20,13 +20,12 @@ import org.apache.isis.applib.services.jdosupport.IsisJdoSupport; public class SimpleObjectsTearDown extends FixtureScript { + @javax.inject.Inject + private IsisJdoSupport isisJdoSupport; + @Override protected void execute(ExecutionContext executionContext) { isisJdoSupport.executeUpdate("delete from \"simple\".\"SimpleObject\""); } - - - @javax.inject.Inject - private IsisJdoSupport isisJdoSupport; - + } diff --git a/naked-objects/fixture/src/main/java/domainapp/fixture/scenarios/RecreateSimpleObjects.java b/naked-objects/fixture/src/main/java/domainapp/fixture/scenarios/RecreateSimpleObjects.java index 6d17d9b63..62ad0405a 100644 --- a/naked-objects/fixture/src/main/java/domainapp/fixture/scenarios/RecreateSimpleObjects.java +++ b/naked-objects/fixture/src/main/java/domainapp/fixture/scenarios/RecreateSimpleObjects.java @@ -32,13 +32,18 @@ public class RecreateSimpleObjects extends FixtureScript { public final List names = Collections.unmodifiableList(Arrays.asList("Foo", "Bar", "Baz", "Frodo", "Froyo", "Fizz", "Bip", "Bop", "Bang", "Boo")); - public RecreateSimpleObjects() { - withDiscoverability(Discoverability.DISCOVERABLE); - } - // region > number (optional input) private Integer number; + // endregion + + // region > simpleObjects (output) + private final List simpleObjects = Lists.newArrayList(); + + public RecreateSimpleObjects() { + withDiscoverability(Discoverability.DISCOVERABLE); + } + /** * The number of objects to create, up to 10; optional, defaults to 3. */ @@ -50,12 +55,7 @@ public class RecreateSimpleObjects extends FixtureScript { this.number = number; return this; } - - // endregion - - // region > simpleObjects (output) - private final List simpleObjects = Lists.newArrayList(); - + /** * The simpleobjects created by this fixture (output). */ diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/spell/Spell.java b/service-layer/src/main/java/com/iluwatar/servicelayer/spell/Spell.java index 38d5aafc1..caf1b2c91 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/spell/Spell.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/spell/Spell.java @@ -44,18 +44,22 @@ public class Spell extends BaseEntity { private String name; + @Id + @GeneratedValue + @Column(name = "SPELL_ID") + private Long id; + + @ManyToOne + @JoinColumn(name = "SPELLBOOK_ID_FK", referencedColumnName = "SPELLBOOK_ID") + private Spellbook spellbook; + public Spell() {} public Spell(String name) { this(); this.name = name; } - - @Id - @GeneratedValue - @Column(name = "SPELL_ID") - private Long id; - + public Long getId() { return id; } @@ -63,11 +67,7 @@ public class Spell extends BaseEntity { public void setId(Long id) { this.id = id; } - - @ManyToOne - @JoinColumn(name = "SPELLBOOK_ID_FK", referencedColumnName = "SPELLBOOK_ID") - private Spellbook spellbook; - + public String getName() { return name; } diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/Spellbook.java b/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/Spellbook.java index 7b84d12b5..918ce4664 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/Spellbook.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/spellbook/Spellbook.java @@ -48,29 +48,11 @@ import com.iluwatar.servicelayer.wizard.Wizard; @Table(name = "SPELLBOOK") public class Spellbook extends BaseEntity { - public Spellbook() { - spells = new HashSet<>(); - wizards = new HashSet<>(); - } - - public Spellbook(String name) { - this(); - this.name = name; - } - @Id @GeneratedValue @Column(name = "SPELLBOOK_ID") private Long id; - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - private String name; @ManyToMany(mappedBy = "spellbooks", fetch = FetchType.EAGER) @@ -79,6 +61,24 @@ public class Spellbook extends BaseEntity { @OneToMany(mappedBy = "spellbook", orphanRemoval = true, cascade = CascadeType.ALL) private Set spells; + public Spellbook() { + spells = new HashSet<>(); + wizards = new HashSet<>(); + } + + public Spellbook(String name) { + this(); + this.name = name; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + public String getName() { return name; } diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/Wizard.java b/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/Wizard.java index 15298b648..40e0b3ac7 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/Wizard.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/wizard/Wizard.java @@ -45,6 +45,16 @@ import com.iluwatar.servicelayer.spellbook.Spellbook; @Table(name = "WIZARD") public class Wizard extends BaseEntity { + @Id + @GeneratedValue + @Column(name = "WIZARD_ID") + private Long id; + + private String name; + + @ManyToMany(cascade = CascadeType.ALL) + private Set spellbooks; + public Wizard() { spellbooks = new HashSet<>(); } @@ -53,12 +63,7 @@ public class Wizard extends BaseEntity { this(); this.name = name; } - - @Id - @GeneratedValue - @Column(name = "WIZARD_ID") - private Long id; - + public Long getId() { return id; } @@ -66,12 +71,7 @@ public class Wizard extends BaseEntity { public void setId(Long id) { this.id = id; } - - private String name; - - @ManyToMany(cascade = CascadeType.ALL) - private Set spellbooks; - + public String getName() { return name; } From 632174b6dc5f36a38b2fcb072166bef0c8358358 Mon Sep 17 00:00:00 2001 From: Mohammed Ezzat Date: Tue, 9 Feb 2016 17:19:31 +0200 Subject: [PATCH 045/123] squid:S2974 - Classes without public constructors should be final --- builder/src/main/java/com/iluwatar/builder/Hero.java | 2 +- caching/src/main/java/com/iluwatar/caching/AppManager.java | 2 +- caching/src/main/java/com/iluwatar/caching/DbManager.java | 2 +- flux/src/main/java/com/iluwatar/flux/dispatcher/Dispatcher.java | 2 +- multiton/src/main/java/com/iluwatar/multiton/Nazgul.java | 2 +- .../integtests/bootstrap/SimpleAppSystemInitializer.java | 2 +- null-object/src/main/java/com/iluwatar/nullobject/NullNode.java | 2 +- .../java/com/iluwatar/servicelayer/hibernate/HibernateUtil.java | 2 +- .../main/java/com/iluwatar/servicelocator/ServiceLocator.java | 2 +- .../com/iluwatar/singleton/InitializingOnDemandHolderIdiom.java | 2 +- .../com/iluwatar/singleton/ThreadSafeDoubleCheckLocking.java | 2 +- .../com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java | 2 +- .../java/com/iluwatar/stepbuilder/CharacterStepBuilder.java | 2 +- .../java/com/iluwatar/tolerantreader/RainbowFishSerializer.java | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/builder/src/main/java/com/iluwatar/builder/Hero.java b/builder/src/main/java/com/iluwatar/builder/Hero.java index f92e61761..c2318e37d 100644 --- a/builder/src/main/java/com/iluwatar/builder/Hero.java +++ b/builder/src/main/java/com/iluwatar/builder/Hero.java @@ -27,7 +27,7 @@ package com.iluwatar.builder; * Hero, the class with many parameters. * */ -public class Hero { +public final class Hero { private final Profession profession; private final String name; diff --git a/caching/src/main/java/com/iluwatar/caching/AppManager.java b/caching/src/main/java/com/iluwatar/caching/AppManager.java index e79ae479f..2967c759f 100644 --- a/caching/src/main/java/com/iluwatar/caching/AppManager.java +++ b/caching/src/main/java/com/iluwatar/caching/AppManager.java @@ -33,7 +33,7 @@ import java.text.ParseException; * CacheStore class. * */ -public class AppManager { +public final class AppManager { private static CachingPolicy cachingPolicy; diff --git a/caching/src/main/java/com/iluwatar/caching/DbManager.java b/caching/src/main/java/com/iluwatar/caching/DbManager.java index 841ad6614..9aee682a3 100644 --- a/caching/src/main/java/com/iluwatar/caching/DbManager.java +++ b/caching/src/main/java/com/iluwatar/caching/DbManager.java @@ -43,7 +43,7 @@ import com.mongodb.client.model.UpdateOptions; * during runtime (createVirtualDB()).

* */ -public class DbManager { +public final class DbManager { private static MongoClient mongoClient; private static MongoDatabase db; diff --git a/flux/src/main/java/com/iluwatar/flux/dispatcher/Dispatcher.java b/flux/src/main/java/com/iluwatar/flux/dispatcher/Dispatcher.java index ae7edca57..4ab01b9fc 100644 --- a/flux/src/main/java/com/iluwatar/flux/dispatcher/Dispatcher.java +++ b/flux/src/main/java/com/iluwatar/flux/dispatcher/Dispatcher.java @@ -37,7 +37,7 @@ import com.iluwatar.flux.store.Store; * Dispatcher sends Actions to registered Stores. * */ -public class Dispatcher { +public final class Dispatcher { private static Dispatcher instance = new Dispatcher(); diff --git a/multiton/src/main/java/com/iluwatar/multiton/Nazgul.java b/multiton/src/main/java/com/iluwatar/multiton/Nazgul.java index 369e17dbc..5a1dbede6 100644 --- a/multiton/src/main/java/com/iluwatar/multiton/Nazgul.java +++ b/multiton/src/main/java/com/iluwatar/multiton/Nazgul.java @@ -30,7 +30,7 @@ import java.util.concurrent.ConcurrentHashMap; * Nazgul is a Multiton class. Nazgul instances can be queried using {@link #getInstance} method. * */ -public class Nazgul { +public final class Nazgul { private static Map nazguls; diff --git a/naked-objects/integtests/src/test/java/domainapp/integtests/bootstrap/SimpleAppSystemInitializer.java b/naked-objects/integtests/src/test/java/domainapp/integtests/bootstrap/SimpleAppSystemInitializer.java index 90ae45d95..b7c76d0ed 100644 --- a/naked-objects/integtests/src/test/java/domainapp/integtests/bootstrap/SimpleAppSystemInitializer.java +++ b/naked-objects/integtests/src/test/java/domainapp/integtests/bootstrap/SimpleAppSystemInitializer.java @@ -19,7 +19,7 @@ import org.apache.isis.core.integtestsupport.IsisSystemForTest; import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPersistenceMechanismInstaller; import org.apache.isis.objectstore.jdo.datanucleus.IsisConfigurationForJdoIntegTests; -public class SimpleAppSystemInitializer { +public final class SimpleAppSystemInitializer { private SimpleAppSystemInitializer() { } diff --git a/null-object/src/main/java/com/iluwatar/nullobject/NullNode.java b/null-object/src/main/java/com/iluwatar/nullobject/NullNode.java index 485b1bd5d..3a177f69f 100644 --- a/null-object/src/main/java/com/iluwatar/nullobject/NullNode.java +++ b/null-object/src/main/java/com/iluwatar/nullobject/NullNode.java @@ -29,7 +29,7 @@ package com.iluwatar.nullobject; * Implemented as Singleton, since all the NullNodes are the same. * */ -public class NullNode implements Node { +public final class NullNode implements Node { private static NullNode instance = new NullNode(); diff --git a/service-layer/src/main/java/com/iluwatar/servicelayer/hibernate/HibernateUtil.java b/service-layer/src/main/java/com/iluwatar/servicelayer/hibernate/HibernateUtil.java index e3588b35a..b30b97b65 100644 --- a/service-layer/src/main/java/com/iluwatar/servicelayer/hibernate/HibernateUtil.java +++ b/service-layer/src/main/java/com/iluwatar/servicelayer/hibernate/HibernateUtil.java @@ -32,7 +32,7 @@ import org.hibernate.cfg.Configuration; /** * Produces the Hibernate {@link SessionFactory}. */ -public class HibernateUtil { +public final class HibernateUtil { /** * The cached session factory diff --git a/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceLocator.java b/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceLocator.java index 9f0b478ca..4d356a567 100644 --- a/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceLocator.java +++ b/service-locator/src/main/java/com/iluwatar/servicelocator/ServiceLocator.java @@ -28,7 +28,7 @@ package com.iluwatar.servicelocator; * * @author saifasif */ -public class ServiceLocator { +public final class ServiceLocator { private static ServiceCache serviceCache = new ServiceCache(); diff --git a/singleton/src/main/java/com/iluwatar/singleton/InitializingOnDemandHolderIdiom.java b/singleton/src/main/java/com/iluwatar/singleton/InitializingOnDemandHolderIdiom.java index 1a0168ccc..84444ec2e 100644 --- a/singleton/src/main/java/com/iluwatar/singleton/InitializingOnDemandHolderIdiom.java +++ b/singleton/src/main/java/com/iluwatar/singleton/InitializingOnDemandHolderIdiom.java @@ -34,7 +34,7 @@ import java.io.Serializable; * * @author mortezaadi@gmail.com */ -public class InitializingOnDemandHolderIdiom implements Serializable { +public final class InitializingOnDemandHolderIdiom implements Serializable { private static final long serialVersionUID = 1L; diff --git a/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLocking.java b/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLocking.java index d7f723553..50203609c 100644 --- a/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLocking.java +++ b/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeDoubleCheckLocking.java @@ -31,7 +31,7 @@ package com.iluwatar.singleton; * * @author mortezaadi@gmail.com */ -public class ThreadSafeDoubleCheckLocking { +public final class ThreadSafeDoubleCheckLocking { private static volatile ThreadSafeDoubleCheckLocking instance; diff --git a/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java b/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java index ac4c39f2c..d7e0de5b5 100644 --- a/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java +++ b/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java @@ -29,7 +29,7 @@ package com.iluwatar.singleton; * Note: if created by reflection then a singleton will not be created but multiple options in the * same classloader */ -public class ThreadSafeLazyLoadedIvoryTower { +public final class ThreadSafeLazyLoadedIvoryTower { private static ThreadSafeLazyLoadedIvoryTower instance = null; diff --git a/step-builder/src/main/java/com/iluwatar/stepbuilder/CharacterStepBuilder.java b/step-builder/src/main/java/com/iluwatar/stepbuilder/CharacterStepBuilder.java index ce402cfe2..35e671b4c 100644 --- a/step-builder/src/main/java/com/iluwatar/stepbuilder/CharacterStepBuilder.java +++ b/step-builder/src/main/java/com/iluwatar/stepbuilder/CharacterStepBuilder.java @@ -28,7 +28,7 @@ import java.util.List; /** * The Step Builder class. */ -public class CharacterStepBuilder { +public final class CharacterStepBuilder { private CharacterStepBuilder() {} diff --git a/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java b/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java index 42f659476..948dfa6d2 100644 --- a/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java +++ b/tolerant-reader/src/main/java/com/iluwatar/tolerantreader/RainbowFishSerializer.java @@ -38,7 +38,7 @@ import java.util.Map; * added to the schema. * */ -public class RainbowFishSerializer { +public final class RainbowFishSerializer { private RainbowFishSerializer() { } From f64ba22c64cfc2f7c1340b692b25b183722c1489 Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Wed, 10 Feb 2016 17:38:15 +0530 Subject: [PATCH 046/123] 1) Removed warning from test case. 2) Made implementation of App more understandable. --- .../java/com/iluwatar/factory/method/App.java | 33 ++++++++++++++----- .../factory/method/FactoryMethodTest.java | 2 +- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/App.java b/factory-method/src/main/java/com/iluwatar/factory/method/App.java index 4056f335c..32b9c82f2 100644 --- a/factory-method/src/main/java/com/iluwatar/factory/method/App.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/App.java @@ -38,25 +38,40 @@ package com.iluwatar.factory.method; */ public class App { + private final Blacksmith blacksmith; + + /** + * Creates an instance of App which will use blacksmith to manufacture + * the weapons for war. + * App is unaware which concrete implementation of {@link Blacksmith} it is using. + * The decision of which blacksmith implementation to use may depend on configuration, or + * the type of rival in war. + * @param blacksmith + */ + public App(Blacksmith blacksmith) { + this.blacksmith = blacksmith; + } + /** * Program entry point * * @param args command line args */ public static void main(String[] args) { - Blacksmith blacksmith; + // Lets go to war with Orc weapons + App app = new App(new OrcBlacksmith()); + app.manufactureWeapons(); + + // Lets go to war with Elf weapons + app = new App(new ElfBlacksmith()); + app.manufactureWeapons(); + } + + private void manufactureWeapons() { Weapon weapon; - - blacksmith = new OrcBlacksmith(); weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR); System.out.println(weapon); weapon = blacksmith.manufactureWeapon(WeaponType.AXE); System.out.println(weapon); - - blacksmith = new ElfBlacksmith(); - weapon = blacksmith.manufactureWeapon(WeaponType.SHORT_SWORD); - System.out.println(weapon); - weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR); - System.out.println(weapon); } } diff --git a/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java index 40515d4c9..2f8d1c9bb 100644 --- a/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java +++ b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java @@ -93,7 +93,7 @@ public class FactoryMethodTest { * @param expectedWeaponType expected WeaponType of the weapon * @param clazz expected class of the weapon */ - private void verifyWeapon(Weapon weapon, WeaponType expectedWeaponType, Class clazz) { + private void verifyWeapon(Weapon weapon, WeaponType expectedWeaponType, Class clazz) { assertTrue("Weapon must be an object of: " + clazz.getName(), clazz.isInstance(weapon)); assertEquals("Weapon must be of weaponType: " + clazz.getName(), expectedWeaponType, weapon.getWeaponType()); From b5d4445d635ed35127fa4189ef75a2cd301b2370 Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Wed, 10 Feb 2016 17:53:32 +0530 Subject: [PATCH 047/123] Made example App a bit easier to understand --- .../java/com/iluwatar/abstractfactory/App.java | 16 ++-------------- .../abstractfactory/AbstractFactoryTest.java | 4 ++-- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java index 15265c0d4..aae396f1d 100644 --- a/abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java +++ b/abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java @@ -52,14 +52,6 @@ public class App { setArmy(factory.createArmy()); } - ElfKingdomFactory getElfKingdomFactory() { - return new ElfKingdomFactory(); - } - - OrcKingdomFactory getOrcKingdomFactory() { - return new OrcKingdomFactory(); - } - King getKing(final KingdomFactory factory) { return factory.createKing(); } @@ -107,17 +99,13 @@ public class App { App app = new App(); System.out.println("Elf Kingdom"); - KingdomFactory elfKingdomFactory; - elfKingdomFactory = app.getElfKingdomFactory(); - app.createKingdom(elfKingdomFactory); + app.createKingdom(new ElfKingdomFactory()); System.out.println(app.getArmy().getDescription()); System.out.println(app.getCastle().getDescription()); System.out.println(app.getKing().getDescription()); System.out.println("\nOrc Kingdom"); - KingdomFactory orcKingdomFactory; - orcKingdomFactory = app.getOrcKingdomFactory(); - app.createKingdom(orcKingdomFactory); + app.createKingdom(new OrcKingdomFactory()); System.out.println(app.getArmy().getDescription()); System.out.println(app.getCastle().getDescription()); System.out.println(app.getKing().getDescription()); diff --git a/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AbstractFactoryTest.java b/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AbstractFactoryTest.java index 5eb083deb..216f0443a 100644 --- a/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AbstractFactoryTest.java +++ b/abstract-factory/src/test/java/com/iluwatar/abstractfactory/AbstractFactoryTest.java @@ -36,8 +36,8 @@ public class AbstractFactoryTest { @Before public void setUp() { - elfFactory = app.getElfKingdomFactory(); - orcFactory = app.getOrcKingdomFactory(); + elfFactory = new ElfKingdomFactory(); + orcFactory = new OrcKingdomFactory(); } @Test From 221b71781a1efd3def76484a4a2aed76cb517f4b Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Thu, 11 Feb 2016 12:29:35 +0530 Subject: [PATCH 048/123] Resolved checkstyle audit error --- .../src/main/java/com/iluwatar/factory/method/App.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/App.java b/factory-method/src/main/java/com/iluwatar/factory/method/App.java index 32b9c82f2..cd7a6e6e7 100644 --- a/factory-method/src/main/java/com/iluwatar/factory/method/App.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/App.java @@ -46,7 +46,7 @@ public class App { * App is unaware which concrete implementation of {@link Blacksmith} it is using. * The decision of which blacksmith implementation to use may depend on configuration, or * the type of rival in war. - * @param blacksmith + * @param blacksmith a non-null implementation of blacksmith */ public App(Blacksmith blacksmith) { this.blacksmith = blacksmith; From f1122f78e32c4db99b42bc224344651dba9b0757 Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Mon, 15 Feb 2016 18:21:34 +0530 Subject: [PATCH 049/123] Added real life application to Command pattern --- command/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/command/index.md b/command/index.md index 2b9311537..ee0003ab7 100644 --- a/command/index.md +++ b/command/index.md @@ -38,6 +38,7 @@ Use the Command pattern when you want to ## Real world examples * [java.lang.Runnable](http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html) +* [Netflix Hystrix](https://github.com/Netflix/Hystrix/wiki) ## Credits From 022ab28e20dd3cea96381ad5adacd443ea1e7e1b Mon Sep 17 00:00:00 2001 From: Crossy147 Date: Mon, 15 Feb 2016 20:37:16 +0100 Subject: [PATCH 050/123] issue #333 diagrams and index added --- factory-kit/etc/factory-kit.png | Bin 0 -> 37570 bytes factory-kit/etc/factory-kit.ucls | 10 ++ factory-kit/index.md | 11 +- .../java/com/iluwatar/factorykit/App.java | 20 ++-- .../java/com/iluwatar/factorykit/Axe.java | 7 +- .../java/com/iluwatar/factorykit/Bow.java | 7 +- .../java/com/iluwatar/factorykit/Builder.java | 5 +- .../java/com/iluwatar/factorykit/Spear.java | 7 +- .../java/com/iluwatar/factorykit/Sword.java | 7 +- .../java/com/iluwatar/factorykit/Weapon.java | 3 + .../iluwatar/factorykit/WeaponFactory.java | 17 +-- .../com/iluwatar/factorykit/WeaponType.java | 5 +- .../com/iluwatar/factorykit/app/AppTest.java | 9 +- .../factorykit/factorykit/FactoryKitTest.java | 83 +++++++------- .../factory/method/FactoryMethodTest.java | 102 +++++++++--------- 15 files changed, 159 insertions(+), 134 deletions(-) create mode 100644 factory-kit/etc/factory-kit.png create mode 100644 factory-kit/etc/factory-kit.ucls diff --git a/factory-kit/etc/factory-kit.png b/factory-kit/etc/factory-kit.png new file mode 100644 index 0000000000000000000000000000000000000000..7093193cb8d0256d1b6bad2434363135cb58710d GIT binary patch literal 37570 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 a(XB + + + + + + + \ No newline at end of file diff --git a/factory-kit/index.md b/factory-kit/index.md index 63809ecc3..03fa53de0 100644 --- a/factory-kit/index.md +++ b/factory-kit/index.md @@ -10,21 +10,18 @@ tags: - Functional --- -## Also known as -Virtual Constructor - ## Intent Define factory of immutable content with separated builder and factory interfaces. -![alt text](./etc/factory-kit_1.png "Factory Kit") +![alt text](./etc/factory-kit.png "Factory Kit") ## Applicability Use the Factory Kit pattern when * a class can't anticipate the class of objects it must create -* you just want a new instance of custom builder instead of global one -* a class wants its subclasses to specify the objects it creates -* classes delegate responsibility to one of several helper subclasses, and you want to localize the knowledge of which helper subclass is the delegate +* you just want a new instance of a custom builder instead of the global one +* you explicitly want to define types of objects, that factory can build +* you want a separated builder and creator interface ## Credits diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/App.java b/factory-kit/src/main/java/com/iluwatar/factorykit/App.java index 572b24630..659cc4a33 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/App.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/App.java @@ -2,14 +2,14 @@ package com.iluwatar.factorykit; public class App { - public static void main(String[] args) { - WeaponFactory factory = WeaponFactory.factory(builder -> { - builder.add(WeaponType.SWORD, Sword::new); - builder.add(WeaponType.AXE, Axe::new); - builder.add(WeaponType.SPEAR, Spear::new); - builder.add(WeaponType.BOW, Bow::new); - }); - Weapon axe = factory.create(WeaponType.AXE); - System.out.println(axe); - } + public static void main(String[] args) { + WeaponFactory factory = WeaponFactory.factory(builder -> { + builder.add(WeaponType.SWORD, Sword::new); + builder.add(WeaponType.AXE, Axe::new); + builder.add(WeaponType.SPEAR, Spear::new); + builder.add(WeaponType.BOW, Bow::new); + }); + Weapon axe = factory.create(WeaponType.AXE); + System.out.println(axe); + } } diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Axe.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Axe.java index 8a3ca587b..4e1a5e554 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/Axe.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Axe.java @@ -1,7 +1,8 @@ package com.iluwatar.factorykit; public class Axe implements Weapon { - @Override public String toString() { - return "Axe{}"; - } + @Override + public String toString() { + return "Axe"; + } } diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Bow.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Bow.java index aac272513..a90f4cf2e 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/Bow.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Bow.java @@ -1,7 +1,8 @@ package com.iluwatar.factorykit; -/** - * Created by crossy on 2016-01-16. - */ public class Bow implements Weapon { + @Override + public String toString() { + return "Bow"; + } } diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java index e20795a1f..2612fe1e6 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java @@ -2,6 +2,9 @@ package com.iluwatar.factorykit; import java.util.function.Supplier; +/** + * Functional interface that allows adding builder with name to the factory + */ public interface Builder { - void add(WeaponType name, Supplier supplier); + void add(WeaponType name, Supplier supplier); } diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Spear.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Spear.java index 9bbb41915..a50f54290 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/Spear.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Spear.java @@ -1,7 +1,8 @@ package com.iluwatar.factorykit; public class Spear implements Weapon { - @Override public String toString() { - return "Spear{}"; - } + @Override + public String toString() { + return "Spear"; + } } diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Sword.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Sword.java index f6e5c5a3e..278febaf5 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/Sword.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Sword.java @@ -1,7 +1,8 @@ package com.iluwatar.factorykit; public class Sword implements Weapon { - @Override public String toString() { - return "Sword{}"; - } + @Override + public String toString() { + return "Sword"; + } } diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java index 039628f3d..4e9daee55 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java @@ -1,4 +1,7 @@ package com.iluwatar.factorykit; +/** + * Interface representing weapon + */ public interface Weapon { } diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java index e77e2023b..df29e6284 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java @@ -4,13 +4,18 @@ import java.util.HashMap; import java.util.function.Consumer; import java.util.function.Supplier; +/** + * Functional interface that represents factory kit. Instance created locally gives an opportunity to strictly define + * which objects types the instance of a factory would be able to create. Factory is just a placeholder for builders with + * create method to initialize new objects. + */ public interface WeaponFactory { - Weapon create(WeaponType name); + Weapon create(WeaponType name); - static WeaponFactory factory(Consumer consumer) { - HashMap> map = new HashMap<>(); - consumer.accept(map::put); - return name -> map.get(name).get(); - } + static WeaponFactory factory(Consumer consumer) { + HashMap> map = new HashMap<>(); + consumer.accept(map::put); + return name -> map.get(name).get(); + } } diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java index 1db668b0e..89a17523a 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java @@ -1,8 +1,5 @@ package com.iluwatar.factorykit; -/** - * Created by crossy on 2016-01-16. - */ public enum WeaponType { - SWORD, AXE, BOW, SPEAR + SWORD, AXE, BOW, SPEAR } diff --git a/factory-kit/src/test/java/com/iluwatar/factorykit/app/AppTest.java b/factory-kit/src/test/java/com/iluwatar/factorykit/app/AppTest.java index 9dbb8444e..9b9af2530 100644 --- a/factory-kit/src/test/java/com/iluwatar/factorykit/app/AppTest.java +++ b/factory-kit/src/test/java/com/iluwatar/factorykit/app/AppTest.java @@ -5,9 +5,10 @@ import org.junit.Test; public class AppTest { - @Test public void test() { - String[] args = {}; - App.main(args); - } + @Test + public void test() { + String[] args = {}; + App.main(args); + } } diff --git a/factory-kit/src/test/java/com/iluwatar/factorykit/factorykit/FactoryKitTest.java b/factory-kit/src/test/java/com/iluwatar/factorykit/factorykit/FactoryKitTest.java index 088b54ba9..ea629f57d 100644 --- a/factory-kit/src/test/java/com/iluwatar/factorykit/factorykit/FactoryKitTest.java +++ b/factory-kit/src/test/java/com/iluwatar/factorykit/factorykit/FactoryKitTest.java @@ -6,53 +6,54 @@ import org.junit.Test; import static org.junit.Assert.assertTrue; -/** - * Created by crossy on 2016-01-16. - */ public class FactoryKitTest { - private WeaponFactory factory; + private WeaponFactory factory; - @Before public void init() { - factory = WeaponFactory.factory(builder -> { - builder.add(WeaponType.SPEAR, Spear::new); - builder.add(WeaponType.AXE, Axe::new); - builder.add(WeaponType.SWORD, Sword::new); - }); - } + @Before + public void init() { + factory = WeaponFactory.factory(builder -> { + builder.add(WeaponType.SPEAR, Spear::new); + builder.add(WeaponType.AXE, Axe::new); + builder.add(WeaponType.SWORD, Sword::new); + }); + } - /** - * Testing {@link WeaponFactory} to produce a SPEAR asserting that the Weapon is an instance of {@link Spear} - */ - @Test public void testSpearWeapon() { - Weapon weapon = factory.create(WeaponType.SPEAR); - verifyWeapon(weapon, Spear.class); - } + /** + * Testing {@link WeaponFactory} to produce a SPEAR asserting that the Weapon is an instance of {@link Spear} + */ + @Test + public void testSpearWeapon() { + Weapon weapon = factory.create(WeaponType.SPEAR); + verifyWeapon(weapon, Spear.class); + } - /** - * Testing {@link WeaponFactory} to produce a AXE asserting that the Weapon is an instance of {@link Axe} - */ - @Test public void testAxeWeapon() { - Weapon weapon = factory.create(WeaponType.AXE); - verifyWeapon(weapon, Axe.class); - } + /** + * Testing {@link WeaponFactory} to produce a AXE asserting that the Weapon is an instance of {@link Axe} + */ + @Test + public void testAxeWeapon() { + Weapon weapon = factory.create(WeaponType.AXE); + verifyWeapon(weapon, Axe.class); + } - /** - * Testing {@link WeaponFactory} to produce a SWORD asserting that the Weapon is an instance of {@link Sword} - */ - @Test public void testWeapon() { - Weapon weapon = factory.create(WeaponType.SWORD); - verifyWeapon(weapon, Sword.class); - } + /** + * Testing {@link WeaponFactory} to produce a SWORD asserting that the Weapon is an instance of {@link Sword} + */ + @Test + public void testWeapon() { + Weapon weapon = factory.create(WeaponType.SWORD); + verifyWeapon(weapon, Sword.class); + } - /** - * This method asserts that the weapon object that is passed is an instance of the clazz - * - * @param weapon weapon object which is to be verified - * @param clazz expected class of the weapon - */ - private void verifyWeapon(Weapon weapon, Class clazz) { - assertTrue("Weapon must be an object of: " + clazz.getName(), clazz.isInstance(weapon)); - } + /** + * This method asserts that the weapon object that is passed is an instance of the clazz + * + * @param weapon weapon object which is to be verified + * @param clazz expected class of the weapon + */ + private void verifyWeapon(Weapon weapon, Class clazz) { + assertTrue("Weapon must be an object of: " + clazz.getName(), clazz.isInstance(weapon)); + } } diff --git a/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java index 6a9b03d2e..2ef0de990 100644 --- a/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java +++ b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java @@ -19,57 +19,61 @@ import static org.junit.Assert.assertTrue; */ public class FactoryMethodTest { - /** - * Testing {@link OrcBlacksmith} to produce a SPEAR asserting that the Weapon is an instance - * of {@link OrcWeapon}. - */ - @Test public void testOrcBlacksmithWithSpear() { - Blacksmith blacksmith = new OrcBlacksmith(); - Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR); - verifyWeapon(weapon, WeaponType.SPEAR, OrcWeapon.class); - } + /** + * Testing {@link OrcBlacksmith} to produce a SPEAR asserting that the Weapon is an instance + * of {@link OrcWeapon}. + */ + @Test + public void testOrcBlacksmithWithSpear() { + Blacksmith blacksmith = new OrcBlacksmith(); + Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR); + verifyWeapon(weapon, WeaponType.SPEAR, OrcWeapon.class); + } - /** - * Testing {@link OrcBlacksmith} to produce a AXE asserting that the Weapon is an instance - * of {@link OrcWeapon}. - */ - @Test public void testOrcBlacksmithWithAxe() { - Blacksmith blacksmith = new OrcBlacksmith(); - Weapon weapon = blacksmith.manufactureWeapon(WeaponType.AXE); - verifyWeapon(weapon, WeaponType.AXE, OrcWeapon.class); - } + /** + * Testing {@link OrcBlacksmith} to produce a AXE asserting that the Weapon is an instance + * of {@link OrcWeapon}. + */ + @Test + public void testOrcBlacksmithWithAxe() { + Blacksmith blacksmith = new OrcBlacksmith(); + Weapon weapon = blacksmith.manufactureWeapon(WeaponType.AXE); + verifyWeapon(weapon, WeaponType.AXE, OrcWeapon.class); + } - /** - * Testing {@link ElfBlacksmith} to produce a SHORT_SWORD asserting that the Weapon is an - * instance of {@link ElfWeapon}. - */ - @Test public void testElfBlacksmithWithShortSword() { - Blacksmith blacksmith = new ElfBlacksmith(); - Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SHORT_SWORD); - verifyWeapon(weapon, WeaponType.SHORT_SWORD, ElfWeapon.class); - } + /** + * Testing {@link ElfBlacksmith} to produce a SHORT_SWORD asserting that the Weapon is an + * instance of {@link ElfWeapon}. + */ + @Test + public void testElfBlacksmithWithShortSword() { + Blacksmith blacksmith = new ElfBlacksmith(); + Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SHORT_SWORD); + verifyWeapon(weapon, WeaponType.SHORT_SWORD, ElfWeapon.class); + } - /** - * Testing {@link ElfBlacksmith} to produce a SPEAR asserting that the Weapon is an instance - * of {@link ElfWeapon}. - */ - @Test public void testElfBlacksmithWithSpear() { - Blacksmith blacksmith = new ElfBlacksmith(); - Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR); - verifyWeapon(weapon, WeaponType.SPEAR, ElfWeapon.class); - } + /** + * Testing {@link ElfBlacksmith} to produce a SPEAR asserting that the Weapon is an instance + * of {@link ElfWeapon}. + */ + @Test + public void testElfBlacksmithWithSpear() { + Blacksmith blacksmith = new ElfBlacksmith(); + Weapon weapon = blacksmith.manufactureWeapon(WeaponType.SPEAR); + verifyWeapon(weapon, WeaponType.SPEAR, ElfWeapon.class); + } - /** - * This method asserts that the weapon object that is passed is an instance of the clazz and the - * weapon is of type expectedWeaponType. - * - * @param weapon weapon object which is to be verified - * @param expectedWeaponType expected WeaponType of the weapon - * @param clazz expected class of the weapon - */ - private void verifyWeapon(Weapon weapon, WeaponType expectedWeaponType, Class clazz) { - assertTrue("Weapon must be an object of: " + clazz.getName(), clazz.isInstance(weapon)); - assertEquals("Weapon must be of weaponType: " + clazz.getName(), expectedWeaponType, - weapon.getWeaponType()); - } + /** + * This method asserts that the weapon object that is passed is an instance of the clazz and the + * weapon is of type expectedWeaponType. + * + * @param weapon weapon object which is to be verified + * @param expectedWeaponType expected WeaponType of the weapon + * @param clazz expected class of the weapon + */ + private void verifyWeapon(Weapon weapon, WeaponType expectedWeaponType, Class clazz) { + assertTrue("Weapon must be an object of: " + clazz.getName(), clazz.isInstance(weapon)); + assertEquals("Weapon must be of weaponType: " + clazz.getName(), expectedWeaponType, + weapon.getWeaponType()); + } } From 8b625a8d3c3b1062a85df2403a920ffc3e1e9f98 Mon Sep 17 00:00:00 2001 From: Crossy147 Date: Mon, 15 Feb 2016 20:54:55 +0100 Subject: [PATCH 051/123] issue #333 minor revert --- .../factory/method/FactoryMethodTest.java | 42 ++++++++++++++----- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java index 2ef0de990..7e82a37fa 100644 --- a/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java +++ b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java @@ -1,18 +1,40 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factory.method; -import org.junit.Test; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import org.junit.Test; + /** * The Factory Method is a creational design pattern which uses factory methods to deal with the * problem of creating objects without specifying the exact class of object that will be created. * This is done by creating objects via calling a factory method either specified in an interface * and implemented by child classes, or implemented in a base class and optionally overridden by * derived classes—rather than by calling a constructor. - *

- *

Factory produces the object of its liking. + * + *

Factory produces the object of its liking. * The weapon {@link Weapon} manufactured by the * blacksmith depends on the kind of factory implementation it is referring to. *

@@ -20,7 +42,7 @@ import static org.junit.Assert.assertTrue; public class FactoryMethodTest { /** - * Testing {@link OrcBlacksmith} to produce a SPEAR asserting that the Weapon is an instance + * Testing {@link OrcBlacksmith} to produce a SPEAR asserting that the Weapon is an instance * of {@link OrcWeapon}. */ @Test @@ -32,7 +54,7 @@ public class FactoryMethodTest { /** * Testing {@link OrcBlacksmith} to produce a AXE asserting that the Weapon is an instance - * of {@link OrcWeapon}. + * of {@link OrcWeapon}. */ @Test public void testOrcBlacksmithWithAxe() { @@ -66,14 +88,14 @@ public class FactoryMethodTest { /** * This method asserts that the weapon object that is passed is an instance of the clazz and the * weapon is of type expectedWeaponType. - * - * @param weapon weapon object which is to be verified + * + * @param weapon weapon object which is to be verified * @param expectedWeaponType expected WeaponType of the weapon - * @param clazz expected class of the weapon + * @param clazz expected class of the weapon */ private void verifyWeapon(Weapon weapon, WeaponType expectedWeaponType, Class clazz) { assertTrue("Weapon must be an object of: " + clazz.getName(), clazz.isInstance(weapon)); assertEquals("Weapon must be of weaponType: " + clazz.getName(), expectedWeaponType, weapon.getWeaponType()); } -} +} \ No newline at end of file From 8fabc861b39d58ffd52f6a9dd36a5e72126f31a6 Mon Sep 17 00:00:00 2001 From: Crossy147 Date: Mon, 15 Feb 2016 21:57:26 +0100 Subject: [PATCH 052/123] pom.xml minor --- pom.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/pom.xml b/pom.xml index d4e5a516f..e3bb0d51d 100644 --- a/pom.xml +++ b/pom.xml @@ -119,12 +119,9 @@ publish-subscribe delegation event-driven-architecture -<<<<<<< HEAD factory-kit -======= feature-toggle value-object ->>>>>>> f1122f78e32c4db99b42bc224344651dba9b0757 From 2fa705ab595ed2480be263ca4ada72a38864f8ae Mon Sep 17 00:00:00 2001 From: Crossy147 Date: Tue, 16 Feb 2016 00:05:28 +0100 Subject: [PATCH 053/123] issue #333 snapshot version fixed --- factory-kit/pom.xml | 51 ++++++++++++++----- .../java/com/iluwatar/factorykit/Builder.java | 2 +- 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/factory-kit/pom.xml b/factory-kit/pom.xml index 451d74b1b..c336c5f49 100644 --- a/factory-kit/pom.xml +++ b/factory-kit/pom.xml @@ -1,21 +1,48 @@ - - - - java-design-patterns - com.iluwatar - 1.10.0-SNAPSHOT - + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.11.0-SNAPSHOT + + factory-kit junit junit test + + org.mockito + mockito-core + test + - factory-kit - - \ No newline at end of file diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java index 2612fe1e6..be74626f7 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java @@ -3,7 +3,7 @@ package com.iluwatar.factorykit; import java.util.function.Supplier; /** - * Functional interface that allows adding builder with name to the factory + * Functional interface that allows adding builder with name to the factory. */ public interface Builder { void add(WeaponType name, Supplier supplier); From 6ab9b36d590490ac1e5883bc7afc4e22acfb4ef5 Mon Sep 17 00:00:00 2001 From: Crossy147 Date: Wed, 17 Feb 2016 19:35:10 +0100 Subject: [PATCH 054/123] issue #333 javadocs changes --- .../main/java/com/iluwatar/factorykit/App.java | 6 +++++- .../java/com/iluwatar/factorykit/Weapon.java | 2 +- .../com/iluwatar/factorykit/WeaponFactory.java | 18 +++++++++++++++--- .../com/iluwatar/factorykit/WeaponType.java | 3 +++ 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/App.java b/factory-kit/src/main/java/com/iluwatar/factorykit/App.java index 659cc4a33..7b62678ba 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/App.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/App.java @@ -1,7 +1,11 @@ package com.iluwatar.factorykit; public class App { - + /** + * Program entry point. + * + * @param args @param args command line args + */ public static void main(String[] args) { WeaponFactory factory = WeaponFactory.factory(builder -> { builder.add(WeaponType.SWORD, Sword::new); diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java index 4e9daee55..980a2219f 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java @@ -1,7 +1,7 @@ package com.iluwatar.factorykit; /** - * Interface representing weapon + * Interface representing weapon. */ public interface Weapon { } diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java index df29e6284..e83a997c6 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java @@ -5,14 +5,26 @@ import java.util.function.Consumer; import java.util.function.Supplier; /** - * Functional interface that represents factory kit. Instance created locally gives an opportunity to strictly define - * which objects types the instance of a factory would be able to create. Factory is just a placeholder for builders with - * create method to initialize new objects. + * Functional interface, an example of the factory-kit design pattern. + *
Instance created locally gives an opportunity to strictly define + * which objects types the instance of a factory will be able to create. + *
Factory is a placeholder for {@link Builder}s + * with {@link WeaponFactory#create(WeaponType)} method to initialize new objects. */ public interface WeaponFactory { + /** + * Creates an instance of the given type. + * @param name representing enum of an object type to be created. + * @return new instance of a requested class implementing {@link Weapon} interface. + */ Weapon create(WeaponType name); + /** + * Creates factory - placeholder for specified {@link Builder}s. + * @param consumer for the new builder to the factory. + * @return factory with specified {@link Builder}s + */ static WeaponFactory factory(Consumer consumer) { HashMap> map = new HashMap<>(); consumer.accept(map::put); diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java index 89a17523a..ac542048d 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java @@ -1,5 +1,8 @@ package com.iluwatar.factorykit; +/** + * Enumerates {@link Weapon} types + */ public enum WeaponType { SWORD, AXE, BOW, SPEAR } From 0003c6cb0034f3967c7a85d5dab1f920d0e9d02e Mon Sep 17 00:00:00 2001 From: Mohammed Ezzat Date: Thu, 18 Feb 2016 08:40:19 +0200 Subject: [PATCH 055/123] pmd:RedundantFieldInitializer - Redundant-Field-Initializer --- caching/src/main/java/com/iluwatar/caching/CacheStore.java | 2 +- caching/src/main/java/com/iluwatar/caching/LruCache.java | 4 ++-- chain/src/main/java/com/iluwatar/chain/Request.java | 2 +- .../fluentiterable/lazy/DecoratingIterator.java | 2 +- .../fluentiterable/lazy/LazyFluentIterable.java | 4 ++-- .../java/com/iluwatar/model/view/presenter/FileLoader.java | 2 +- .../src/main/java/com/iluwatar/monostate/LoadBalancer.java | 4 ++-- .../main/java/com/iluwatar/producer/consumer/Producer.java | 2 +- .../com/iluwatar/reader/writer/lock/ReaderWriterLock.java | 2 +- .../src/main/java/com/iluwatar/reader/writer/lock/Writer.java | 2 +- .../iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java | 2 +- twin/src/main/java/com/iluwatar/twin/BallItem.java | 2 +- 12 files changed, 15 insertions(+), 15 deletions(-) diff --git a/caching/src/main/java/com/iluwatar/caching/CacheStore.java b/caching/src/main/java/com/iluwatar/caching/CacheStore.java index db8f3bed7..e2e04076a 100644 --- a/caching/src/main/java/com/iluwatar/caching/CacheStore.java +++ b/caching/src/main/java/com/iluwatar/caching/CacheStore.java @@ -31,7 +31,7 @@ import java.util.ArrayList; */ public class CacheStore { - static LruCache cache = null; + static LruCache cache; private CacheStore() { } diff --git a/caching/src/main/java/com/iluwatar/caching/LruCache.java b/caching/src/main/java/com/iluwatar/caching/LruCache.java index 6c86c1a53..c5e1a9d46 100644 --- a/caching/src/main/java/com/iluwatar/caching/LruCache.java +++ b/caching/src/main/java/com/iluwatar/caching/LruCache.java @@ -50,8 +50,8 @@ public class LruCache { int capacity; HashMap cache = new HashMap<>(); - Node head = null; - Node end = null; + Node head; + Node end; public LruCache(int capacity) { this.capacity = capacity; diff --git a/chain/src/main/java/com/iluwatar/chain/Request.java b/chain/src/main/java/com/iluwatar/chain/Request.java index f6a15ff5a..399eddb36 100644 --- a/chain/src/main/java/com/iluwatar/chain/Request.java +++ b/chain/src/main/java/com/iluwatar/chain/Request.java @@ -44,7 +44,7 @@ public class Request { * Indicates if the request is handled or not. A request can only switch state from unhandled to * handled, there's no way to 'unhandle' a request */ - private boolean handled = false; + private boolean handled; /** * Create a new request of the given type and accompanied description. diff --git a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/DecoratingIterator.java b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/DecoratingIterator.java index c8b7520ac..d15cecea7 100644 --- a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/DecoratingIterator.java +++ b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/DecoratingIterator.java @@ -32,7 +32,7 @@ public abstract class DecoratingIterator implements Iterator { protected final Iterator fromIterator; - private TYPE next = null; + private TYPE next; /** * Creates an iterator that decorates the given iterator. diff --git a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java index bf4403685..8b7f88101 100644 --- a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java +++ b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java @@ -111,7 +111,7 @@ public class LazyFluentIterable implements FluentIterable { @Override public Iterator iterator() { return new DecoratingIterator(iterable.iterator()) { - int currentIndex = 0; + int currentIndex; @Override public TYPE computeNext() { @@ -156,7 +156,7 @@ public class LazyFluentIterable implements FluentIterable { private int stopIndex; private int totalElementsCount; private List list; - private int currentIndex = 0; + private int currentIndex; @Override public TYPE computeNext() { diff --git a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java index 2b9b26d96..b9e36fd00 100644 --- a/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java +++ b/model-view-presenter/src/main/java/com/iluwatar/model/view/presenter/FileLoader.java @@ -37,7 +37,7 @@ public class FileLoader { /** * Indicates if the file is loaded or not. */ - private boolean loaded = false; + private boolean loaded; /** * The name of the file that we want to load. diff --git a/monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java b/monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java index b0d0f283c..613f0e105 100644 --- a/monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java +++ b/monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java @@ -35,8 +35,8 @@ import java.util.List; public class LoadBalancer { private static List servers = new ArrayList<>(); - private static int id = 0; - private static int lastServedId = 0; + private static int id; + private static int lastServedId; static { servers.add(new Server("localhost", 8081, ++id)); diff --git a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Producer.java b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Producer.java index 8d21c0816..587614dc8 100644 --- a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Producer.java +++ b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Producer.java @@ -34,7 +34,7 @@ public class Producer { private final String name; - private int itemId = 0; + private int itemId; public Producer(String name, ItemQueue queue) { this.name = name; diff --git a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java index 32760d5b4..c8f59edd5 100644 --- a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java +++ b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java @@ -40,7 +40,7 @@ public class ReaderWriterLock implements ReadWriteLock { private Object readerMutex = new Object(); - private int currentReaderCount = 0; + private int currentReaderCount; /** * Global mutex is used to indicate that whether reader or writer gets the lock in the moment. diff --git a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Writer.java b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Writer.java index ecb54f330..fc3c3bb88 100644 --- a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Writer.java +++ b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/Writer.java @@ -29,7 +29,7 @@ import java.util.concurrent.locks.Lock; */ public class Writer implements Runnable { - private Lock writeLock = null; + private Lock writeLock; private String name; diff --git a/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java b/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java index ac4c39f2c..236fb4da4 100644 --- a/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java +++ b/singleton/src/main/java/com/iluwatar/singleton/ThreadSafeLazyLoadedIvoryTower.java @@ -31,7 +31,7 @@ package com.iluwatar.singleton; */ public class ThreadSafeLazyLoadedIvoryTower { - private static ThreadSafeLazyLoadedIvoryTower instance = null; + private static ThreadSafeLazyLoadedIvoryTower instance; private ThreadSafeLazyLoadedIvoryTower() {} diff --git a/twin/src/main/java/com/iluwatar/twin/BallItem.java b/twin/src/main/java/com/iluwatar/twin/BallItem.java index 4e6ecc15e..0188b5731 100644 --- a/twin/src/main/java/com/iluwatar/twin/BallItem.java +++ b/twin/src/main/java/com/iluwatar/twin/BallItem.java @@ -30,7 +30,7 @@ package com.iluwatar.twin; */ public class BallItem extends GameItem { - private boolean isSuspended = false; + private boolean isSuspended; private BallThread twin; From b70614efef80d95d0cdd1c47bf0527f6cfb56ffd Mon Sep 17 00:00:00 2001 From: Amit Bhoraniya Date: Fri, 19 Feb 2016 00:10:55 +0530 Subject: [PATCH 056/123] Creating object with reference to Interface In Dao pattern DaoImpl object is created with reference to dao interface. --- dao/src/main/java/com/iluwatar/dao/App.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dao/src/main/java/com/iluwatar/dao/App.java b/dao/src/main/java/com/iluwatar/dao/App.java index a9351689d..99b15f8f4 100644 --- a/dao/src/main/java/com/iluwatar/dao/App.java +++ b/dao/src/main/java/com/iluwatar/dao/App.java @@ -29,7 +29,7 @@ public class App { * @param args command line args. */ public static void main(final String[] args) { - final CustomerDaoImpl customerDao = new CustomerDaoImpl(generateSampleCustomers()); + final CustomerDao customerDao = new CustomerDaoImpl(generateSampleCustomers()); log.info("customerDao.getAllCustomers(): " + customerDao.getAllCustomers()); log.info("customerDao.getCusterById(2): " + customerDao.getCustomerById(2)); final Customer customer = new Customer(4, "Dan", "Danson"); From 50310aaeaf49d032816cb065248b3bf6a486d1d9 Mon Sep 17 00:00:00 2001 From: Mohammed Ezzat Date: Fri, 19 Feb 2016 11:02:49 +0200 Subject: [PATCH 057/123] squid:S1699 - Constructors should only call non-overridable methods --- .../main/java/com/iluwatar/event/aggregator/EventEmitter.java | 2 +- iterator/src/main/java/com/iluwatar/iterator/Item.java | 2 +- layers/src/main/java/com/iluwatar/layers/Cake.java | 2 +- layers/src/main/java/com/iluwatar/layers/CakeLayer.java | 4 ++-- layers/src/main/java/com/iluwatar/layers/CakeTopping.java | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/EventEmitter.java b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/EventEmitter.java index fb6a2d0c4..b34235df5 100644 --- a/event-aggregator/src/main/java/com/iluwatar/event/aggregator/EventEmitter.java +++ b/event-aggregator/src/main/java/com/iluwatar/event/aggregator/EventEmitter.java @@ -43,7 +43,7 @@ public abstract class EventEmitter { registerObserver(obs); } - public void registerObserver(EventObserver obs) { + public final void registerObserver(EventObserver obs) { observers.add(obs); } diff --git a/iterator/src/main/java/com/iluwatar/iterator/Item.java b/iterator/src/main/java/com/iluwatar/iterator/Item.java index d505332c7..8bb540fbd 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/Item.java +++ b/iterator/src/main/java/com/iluwatar/iterator/Item.java @@ -46,7 +46,7 @@ public class Item { return type; } - public void setType(ItemType type) { + public final void setType(ItemType type) { this.type = type; } } diff --git a/layers/src/main/java/com/iluwatar/layers/Cake.java b/layers/src/main/java/com/iluwatar/layers/Cake.java index 8582cf418..f6eae2ad7 100644 --- a/layers/src/main/java/com/iluwatar/layers/Cake.java +++ b/layers/src/main/java/com/iluwatar/layers/Cake.java @@ -75,7 +75,7 @@ public class Cake { return layers; } - public void setLayers(Set layers) { + public final void setLayers(Set layers) { this.layers = layers; } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeLayer.java b/layers/src/main/java/com/iluwatar/layers/CakeLayer.java index dd24c819e..50632f1b0 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeLayer.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeLayer.java @@ -66,7 +66,7 @@ public class CakeLayer { return name; } - public void setName(String name) { + public final void setName(String name) { this.name = name; } @@ -74,7 +74,7 @@ public class CakeLayer { return calories; } - public void setCalories(int calories) { + public final void setCalories(int calories) { this.calories = calories; } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeTopping.java b/layers/src/main/java/com/iluwatar/layers/CakeTopping.java index db63ec298..7db86d0f6 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeTopping.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeTopping.java @@ -66,11 +66,11 @@ public class CakeTopping { return name; } - public void setName(String name) { + public final void setName(String name) { this.name = name; } - public int getCalories() { + public final int getCalories() { return calories; } From 3e526cb5da1693c3a6ec30caeb1b8cab2eab360b Mon Sep 17 00:00:00 2001 From: Crossy147 Date: Fri, 19 Feb 2016 17:56:09 +0100 Subject: [PATCH 058/123] issue #335 Monad pattern introduced --- monad/index.md | 29 +++++++ monad/pom.xml | 43 ++++++++++ .../src/main/java/com/iluwatar/monad/App.java | 19 +++++ .../src/main/java/com/iluwatar/monad/Sex.java | 5 ++ .../main/java/com/iluwatar/monad/User.java | 39 +++++++++ .../java/com/iluwatar/monad/Validator.java | 81 +++++++++++++++++++ .../test/java/com/iluwatar/monad/AppTest.java | 13 +++ .../java/com/iluwatar/monad/MonadTest.java | 42 ++++++++++ pom.xml | 1 + 9 files changed, 272 insertions(+) create mode 100644 monad/index.md create mode 100644 monad/pom.xml create mode 100644 monad/src/main/java/com/iluwatar/monad/App.java create mode 100644 monad/src/main/java/com/iluwatar/monad/Sex.java create mode 100644 monad/src/main/java/com/iluwatar/monad/User.java create mode 100644 monad/src/main/java/com/iluwatar/monad/Validator.java create mode 100644 monad/src/test/java/com/iluwatar/monad/AppTest.java create mode 100644 monad/src/test/java/com/iluwatar/monad/MonadTest.java diff --git a/monad/index.md b/monad/index.md new file mode 100644 index 000000000..a11360a2e --- /dev/null +++ b/monad/index.md @@ -0,0 +1,29 @@ +--- +layout: pattern +title: Monad +folder: monad +permalink: /patterns/monad/ +categories: Presentation Tier +tags: + - Java + - Difficulty-Advanced +--- + +## Intent + +Monad pattern based on monad from linear algebra represents the way of chaining operations +together step by step. Binding functions can be described as passing one's output to another's input +basing on the 'same type' contract. + +![alt text](./etc/monad.png "Monad") + +## Applicability + +Use the Monad in any of the following situations + +* when you want to chain operations easily +* when you want to apply each function regardless of the result of any of them + +## Credits +* [Design Pattern Reloaded by Remi Forax](https://youtu.be/-k2X7guaArU) +* [Brian Beckman: Don't fear the Monad](https://channel9.msdn.com/Shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads) diff --git a/monad/pom.xml b/monad/pom.xml new file mode 100644 index 000000000..ec5a14a8c --- /dev/null +++ b/monad/pom.xml @@ -0,0 +1,43 @@ + + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.11.0-SNAPSHOT + + monad + + + junit + junit + test + + + + diff --git a/monad/src/main/java/com/iluwatar/monad/App.java b/monad/src/main/java/com/iluwatar/monad/App.java new file mode 100644 index 000000000..2ab376201 --- /dev/null +++ b/monad/src/main/java/com/iluwatar/monad/App.java @@ -0,0 +1,19 @@ +package com.iluwatar.monad; + +import java.util.Objects; + +public class App { + + /** + * Program entry point. + * + * @param args @param args command line args + */ + public static void main(String[] args) { + User user = new User("user", 24, Sex.FEMALE, "foobar.com"); + System.out.println(Validator.of(user).validate(User::getName, Objects::nonNull, "name is null") + .validate(User::getName, name -> !name.isEmpty(), "name is empty") + .validate(User::getEmail, email -> !email.contains("@"), "email doesn't containt '@'") + .validate(User::getAge, age -> age > 20 && age < 30, "age isn't between...").get().toString()); + } +} diff --git a/monad/src/main/java/com/iluwatar/monad/Sex.java b/monad/src/main/java/com/iluwatar/monad/Sex.java new file mode 100644 index 000000000..8b7e43f3c --- /dev/null +++ b/monad/src/main/java/com/iluwatar/monad/Sex.java @@ -0,0 +1,5 @@ +package com.iluwatar.monad; + +public enum Sex { + MALE, FEMALE +} diff --git a/monad/src/main/java/com/iluwatar/monad/User.java b/monad/src/main/java/com/iluwatar/monad/User.java new file mode 100644 index 000000000..de1be5a45 --- /dev/null +++ b/monad/src/main/java/com/iluwatar/monad/User.java @@ -0,0 +1,39 @@ +package com.iluwatar.monad; + +public class User { + + private String name; + private int age; + private Sex sex; + private String email; + + /** + * + * @param name - name + * @param age - age + * @param sex - sex + * @param email - email + */ + public User(String name, int age, Sex sex, String email) { + this.name = name; + this.age = age; + this.sex = sex; + this.email = email; + } + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public Sex getSex() { + return sex; + } + + public String getEmail() { + return email; + } +} diff --git a/monad/src/main/java/com/iluwatar/monad/Validator.java b/monad/src/main/java/com/iluwatar/monad/Validator.java new file mode 100644 index 000000000..7cc84298d --- /dev/null +++ b/monad/src/main/java/com/iluwatar/monad/Validator.java @@ -0,0 +1,81 @@ +package com.iluwatar.monad; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.function.Function; +import java.util.function.Predicate; + +/** + * Class representing Monad design pattern. Monad is a way of chaining operations on the + * given object together step by step. In Validator each step results in either success or + * failure indicator, giving a way of receiving each of them easily and finally getting + * validated object or list of exceptions. + * @param Placeholder for an object. + */ +public class Validator { + private final T t; + private final List exceptions = new ArrayList<>(); + + /** + * @param t object to be validated + */ + private Validator(T t) { + this.t = t; + } + + /** + * Creates validator against given object + * + * @param t object to be validated + * @param object's type + * @return new instance of a validator + */ + public static Validator of(T t) { + return new Validator<>(Objects.requireNonNull(t)); + } + + /** + * @param validation one argument boolean-valued function that + * represents one step of validation. Adds exception to main validation exception + * list when single step validation ends with failure. + * @param message error message when object is invalid + * @return this + */ + public Validator validate(Predicate validation, String message) { + if (!validation.test(t)) { + exceptions.add(new IllegalStateException(message)); + } + return this; + } + + /** + * Extension for the {@link Validator#validate(Function, Predicate, String)} method, + * dedicated for objects, that need to be projected before requested validation. + * @param projection function that gets an objects, and returns projection representing + * element to be validated. + * @param validation see {@link Validator#validate(Function, Predicate, String)} + * @param message see {@link Validator#validate(Function, Predicate, String)} + * @param see {@link Validator#validate(Function, Predicate, String)} + * @return this + */ + public Validator validate(Function projection, Predicate validation, + String message) { + return validate(projection.andThen(validation::test)::apply, message); + } + + /** + * To receive validated object. + * + * @return object that was validated + * @throws IllegalStateException when any validation step results with failure + */ + public T get() throws IllegalStateException { + if (exceptions.isEmpty()) { + return t; + } + IllegalStateException e = new IllegalStateException(); + exceptions.forEach(e::addSuppressed); + throw e; + } +} diff --git a/monad/src/test/java/com/iluwatar/monad/AppTest.java b/monad/src/test/java/com/iluwatar/monad/AppTest.java new file mode 100644 index 000000000..5d23b41a6 --- /dev/null +++ b/monad/src/test/java/com/iluwatar/monad/AppTest.java @@ -0,0 +1,13 @@ +package com.iluwatar.monad; + +import org.junit.Test; + +public class AppTest { + + @Test + public void testMain() { + String[] args = {}; + App.main(args); + } + +} diff --git a/monad/src/test/java/com/iluwatar/monad/MonadTest.java b/monad/src/test/java/com/iluwatar/monad/MonadTest.java new file mode 100644 index 000000000..5ef2ecc69 --- /dev/null +++ b/monad/src/test/java/com/iluwatar/monad/MonadTest.java @@ -0,0 +1,42 @@ +package com.iluwatar.monad; + + +import junit.framework.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import java.util.Objects; + +public class MonadTest { + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void testForInvalidName() { + thrown.expect(IllegalStateException.class); + User tom = new User(null, 21, Sex.MALE, "tom@foo.bar"); + Validator.of(tom).validate(User::getName, Objects::nonNull, "name cannot be null").get(); + } + + @Test + public void testForInvalidAge() { + thrown.expect(IllegalStateException.class); + User tom = new User("John", 17, Sex.MALE, "john@qwe.bar"); + Validator.of(tom).validate(User::getName, Objects::nonNull, "name cannot be null") + .validate(User::getAge, age -> age > 21, "user is underaged") + .get(); + } + + @Test + public void testForValid() { + User tom = new User("Sarah", 42, Sex.FEMALE, "sarah@det.org"); + User validated = Validator.of(tom).validate(User::getName, Objects::nonNull, "name cannot be null") + .validate(User::getAge, age -> age > 21, "user is underaged") + .validate(User::getSex, sex -> sex == Sex.FEMALE, "user is not female") + .validate(User::getEmail, email -> email.contains("@"), "email does not contain @ sign") + .get(); + Assert.assertSame(validated, tom); + } +} diff --git a/pom.xml b/pom.xml index c15ca20cf..0b587fd06 100644 --- a/pom.xml +++ b/pom.xml @@ -121,6 +121,7 @@ event-driven-architecture feature-toggle value-object + monad From 72e08365b83911dac55713bfe93a5c7b0a0ea208 Mon Sep 17 00:00:00 2001 From: Crossy147 Date: Fri, 19 Feb 2016 19:08:35 +0100 Subject: [PATCH 059/123] issue #335 documentation improvements --- monad/etc/monad.png | Bin 0 -> 32962 bytes monad/etc/monad.ucls | 54 ++++++++++++++++++ monad/index.md | 10 +++- .../main/java/com/iluwatar/monad/User.java | 9 ++- .../java/com/iluwatar/monad/Validator.java | 12 +++- 5 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 monad/etc/monad.png create mode 100644 monad/etc/monad.ucls diff --git a/monad/etc/monad.png b/monad/etc/monad.png new file mode 100644 index 0000000000000000000000000000000000000000..f82e7a3e45ccd594685571d1e9ed30299fcef93f GIT binary patch literal 32962 zcmb@uWmJ~m*FQ*iOE-vww9-gR2uOE#2uMkHcS$NOAxL*hH&RM>NOw2Px%K;t|1;0L zm|5d17mLMxu5+EU_owz9rXVMYjzWwA1qFrvM(VW^6co%D6cn^G5)AkWotAPc6qIk+ zo7W;Lu4#K-sGjJOw?ZAPi5@hH_Av-lG=a4&R4SIQLkn=ey~nHG!AWk6c&)NZEc$E} zpXzz2H2rg`XJ6dyi`4ZeZtC8SH7bjy4m`B-b~evddC1AVHj{)PS0ObG+mjn3$<**1PR<+1` zUjvTV%0iSbUL-#IL%qgTCrWx42Uuy5pn&Lvl4<&wS<$qd`L*Hnkum)%<`S6GQ~BWF zmbq%nd)l`<&`)U5u6E1TLPrL|t!7T1b=5+R-LbXAxjIa$wA9q?%_+mxE|d1`#uMwrDw!1ngjuKD7-yVeg(Mln`fBR9FQc1TIR)jj#$&o0ar42v$}I9l-gchJpK zNOa=J@tF-g%+YkYOkWP^{tA=PP&_3&^j4;Lpom;^Zp z#hRUIX?xZ-%)K!_sKiWBA}>_P-wKPxVn-Pz$41f6hn}n>NMjIx$hFR8?is^hC8Z5t z>oxYcus+95!hhWKX1^f}`IFKW$GpHvTGO zTv@fI=*A(U(_&2{qM5+Yt?)ccL=y4_Cc!=E%(dV6fuGO)Q>wr+nMDtif?T)NTWzi9 z9IMsyx=YZD51IHQ3E@^JHFR#Faxb#<^|DBCh6$w<}Imb$SS8r7!Sk_14wUkbe=q{cFi>JCBcx3;!ye z*OC4<{v+gJDF;U#A_E(p(iPaz$SosRxuXmy2Wm*@`A4&!LT*|20qwBjgWctUVaZg! z?E;@kU&MGYjq#xmL1AETOzWuoCuw3aHZK*GKO3XoSTGIt=F8WnFh?w;Ko}KkZecct zf2s+bKUW_*RwRNFm#QBRqMz_6LIbq_m@p_&SeuksNVAmScZsEDRNz-h;b25aej^}B zz%rzM6HW^drnCr{hibQ=G*!k6bxc8#OBc8v?upea3a)!BDAPYv2*l2DEkW9WYk*u% z2gPg$Q{~hStW7rLz^^6#9Z?H>_U;2{2!V5fmlDl9GvK{Lud?o=e!dUQi~Fhbvz)Lm z+I0p!d;p`Kv?vDutUAbmv|t_`mjnUBMC3iq4sj|T`8zePPQ2ip=3QiajCJVqlh2P5 z8ng5ABL}Z8*2eZ2dykv0P44chuS+SM@fkBiLKqu^y*e{j#&Tp)Q5|1DT&=O_uB(^o z^tZQ55aX})#c|S`wE4cjDRSSRZ3%mV=)ayI-RW_8QA$I%z0Dr(5RSr zBo%lx^y=|umj?s8(3LR~bK<#n9Bwcbvkk+`kCHK^ip^`%iwj-6xNU`1bnTAj`LaSM zorWdHvEJLGd*7?t+^%zK3kvMFK65X+CYmo*JcVK3pKaJ}2uv|&(ic2li~0KI7hxao z&ZLuQB~Im@zV|f;$Jqj>RX#ai^$S67+RA0-*AV~F_*2G><6fD!m5O>p;Dz&nV@FVUe zYYdc~ht&wqorxmkiDqXT3Yn)Hq~zqK>3nXLY&ci9F4Z+P)=MqovOjRyH)EOK9W9gB zb9}6^7(@Etmj{RLzMi;2pX<1(rtjU5A-?$Cquz8ddC})_Xn7fmj;;yZI@HgS{`@Z9 za2B+mU5ot#QgbH0Drz7m!HBntYQ0+fIn+WzJ7Xw(dH{l3uR zmE~2>7}{DqZPd((ARGOAxSvO7x{a>cE|bL!ltexcZn^GGjuuo2m}-Tf`fY4X+??;i zJQE`>pdI|O+lprgPgA5jcf6jQ%8uH{6H@wR(S4WmWz};Y>)C3-xk`(Ry%nBfwV@wF zCD1Sh{p$KQxExE@y;M60?#CUdkBG1+O~_WEeOfi|ex&oC)GaAJIz6FDgROUA72tEn zv1XLh)Yfjx@P53f3%^X3&XVI+z`=E*++88PJT%wPR1FD9;jyRW;a(+RB4oC}*R6TK z02e}74mt@ElMatsELxqz>}n}8ZAgF#cT58pa_oyQ<=87xvY^6s^Cp#El`FPGtWSFi=<*)Dv} zXTm%T45TZ1-}#U}H^}MCM}o%d%SMm1YM7{juQ?3u;LE{jH7n$O2anOt#j`o8j7tdn zXbZ2*63C8sd%Y>Z(^ZTbqTA$-JQ79u`)EZKlib95fsevaqtj{EtnY#K=^!tmfjRcb z)xeKWVtL3&rqF**Ndc@T<|d?12i{&D-VCy48fAP=A#~qXda-(Ws2_aweqk2nvsXi# z3@Mq-Zwtmkh(znWXiz((zB@fx&4Qt~fPR#(3N zDw_@JEIkz4OmqZH{#T|Bo5%A5)yx9#bb@pE+BE4IH(F+k`zvlWxUd-(B+Y3a9SGW{uuRv*gTf60P>7gocKZ3wp#l19=o|gs@&7qtcFrg=b7mDK;;L&Facp zb_Cr{D1DhrZ}#g{N> z9&+=qt8)1M(;{!>;pq9{lFuEKi{O20Z;wr8&8r;WyG0Mr$Mo~V%Ujng#LU33s*s2i$JtrNfVP- zG#Wncr$faef6kE zXFv24gQ3v;RhUbA&21~|+Zg0gEl|PDIcS^-Rl(jCNomtkFuBhoj-u1_hc~F}{2{ZVS(t?&Fc^RZuo|t=w znXtF#x^n#_F8}Q=>X%2g+4^u46lGY69tdwsfVM|Q+#rraQ#5Uo+x)y5vbvJ zc_Ev@L`I+C;=8D^+p@oYW%O*#)JHt7QUkaBOIwmT2Jtu<@ee|@m*(!_{*|j(aL*VS z2`CP4j@HpoPNBd16IYLhfH*@l$`U7G4)AT+@-_iOKKNqM6fJEWcvaI}#XbN!mF zXW%Y=9D=HPeN}B{8z>HHmvV1RFLev3!C_(9Qo+jSyRD(FqY=cM)@*O?k24a^ zL7FLHmR^RV$JwpxZ(pYzgs!L#){f9P9E@Pl%g*Aes$lh5lQMl?&==gIvffb?weDoUE|rAyTa-zt;RsiX+%Cg&Y9q8?1{ZNLA($~2hf9gy$5E{6o%chE ze}5qs5wMa%4i~O@pB2dFNoo9hIF%bmEC!vPv1ms*A8kWMI+-)^oOm4qaMdueY# z4-r-_eYPzhC1ttgLMydM{TJLS>AL0&nhN1X3l6Q{YM*YCpwUPj`Kvx*C{LratroV~ zwmI9@_9PVcVJeRS+{RR%kdHi07bcI>mrbwXzt@_ud509U4y#{gds;VqTJfFfxa&Xq zVz6BOu-7*@2&ob`25#d1pCRvI+%FP3?|g>`(F0MBOGf<0C~6?FIfs;jHx=YD-%>+Th^~f#&I;`KIKScM~S2BqvwL1Vf)WRqnjM5&cF$ zgF|opC?){lG&R;{ffR&QH#B^Drm}UqS$DDh>&;9s)}{jKjy>$N|Nccbvb)ofunJ?? zCMPRYFFr56mHv3+wcghC&8cjk$I?%qD4vSE+xgfY;IV8Sfgd$ldXM$B`MW?2Ma=rM z+&t!}P{K}J_sauuMa4C^D2J=7YKbgRiw@?mN!2Z9s~>_;-}rAtthGM2_yG9&-NU2q z-9(C41F2Ji_7nq^;o?G5NR6D=&9;$B{+oFB5X>?o^>Ni_GXt1Js}YP}s?kZzP(R14 zS|-Lo6XA~E*G$b)64+yyX5(-R2MpsP=(;I#{Y+AVP`rG9fXZS>w`1D!Wcn*AekHSz z3B8|B!-os;!&+t7*{A* z;6@k0A>4SL4sE3K3w6v;_{?{I2#vScF3in6n$q{t)G^mp{aEq}RpJRz0ztl;ni$pIyxw3!}I;6e*jdkp3F@xp*QYvlD1fZ1lM=)!{ltejzO z^+ZWGxKEF(aKAdzLrUYV%ClV>eiczHD&(Hfk4xM|%HiA-ncd{v1$&;QpS!<^F=CwA2YcPEe@YOhr)W(WEnYxN`j|!CV)TlUZj#7Vba< z2|bm?=%Mpg(5eGXxvDt60l;ebU@ADxbP0a@V9YHkoL@+;< z6)YkV?bDr9-^i~wh{_D=*IIX+Z68wF0oLt4oXzyVuf|so69Z#wstlFzpg(?>Lg>Nh zx0DZk2q?hSBBLb&K6l5O0SGmLK8$BT^mz43Mh!6ql3P_F!`Q) z8rC5g%+5IgLjbNu}fQudg#&9+OXl_p_J4H=3pF zJetS~VZYh6f2k?G{(E1AQj!1HR22&e&L)C?_!iQBrlS6{@$Nztz%L!?YNbjEtdB6O?=<7>ccTz%)h4c*iUt~G~W)o`e z%0=k;(sQ8h;lz^A;~Xr=e6_tGAVGOfQbNVqlHiG6nBw>ZKu zY@2U>$v1gkG!2`uUw4+11q4prM`lF&M{bA)ps`%s0;-uZ6@=7QZ8fIPLI=i%0EFmXxgW2@gon?;fyFZMxz+0(Hcs z)!WO*`=Q@-koFFceM=S~V)!%Uq%}fcoj+H7K9VW4Gh5?j+=~D?t8qXnM60#G`OuNh zpNWWwc(!$nBBR;h@XYlx(`WJ5H&tUgI{wk1m*%y;h_BonAbfao5+6VbdUH@);^{Dr z)@9IV{o!+p)HuaHF{%e=(c|~q7&tpOf6`1G9d-HjGwI|}&4e+`h>XleS&5oeZ+@}1 zL>ttS@Lec|xmGIIgJZ`}6SZT_$(T!m*;j8FTj?=2uMVxCN&Pok@!sZ}n{T(`!DKgg znk@KEUs>#pv<`Qq&&_C7urWn8HKD=)LZ?$7OJkwtUaG-f2*|XCG>|!x90n5FK~Jb+ zvw)WC?vb;d8YUz18%%a-Y~UPK&Qt!%C7Z$q#RM(uFF?D(b@aRcJd2;{Q;MS$BhizW zd7#Z`{0>I13Uf^HuM8VouM&y0DZVm&36nSNX{S?ecv0l4PuS2D(Z=hLKO*_!PC7&Y z=+}SO=)DH(GCXDJeSe-0-q_RFOdp4X`MA(BRiF^n(VZSkZSQC$=XK3k{#rC!!DlA+ zqyO>gC5#UAHm~Zu9^`;LDnm>3o$O3&FF)W{niTdZu`-F&R z2(>2igfP&j5=J_PRtiS=+;BAMegFLMKo+rZ*B_7Qb-Qn7fr`>UIH=UjA33uizD)Y+ z8DxR0?O+rCEYRzf%VsL~h|Og2ip!FXnCszU_fRVLxHQ8$sR8C)A*|i`JL1rY>K8zi zeK$AxmNY=@H=ZMgGw;e$nwVDq{#@tGJ4{M;_JqI7XyoZ#=`30V74t?WDG@&$mEa=~ zugzCLW5Z*lWmqKZ**l;X+N>uhVkWzQ>U%hBJ(OGq!jtE9A|cTB;go~>8=>!eBq!5Z z^#v>BGv)j@{3H#st-!i9-|m67##bOvAx`zItw z0U%iSo(v~rPPmh|cYiKKK}DixCoOH9MYkEKbl@ds@3tnoEFLe^GFyYzhmCEl@#Feb zJHWpY+^)^vCWzg)KrHzn4&&`jhC!;)-Z9!ZTSJyD6Mh*w*4V_e%WJ|LQfAxqO?9Yk z+0N%09WMaLh6V#{n%oLo?ihvqA%~YI?{-#JW`Telgxc$m|H?g~Fw>E;-2Gey!Vqy@ z3FykFY4i?DqZ7M^fphzVOiBWDo@tM&4o4CsTNBDnD6aQuQ8)%9z!gwAe});aT5E~; zr6}n9Oyeafw8(q(?amNMaEB;f_3?OcRVe1n?imu^5OjNAtzaGXjpf|FXkjEl*3i}t zeSEStJ0WxNb|gITV{08X=7-=_o2OVv-2weTAzPa)5tGj}BVZU5dQ3CGWJZBEEBJ}n zC|>EOUYZLSMfnkMCjPILi)0US2(;XLfe=XP(JSA7K6^>R)K($srWF+oQ_@csf9&#chLI5Dw}+ z-@RqGjSl7Q~y z3vn0#j8@5dXKS5qPX^Eb9Jo}7CQa{)+z2fy9)$dSt{@>uu%eS1Gf12qErO3Q*mq=h zB^39ofz0R!IV^)4>JUV!o9 zc{9*JthOxlCm&z~!%=>z)V|*pI*P#5OT{K?5yFKgC7vdI(EACl(3vF6Tx}3K(duBw zn>Q=3bo@mAsNbC&3sBjj9VUr3tBc)xx|(okw$WF*7WZ-f8>#H+{B=e#0szE2I)tAZ zR-6PW%?&n@Ystq~oJbU31ol z%S!Vvo<)EGy-{cfN_zqX>Ljpivgv)_93r`%((k?gdM{1TdUwKb0Oe5@CiYmP;bkI! zzB|=DI|~DB$B#ilyr>j>xXiZ&B_Hf}#)Hj6u-a7GdMQoN zy-cd_^BsADWru(S84v9@0^yl9q1Z(g4K4}PIv2fKAV3i^-Uqhg>f1_V$!;g9K<0F^gbF#qQ9!G0a18U`@XE!0dS@SYbFLp5>6y7M&e^5kki1Sxz(P}D z^+sm-+|a4TN65H4{7n?el$ckk&YP8I7WUB+QSW??M0`~0-;&flKDZ!Kk7T@kEd$&u zOumz&6-CPkPp`QOudgp&sO5+k2cr^1FVx%DX3Yrw`j3IBgP67k^eHro#lhj>o%1Pu zGk%J2-jK84oDQU>#!2xfqgdT|2>`y9k;F#Bh*Uu{^~j|2$pH@6=wvlWoj1TLB@0b) zUfJ{7YWYcc$VriPAda&OGH-8H3JEs`C|@+R!A9Otw%kB|d+o2(hDb;A0~or|pk$h1 z+I@+RuC+@7mHy=N5DAkmRngfht;q%RDb6zkrQrdE&NGCq=jJ z$-Nyw`TVHXMTSMf|6P~gMK%ul%J@Ox`l;mPco&8^;Y zFTNir9RY3ZYS6=qC7)+9eaJ-!5eR}PfAEHsW*7-SQ4su`^KoJvj$L*VeQQZw%^A0= zOLlwl9xurN7#xv~Tk75zz(XN^a$}pPVo*77VT)uy!ZdX%{AnKj3YX2y8|m%v&=7|x ztA*|q&w?)8aNJ8T!H+BIe0!Teh@g8lf&YtfAw^;FtEa?R5)&T-6O)|xXX|KWrS_T> zZ*Nx^Z1=AZpi{*X{$Ag0y~-E^eR1S7=a2sW;mJvdyQ?}A%Mi%(i&(o~9O`fE?{BZJ zqRCutjkSIdk8nI{G}PMI(NYHusijY>R(x3xsZF}&Oo{Br90G=?*X@PfkDqWu9*d5f z(XT(%+ZI4og)NhoXmM@?Enied1*I@gPAC^}J&&QyBIW2s(vo81OerQAwe>WS6p@k| z1;?ozZga%eG)*k#6OPyq-rSx*9?8Nslf?a{D~e557V-CmRICDRdp-c`!2zzYOpumN zW^lT~2d=aUa_(SK#4!uJbms@$=q&wK7T_kVeNiy>d5i{aAaA17xYtO#?){fm2!wT& z-Y%DatJ`6Y*EUgPx!3-5b%kN2AFFL;XF{3x@#=i)`%zXUk!f8|oI^A`szj9#hA$|S zs--%}X9~@7@u|ortzNfS2TaWj#hCg0KM{5|Nq^$x=5JmdPXhs(pKmsUry^Q%M@#Ja z2I)|$koF0~9CaYS%X>Vc>xWpX7H(Ve*M7@3;E*DHZmme=w7ObwnZsIaa$#pgOoP4Y zLb>*NWQ9+J(+8^eMXi{cARM?*hss2?s?jJKAt{UL^U8#i9>}vUXK70 zH3X?9CP3N3BfcrMmeAE+1JM2U{_@@^!dDZO4{ag9WUmZG^JRto+8zKjUrcb3WV(2I znNz!X28<6(sK) z%eokOD?&GVszGYq;bNaRFP1l_p!JkSi+uy%86FI*uK51pr^(C|0ypeFD^NkZtZI$H zT1k!u3ZU%t(bieBpHEl#S<5k6NO{`XwTH&H%(u;Tm%`glWQml-#%BHeP3r!jgvT+$ zW|w2HKPtyHCOKhWHLa)o>oi>^C9#NINdRN?OT`!y$on zZm5G^7bnE%zjFEqs)xIgyM`sIo&(FXomau2$@xHmby{Cd;MjxlCy5*-673$s841OV zBBjL!vUOXBg+l~Y5h%%73d4qdZFE~9{mfPer9w zfhjNIXiX7;N5>Gpvhgx7l1;t>PqYT&=z+asgj!u+HmEX}$DPIuHY~Kq5c7Qln}dA= z{WzqNSQ^<_+XJ0@dzj53#`4@k!vt9$E-^^~{}!5fks5&}>ApJHwdwcjIj)E*U@Qhm z)e_LfG-=SN#!3GD^g^o72lQ9CVVJE_@+;5f(q1sR?X;Yd7**w93$I!Ya#cO5VPSEk z!8(d2x&Dh(H?zw1vzSk|(p&?u&tq**#%7tuW(cJLlLF`A+3~22-D;QBsxiYk4wxah zeH6YD>#LWHR@Lw~~kk}~Vp#r_K5 zl162+1CVWIbJ{V`iB2CFj%G~;FmRFw4kkMiK>RG4dZ4O^cD$0k+LFh55{Udfb;fh) zDDo)uDfWmR2TTaSPH5nTvHC08TgXOvxglR8dLE zs+`c~GcY;Hjr~sXjt#vPLSCXkcWO#&7+n_u6k^ZEj>iGmA4f+9aBVM@l&DLJzg0a# z&s3Ur@`mgYztc^F{jo8~I)(bBdmLm3N|bvGooys*9TYFt5%l~VH*rK#S#+fl7*UY6 zUPFLBA>3bv@I<9nkpb1qC`6nbCE^t!z7rc7bY@K_HiKMFrehzAIZJ{gkmffIiP8kq zmk$nM#$2Di>31w&9Y#5uup| zN5+RYp-O&Wf9x@l$u`TPgNK(mK(|Sm(A>1m`!AbE{|ViL zMH#MXBWkjH76=BBgo0=ioDB&090?Si*+o|_2FVC0G*lL%LsSueE&!tYe%wuWc1}!A zzF->-VZLJR*V8c?Zg>8^O7MJFw|+d}9{_#K6SCaUJ7TIfCvmDL=z06PVi#~zSwx^x z&ez+w&CXJ@v!4OguQTM*sOVUxk{~(7v0S&TE1B^Z_&t!38MduJg0aJV!A#iGC1?_5R?7IZV^h-BITd8Vw& zu{oR`g5#UBRYwd(I{fCfCX;?wdtzCb={*q?!CccR4Pc%#-cr59*w$heXv^K4v*o@7 z4){wdDCUr7Ml1S03%iF)?5wOZ$19SQDKO7Jv2FH!5~S!qVq7P6+=%o|1wtA^uWf5y zk_jt|Kw3_*%Zd^vt_l~9Y2F7ONzXf3*0TIn4%XIrCI$u_E`Exil~%=PjuFtxQwd-qP@83c2$zc6#97-A4}6u{q%@P=@(>K8ek zZitkJvz_FychFVW9_-bc!%Fjn2LnOj6E4aprf3YdK^a_av3pa$p z5#u6l&E2Fr!O;MBZdwD}CrXPnZfjIR;WrnnIF1-CyLe)nhaGw3z-%i?m?i$1m33ff z*zOsNh)9rv0G{yYqZ*`h2Ludd2q*&Z2m*KjKXQQu1u+p;q;d_lhj!=9Xrj5c_@agY z6<16Cbu|y9=_I@A^7&NCUgl}1U6LecPgn-o?s11!`Og`fP51Z>qlUvrX~w@cFE=e z>6~d0Xhhi8y%d>Y1a`XLKO>OmOkgo=629o-7WB?veHtsQKuSBviw4aUkbz!cqB#D& zzKcEw98TC((rNn&uHU@8$YtwdcG53vj=zgl}>zghz309G>8lowm;A32m!^n zH?_u^Ae5rs-~hzqpWQzB8^3db1n_P`VSpC_eTSTYTkIHHijp2)|yyMH!iT=LO^mAThG3WeN^qprXDX`x2L>InvIHXkcsWwblb|kDiy7 zW20Ti+Nx9b=cFOpV}Pt6Ock@BMx;eP=l1|K$w3&O!xd+$#QC@sum2Ag#%+* z7k~&f^mJ)rW&v+R8(<;Tf}Iy}8e#DKRo2U6U_;NSb7#Ebbq0b!rR7-~5W;#y8kR|Q z1xdQ5d&2d(o+?Pxi4IaPG$m)GrWU#)zERY|W6VL=Vc&!7+_QDk5pluwtue3kbTYv^ zyU?texBGvq=6?%bAe5>1m)@;5gG{tcQY1ldu?|tkMRBs|#auoqaIPwCQ+GO=-JXJ9 zbv^D$w2r85X^^8#5gfqY#L~{Vy?hy~+dOFX;VgIYdkuFs6HZEnDCHl=jU_VWKZYBe zQUsNi8`|q^x4h(Esuf?p$dX)vuz*r$X?u)Vxm%I3!WeT>&ASf5q`DnQv}( z-|}ehrB@=utpUXymRpUD7GNDBq9XVqSIG(>9{XebSx(?X^UuNUZyM~S+LP!B#LnG` zQLi-_Xg8Mu81-vH2M!wo5Mmp>y;`$o4&ao1Vz+=ma&_&*V`mUlkHtJ3mzt{CRJ-=w zV;jk3YZQkGIv)~Wl+c8N1FG)~Y}-)kCUB0*t382Zvlu9tRnKhTLm$fxy#+jKZ9$&#c7yMEu;O^Vy+CfW!!z+(@z7q)YBGkn z7T2UuVK!RG3wW&i65?nOjD7*tq}cip0fghKD#BclD-G=ey|ucBhg;3A5u_-iDPl~C z6t&#l(YzbFdEC#8Gq8ICH8VgE1A}bVu_F+g^WC(odt(OwAfm!A%~VofVDXl&N#wpPfKe zf%W^xd4y9?(a>Py=XW{i1BoCw?<*>z$d$8gK>h_K(VCLZS`#z9XZQcI8VMu>sx{I| zx5Gt&$l3ry%7|(_I{8xWmqj?lH}AD(m2%sqiZp+D?@bHi<~c>=GK+p@H@=}3a9~Fe zqfB9vO>(p#qA20ab?51&%VgRb?>_}T2LbE*5adQrw@qLpV@b)PbticJ^(=871bXc0 zxztecBTE6Z%r{sc06yJfCv`)2-*EIMQNy~QZK+b;36KQrkO{*)A6L zPRqH;62nd(fuzyQWc}!41OdEw8?sq{WFQk)G%dB(FK=z(p-EYQ*#+s0>ZAmLf+Q-8Qi?ILcrFP(E8f>7il~BmISWX}$w`QDm1CpV@ z?f19w{Z=Ivd*9$FDSB%)@eMSAeh$6=w0_@`Kb;?wZAQ&toYO`tQ}SS`6^%$&Cyl)a zG9U7bI!&B7_qF@)pQcL4a8LY@9WcZqF?(!l-kAyASEu%Z>~GRO!Tp&fmuz@^e0oXA z`qi*LttZ4?MSJFDITWnn=T)W~z&3TCZ z#9oL0V$xunovI^4)o-dTb6A(&!+h1l3-~1aMooC4L$pXhBk&YPr4e@695+Vo*A^o| zP|66T4(5ROc-S%*d;~^|Qn_vE`|SS*RQbCv6(&ZcLgaH*<{pxg+80~mv()9JU|Y7u z#9`Vw4E@tOvDRP>MEwh236XMs!_3F`H)C%Hb`Xdp2;Z#0gWP3j$;ozomfJT!w@}x} zh^UE!g$Q6?J<&%Bp%?jQC%iv5{RSp+1Fy6!+C(RBt{dRR>flJwS@d%N{eCP1$due!o?ZLx6T1x&uQlc-j<&?f01D668k@FKp2%E7R zW`Ay)Ex%XZCuSIj*!cw`m}D_bz#jjPiN@4`3(W{ExrQm0L2} z$y-g?lo23I&&nn;Y?yWISJtfqGnuc&`SPNbE+Rx##1k|50rYTo3v|o6bBe2O#Im7Kv?YpgC=Anh zk?(|(NidCr4~7##xw&@t$ko26L?`DFt&hV-!TF=jo+?|G@O}z@;53V|Oexx*M z?Y;ysMeDHWXwCn^?mHyH(ooXtYdRohcRy0ZbP|45I0VBJs z=W7A|xCS2V|1`Y!@^lRDZ#2c9e=XP^Y)lg+`R8vZ47XG&)JW5~!`BsjK;-pPXe==K zmezU2^9RzFei&^2BSAH%q%iC`-G?Ju!h*4cf?X155T**N6!n+^AN?Pc3Xu>*p#gM_ zM1W8Xh^mqe1%4<2L8vGY6IcNX{4mE45W1j0hVy@LbT&_KJY6q{TIw9XBYXl}9FS~F za<6#a91n7|c^F*LXEFINh&yNjo%x2B*(?@B{}(7^x4J5cw;;W8-cV^xHYor!c?BO5c0ca zQrWUBwE8cuPhxAVgg~r{;e3!if`@tN z$w%aL-6z*1^#^n^%d@#TZHiZfy19Q>iHTA|*9%g5ncj^W%}v!;yW0@^*WAg=3a>^q zXF4Q2j+W2;V?;z%X%RsUG8(YT8P#NQdchnWghxfYU9X!-nccOpoZr5|QfcF@*JB@6 zEK-XCcHnejKcA=SFAU5p( z{L;;f$DEB~BA@YQqe(CQbf-@K2zXEDgMjPy=`0g$3dFCpLu z=zxJQF?VUm6{EV6YxA@uHMu!Ex~OysD>v%rO{_mi)Th>xIbR{=WF{F_^KJ7Jv&+L-nW@+4C4;mo1KW*A87y+05oEhVA%2> z=q)9|GFVy`*WJ@&^edm2m$$Hk62 z;H8!Uh*Jty2iWmyu;xHi2oN$}XB+mrF_?v}g*LE8CDwiF4*PpwU)Hvulk^uYy` z4keQu`%Z)7reyh3pqWd&*!D_V_=L|8N8XUDk1YrQt0$c-+7GN$hvT9M5=JhKEi(Kt z)P|-eq|Xa3O)fsQw8p?>HVWW03AF{X;V~Y&t<~h-j9`2e@q`(PdXlbwj$#UKB~yJ! zXkZ-{cgcstuLFjk({dEno))!L=E#E?wk`<31#V9k!QU;52Fa7AE--orrYFq|>AB?a z-a&Ti4gD>ZbtUC+wiZL0W1wfPb=$=o{*f*LNhUBwnaK2S3*zLIF>4Vt6n4xWp7z*_ ziwhHDv7L~AWG!i^GIMV!E>?EBz3+a@A|ViG04AlSemKv2pKa;yPSkkP3{#^k0rnK8y!srB>IG8d=d-Yb z=+m}R<+QH$Ag$SCyDB3kN!+3azaPohL!|$HKt`M?i%`LYJ)LJ9saXf|@iQWN=7;Xq9W@8AI zwpU3gkcjTF%4e>Y4RTpevP0YZ-+a&dB;O|c`;Q1$Nx1Effe>k^hD);YQ`Cg9v#8Pi zd_0;=V0s3~&8Z)8G$Y+lI{!V!JxGqn7V1UQ`~vKe2YC^^T~n>iLKizv7hX3)1h<-X zc|G150xDUrc6tiob1sbl1Sf*BeRC+M6kf-zdV5=m*O7+orc+aZTV9;o^j7Np0rCFt z@wiK>59mbL-V7Ut9>=K~%#6_u@`7R9mp~(ijI01(Rx}(jI>8Ya9GZqPleGVwneqSW z{HRre8JWq#H5DLP1R%nro+YtnPJfkezhOcXLNnu{OS;Jhh7S9S_5=1FF#FCfM3YL; z_G%f7WrIErA~HZ)ZbKkMF&UXKo6M>UJBrtYGz zgef&IcY7!=;(%&l>0)A1+~Ty0r4`cg2k}-=3WGQZ_DI?L`u2`}QAK)uwMrQR){1t2 z>^l%=^WVVc&?gEB&t{hD;l5>QYLN(H4`{Zd+TQ-PS6*&#v6RHLNq=!qW0yj?$<}q% z_q@DxtoKa%2QS=^5eDgtVXC6o8(zt5{5P>AZ+nP3Xi)*+NbKP4{a+Jt3HfM$T_yaU zl;gi1@0-q!AY=A4K>iZ$&BVY=F35WvCHleY|G7-7?CT|f|C3vs?-bgJ)3^Wnl{jJr z0@^PTjgdC7I7XOrgQOUrmhOb(#m9Do?_PKZv#ZeTzT>xd1IyeNOD5Qi0zJ(G7{3k@ z{x^{Tt-U;c?{hG>h{mDeZ-&e!-8KQToUX>FCzX49#nTZ~a&pd|@PfW-5mP>otTECTg})jd(ghD~!=kv=2BN>C<4c+E8cxq~?4!TKU=b0AiqJfdn zAk|{P{J}R=F#QmU_k8q5*kOH;Rrqj5(~_7+UXEE_`4i}pBwQc#Dos2UcY8dt38R>+ z1F9AFl3@N9{H#tEJ{J2w@pC4?&*k5T^XRQqr(o}A^AG`kUM0CbvvmIM&N(*L%@RdK zs%gWZvMc?w8xIf%6~+NO476I1{jp4+unoPQlx)QLEAa}+UxQ)dB(<7ruzVXHgEhhX z5656+`!{68CMGq%2Xq3U$+lGqzsBlCD~QgD*5=r>L8u zG*I=}t&>oJxrzeu2nlrJaTH|a)nJX!b%2o;P~~ITDV9T&*pvZ8gd4jUFuvxuZ$vrB z%SL9X&5cZaJ6C6GE>d-P`ae>dBO3$yo)xt~;7bu}z0?z$hWFkEO~$Q85mARMgB7%W z-~*i}&{|l)$tr>G>4*h@3zuA9W!SHo9{SWHA=pHVD34^Q`9%5@%&KJyr1Ds&=#OOV zr*f4%g0SXH6Wu<%J%!~$?5b1jnILXcUO_;E8|Mc^{w~~?0s;uF%@~p~-ak?!cPfIn zb||aK{uvori|P6Yf^$EyLHq}T$3q}E?2Hh<>9-xNcli^k2=9^~ZVT(dfY)a1zDOZX zxGfXLl3TCKTx~hg%it5TkLaw@)?k~1E}M!cEhk4sBoe~iom8~WGPw;XLdAH zR5K8-Bw*<_O$#}+E9A|pF8l90Xk&dkcl3fUu+y?L&q@%?^( z<9S}c*X!|Tr*qEzx$o<~#`}6-?~?)4|EElf3VI%NsaLl1Wi^TT@iVIq_x~w+^&kA5 zs(9t2c(mul@pOu=^YJnB3KkKqlV}$SIWif!CwlX8+dEIUrK{3P)Z=9XY|MF94aV=p z$-gd7zK)<9n+G=FwV5rnCa7*gBygSzD2z7zm zeeH$Gj|_U;wViPUyr;yOH3r&VQ&)?osdK571eMEcwp9;2Wmm}AjB55n$I)G*JvNB- zHR8mJ@F)8E_YJB@@-!+XE6i`24w1BDN!c>0iEB?VbBLC+LH0t*6SyPS1-jRrwu6~j0nm~GyQ}HFGf>g$%CZ~(2nWM$lGByH>!iY(X8HV*6dGrpoX zP3b|LAkWo>cj~j7+liZ0yOc!2ekD)}Il8#y1YP3#pp-;FfP@a<^cKsg62Rcc4Q{?12x zJK^yp(8Z}`T*`c^%vqZ5_%O_+1X`uIF#HoEMYg@+cUeEd?zItI-p?Z2#*BM!AI8GkpKFf|=gyV@OO` z@In*hZdHt)A3Y;}A!gL%IHsz>^VEl-To1%XUk?49j$P>&=P`3eM4ZewUh!Owpp?RA zd#AZOvIxmi1Z`OBM{y=3UaarQS2zefo~eqo89R=tT6JZy)2#`1}~3oJBv ztnmn}wb-V=%8+Wf-$w{rISmpKiPlBycf>7PTXW>G;{Qh9Cw#G*WqSlOr$0`e&>?d> zaCNt|eD~r--E0?53u~Ovx=#P_@T>CEj1a3LGqi`0M8qLmfO|MOm&~yvfV*n{w#?C* zujVInm9;Xj&tGTmnAsYn0018Bd=nO&)~UJ?iaLi44bq_OZD^^T^rIRo1bjTpETYw; zHvWFgU7D*>futV+3`G59kxPdcIWy6Oj`a)`l^+%^0>9=?=+Jd#L@f$oN&Z|UJ6RMo zs=&`utxSf0JA=hM=8hGwXL9CcHh=TSJDA-JLleK(Dp^cAcc~GDhuO|#X`KESFZ>=- zYtgWN_?UVh`qURl>V6rbHqjoxA`GYig2p?2E;Ofu!CrMDKC96~R{>Fb`iB}HGN>~I z9RJq6x94Qf)nkHr{S{4KQdW#AQhxyHFZ$U%4E+ofi7rr~D`3`3=Ly@2_mx{XaRd+b zrpLQpsi|sxZ}vYo8t?|#K3w|s^8C@F9lJyR%UW9B#-6tXXG?$YJ5!xXNy0^-l<2%> zT0;bwhLYTU=eRnQP8|WYHoZv;QuEB5eEO^NF6J4P$goeR+h|Q)v?A8(4PgL=Y5 z^8FpMM=9?F9r8gs$UFaa8Yo%yhupRxPSszvL^3JohbP%b2#U^E5DSrg4ZzD<=$tDl8ZmnD~oq=)KaZ zi8)gZMYtPGQWhW_n*htR9R@ z_}@#6SjTX2C^0@Zp8rTGRh|goyPhK7--pfA$}rSES!)53yKaE!h%&Zp&dgOS-oaLT zitms6D{W7a-$@6)O++Y3k|Wp2$y31Ll9PxaBjWH9oT+eHiCewfiAx9oTHTEBIB^}G z|L=4^MgDO7jAAkzeY%+v6J7p=Jo3L39b&p|OA}4m&@VTxd`@`msBo)1?KDQ?2qYmK zo$#}@=$R_@JfJEPJJQAmg~h&Z#?SH3sXxhn;-&=6={u*m9uQbQ1j;tRFOUg9=O^#} zxc$1ho`P?uRjHJ=TOBr_FVC}4K91;w!|6@O0^R$HikndR5>ta*qp89u3c(`~M~PvY zx@^Iugt)kzjkPtaqQbU?O4G;8AD9G$iK{K!W#fXJT<yO4kZtoQn{4(0>;+KqU8HtgQ$e}zUttFXku-OG!|JfhXx^&fo7 z*{RP$r}>A=oVi*-oK3UwCv}>H8V~d`G1w!EAEER^m}tWx!lrQzy&MXvC&|p=as4qB z_7)AG`&hYcN=Ja7r&YC8By{ta*3%H*UK?nlBGeOQO{C)0W*22$$}Zdr{r_adJtcb z>N%Nunmvy&Hp;?823loMrkI)4(c+Kz0 zd)(hV3!ry*l$Y3cFatNCi-7+IEeRJ*IM9e?mVH$rUc(7*FPbiA`vEku({1c9)*ZL?|# zTB|g8q)*D`%a!{zF;o1YmGc@Ow6sKz+xD}fnx?_y16-H*GME}Kf7s5(VX_f z0blF&#<4!hlV%Dn5_+AxAcg}F`f-)KocAD^T5Ub6Xv2n! z(WIFFn53p=4JP+toZ%0!BHmuQe}XWc-CS!IC#q9X4YP^esUM!2h4q_4f_43k!|ziGm0K-_J&5k#o+Z z$~DXu{aPsf1QMuf%d56P`e(Xqs#$1hp=JPT7?1`5kNNRqf%#(-&_Jy7dc~Qtaj-u^ zrPgM>zxz2})TLrWyAqV5h8@RyFjTGat`bYFB&hUqj)QoB9okIi{+7tM&oUL@cM{0V zRW#V9f2@3~ve!Dp87r6x@_xhRww`>pCQhJhs_Iqjln?la+LN-fGLcfZRJRjjaPZ z-&c|ImFTA|#eZ_^(1@bRdN7I+r{%!tv!dY^@uP@S*Ju3Zjg z|DWF97FJMBQ^XK%bZGO2X2Ez2Z9^>hGQ}zc8cOeA}egOwGj zcW(m|aa~2a+js44h}-9C18w}F%?xey4_wHfG;8I2xz_{NbZfA>NkRESe6)wp$%elX zU;5G%5{AQB*g018A(UxZTqVPVk9dCuT3Q8FTkC)2YaN7Mx@fY!>Y%y_9H*A=ZNQJR zEQLlGRKH>Bpog$&2d2$(19*RbR4x$U?{8i_hb6TFeJyPebvUgSr5lxP@5H#po&n+iHN+(ni)eHt+>{5)X@3gyixnny;|#R zXyF9-MpY9!eAn(SNRQ$@LZG0_Hm&1jW=){Y(}w!@Z(j=|I2U6&W`R&@P1TYJO z2GIZ*zVY+xd9V&Dm~53%QBlttVeUJE1DoQJxOg83yFkn_jvj~DIWdV*(Aq{dK(~5l zb@rkOcMc)m>V4>^u}ovlFQnIbVuy^us1Dr&P-liod6*IKFY)q0&^=O5e0x(}?QSJB zU@~JyqeTlACXfEjUw{zuf8h*SeBmvH4h6)o6Hq${(twz$>HV#v1pGf`DK5CW4&F^S z#Xh*QcX0qD1=i36Sw~=!0z3q$fN2&zV0l`TARd_$UE7dk2cCl^Iy~Ia*mwx+Tv6Hd57Eot-dg&hZ=yMpWoZdVgBi(%IT#2 zt?A<~ZZz2FgF0;7hufSQ?&N{qw4x8ypgf57$q$T*YSJFNV!yVUH}nCMV*NG=cNP0z zdIWEcsrj2fu((6B9H!1SHKRd-=JKLEXoK4?ewpjNw{cp;SK;BQuaCxd107MY|N>1t7@l=vIJL+2eBl0Gp#?c?Re zq;=}-*-7B(fcCm%e=~@+06!)q;{?vLWsztPPfyRc=985Ndse}hWd7w}KRhE^7%WsN zA%z(wSROdjmpP%`-FMvG-4o4(Mc$MFubq~bmPw-@22p>E)`tG$Lk*i=(ks2Yt?mB|ny71iG6(A>oxcK+Lz|)!{Dkmzo zrYNketXy1NU~fnyf9{3JM~2vkoheF5FpjNN=J;t~V0(G;Bah`5AyC&@8pt=R^&yPC z;l%!u-)$F;ryfo}ird1*!695L&-%yLYASx`tRIh$A+%iz$I4BFFh8qOY&deqms!_ax)fs3;0)r-{ZO_`2RS zwUyM&ikDYR2Ma7bu<`Xqi;9X0NA?dEhH&oOF+4y#=oe8F`*2fOh?MQ-?Z!rW#hbz> zZc11;Xui>;Bh%(kAoj93B22-gAi`uVeL4tvT&sRcb8Ub!xJ@VuP-Qc)Hs<3a2V zJBmo%+mKbw?4T-Zofgrt#pv^~=$K5jPcf0&4iIiE2J&+GCuWL-NlBsP-XzSoWeN9IQ?K6~jzbhJrR&@dY zm21?hw}2p|lAr3>4I(fgFfj~7VPR2~JltB2ycN!>^*$p5O8R#q@r`Y51^M}*O$Kn% z0s;axUze9{*4YT=3gIs|H^FOG-MmoAH&Em4St$rl!^%C(|PelUjUi zY(e>i)B^LfvrPjdt{blt5)!7mgnoZ0lb6Vu)2DUx^+hFX+S|XcFAR1^hJ+ZHn9RUB zrlyn?6-D?*M@QiX&(l7B{5UVgIk}^wV|CT`b4GglLU&5ACTmiC2$RwUIyyCXH#dPD z(R1@1zh8Aoa$f{C) z-U2O0V`F1xo^!wVPhEbb!nG2NdXmaZBz`L)0V|z^9f2iuDknR8YpH?SDfYypi!^8~ ztUMY~QPELy+$upN=5^_m)YPu7u5njVEXBvLh7QH%j~}mGxq|uscMku52xw=l&Gqx{IrQAucicf6YnK*Q@^p3tWKWW0U-!w(>Feq3uVuPty9o+b_VuY|Bw<&bhwpmS z$f#{TSnz`U%$YNwu9i^0I8^GgHkT;R=om|mC5N%a3w+M2$-cg)xZcUWE&-v3=4L5r z>5st-a?1i&vDz@E^`SRaCG#pUl)IA^z?7`Y*TM!g+K%paVIJ@4ReJim-rnA>E)Eo` zzq2zZC+FqH`6EAkU@vGY1_lPEW8Evj9mvYc#=7sLzIPo7JZ?aM^@#KgC1rYQDxX2) z>0ySWG$gQ;s>m>9ia?rehf#j6xcusnqgZVwPG%;&UN6_G!=Q$n2#b`f&BZKa?zCNMkoE*GG9G$IY zp1HZ_6JUkCNhXWt&swa zaWyd6YnIy2JfqrK>m8gWN$6e3e%*-d=sa9ZPm99c&_e6+qvGP<;%G7t_D1%|uSXg9 zQ}PWv*cY&In(vJH%Cdxe`XCmD%U`_!2k#Ndajb{H#e9m_!E!o;$qnkSg^ubEt*xV_ z-#e36S|TZr9P#kH`*3we#Vg3FoXh(b0rmbeq2T<=vh%0rX1!YPEpr3m>agK*%G)yd zvt)qf&~>BN%?G+u=yrFtXFnwj4wY`bPa-?Z9?{m^)KrozajSvYUsU`W2L}Njagwm({Lc9O`aSj+&_dF+n7t3-K%~FUGq9gCxTQAgzRw^knq)c^rchAI1s@Wys7QPPMJ$F|L8=JQSx-#tIw{LI0lR1-Szo;p^m$zII(uK+84_1|XAvQu5 z7PN_=i|mn?$9P>_FNkw#XUcO>xE53 zT{=@5Qca)oFE5EbgcbLkUtt<>W_4J%r7^D~~i%hjw4Q?6z_U-&R-lsj$ zC|Yw=lFuotYehwU_ZyL*jg+=BpjGHHYNn>nwR%BYpZnTEV*q9;=#b|ue zYC1V4=7ELS=8Xnmt?q0%7!t;hcMN~)B~0a)jGv)dCGTX83_6ogOcZ%c{p34htOuVb z2BhrQw;vxHnxAJOA{r@o$P^Ma4sKccTHUlU;_eYP(e|3JLr1qR@ym~X<4-&5>6C0^ zqX#=t6z`%@cQVsEY*-&Uu6)ZZ1eKR`$tlpirlUpk@~URbI=>O~y_91Q>?kG;77gwf zV<-6Yge2SuWz*e3x7TIk{jw^)`|h@s(m9;+$byDBPg?NJA#KCTM`vr04ZqUHPBr+IjM8jSqs=8l5Nb#~sFla%(g zvCB`o5g(0u#mDdJT7Iz4qtS?5W%2g5XpfbHgzQ6eD97yA))REj=`$o|%jEADZcaT4 z^JY4M70o}iftDwZJ9yXi(#q5{A~-k5*+g=2uu%N_Faf{IK>Y_#iu3tI88x2X+kWR) z$j!{oT{7^$1lKFx9+d=RIK-6I_3zLI6Cr}ZsN|rKyuh)eVhHl~;W~vjWb5mg%*>>W zjJCz0R4)f*n3IEFP0`SBctdxuC@ZPBWvSb%<;a`E`yMmNS8X|TePBZR(&fuGT6CB}liTWJ5s7cNb7o&JI=1y@0qP~7Vj0?d=Q*kgal zjf;^NUjNzuvn@!C>9Uv085+zOA$V66^twD| zV0f5{^WD3tq9BD*e@dBe-=s}eevIPhrHUemw(nbw+}#>3ILq|gZZ1`~WZShdKjZkK z3VYT%YT;9OQ$A7rM6TQ921*s??IT0-IvSFweJR1|z3`2ac@cik{@K%Wa&^Olak}Qa z5KPSt-1dzYE7>8spZI+YL#ZOcM(dJJy;08%{hz#MGgnGJM%||4A@_RQV152;YZMtS z;k`1)v!$A6DR#KIkd*06Pfyw{jcIeUu$W)`h%B{FpV()nLs#9y!i15Z7P189G)T53 zpR!jn6FI@wR+)@@f-QT6w|+YX$!lnN*R7^b{9vR(F8?V(U!@Gch-XpniaWG*Co(HZ z;n*cAz2bETKPB9=v&nf^5EIkZpL?J9>UG;|pL%;W${ai2h!LfX^!5f*+3eVB7h1M= z8ChD^Of*$=pTs%evZwObS8|;BcO3E+1{BTUbr&dm15kN1wZv-wceLK43~9h)%vYIH>ca{;?Phr)464hLVxc5 zwK_8DjwW7|8a02(Gk$$^(%bb32ASnVgl$yBlIN+!wefwYUOjNqo(F>ZSP zJcl^sYgT1!&&eUUvG>2U`!>}UL;0n{kvh1-)rFIDxHa@F4wt|V%eEI86>HPhR#cJ< z1wB%DYvB10ON1c-q%x)~TGvCVR8<)hT7(fv#yGgk+fz}LF6%eS_?y9__Oo9tYmYBs z=I3{w=?D*LFD_P6bXiVQ(2l9|f9Jfrxq0Hunei0snGWZ_t*W8Mi%4LPQ>rhTjqYpJ zW8Tkh;ETeqx(k2g)_A$H{IaIzmg4xJl^`JOcUvRJhs%$Kp`@gh;DKNGMdvtte>GZr z&;NyM6#EA`K|{I7F&@+IN6(0S_;^*Bj0t+QIAi=rE~1n9>G2s3zE(>DNSfb}B)%|0 z{jn{Q9tyy~OTTwVwyl0^r9lBu&12sy_#VHk9;*vBSpf%aWK@qU#&%^e&4<)+ecju; zCEK|D)sG)Eb2rdNh>u9~El|}IfFdC#hV@RN)wBYEgoL9H{aLePO!K>qLuArm8F{ z(V1x6zY|ifskIP<63RKey$bu5UZ009Mde8du6?@9JQ+ZVKG=T-3DT?8-EFh%0WG=h zQWF8E{06IKTpIMFhiS9LX!!x1Qa7vJY~RlMgn+4H5It%ZJE*sw{S*7U0#R;B+~^zg#m-#8 zR00p;qL$AXwVaG=gOHrt3Pqx-hJzlDtD)W2G8t!FMa9i61&2jsf-GHveSJN)NNA{G zvR1(4@=XMSSy~#6MiV(WOy?SR6^TRb8z^vSZcG{JoZ6~eSI{PAW_AmvOHhoZL0V;R zUjS*Fcz`7?0hPI#nWP7G6w2~Tqtm>erizMzkr6=EACAgA+&yY9x23H7dl%rDPI78% zz^Bd3nE3c0Ec$bvu1!o`YKcCd9F4jpw?33_W(XM~xSoe4EuShY%^*weOG`mzWM-<| zxk#kwuNfmDn4%@0mFQrFP*SRe0yfrNK!jhT@D}!QJiU!)lsuLuHZ~VGt^vqVrh}=L z1NLq-baZ>&!AV-@*$qO;!d+`V4^ckNc-!_MI{JmkRFMl$rM`F<*b9ubx5rLn_h z;2#n313a$k!k6MF3+k0_!{9YS5t-^-(kdz#&xeEaU9-gYk)5J88#lLvv~P+1g8a|& zk0p-xx_Z((Rsd=ueSNjGw9fo(HSZ(G2ev7p4CFH5SZtKKOsM84I-Va|kKliaa@)&~ zcp@eymLZ}r|5fL%h6dPz`h0_*(+m8?PYF?)G07Gp{ zLo;7P!wkyoZo1$rORKgi@0$}!9_R+-=HgR0&G${QYF&r&*nZmhC+?cFok{mGA zvScjKE=>5gy2i+8$_H>aaMGaX%E4(qSd2!*d&&hux<`1fBg(~3XbP+1@P^_?ChU

Qp*B@UIa0E8=T~$H{03}SfCn-%%U6SW5a^l!H&w=0% z_wiYw>u;=$e2EARkQ0p0ExX~X)g15UvXfzNAJ+Xf=3*e~5go=>Z;MVj3R>~`QnEb2 zdgGmF-@#@vM$kfvpu6)-X1TJqv2>H-(6`pqN#3Z3I_{)!&8cKwLWM{K3TR*BF zA)vu)&4YAx+>=Y5LEs&M{Y-veA zPv6u{L`6k>mR*%sbYOz&5=wkhwXW8PGaXYK6g3J%mF_hIC0)r1$2^aaTeiK~ zCN?FrD!%cly1Kcu^UIenABKju=KDDpo#2^@sxUcH%-Dd`xL2qkJEHDrk5HU*A$Kzp zWTLc6)pu8wxW6edf_9EY2uB0lF^Eco1M0Yip04#2H9b8fk&)+fuZkxL5m8rGwY9x; zi2;jdJ+$ba7TOL+i^==!KK}mpj*cB+SA13FAaQMpeB2zVzicp~RjPdJmaJO&c5Bi{ zB!o9o(q_+Autc~pVq)yHlZ}(lAcH+|Lc@8({u&n-9`3THY)up4mP@nr~Y{umEtCEL1>xQhX_VXD9kUX0n zdf31DwBVtS!=j|aurrBE!T|;#oAKr0!|m)68~WfANAKNhuc{JGn`*&1!`=Y3fl^j- zvZLdHGXjwcQZ}^c4n0Am7PI+AerMa@k3?LM6D65s0Lx*p%t;?)9pOhixXmNv_}Tl< z%E^Vp-FttEY@L^HFe|9R-(s;dQ9nu62%S4JI@E>E^`~}>oXnIo=;AOLfO|LPYu~y`@ zT3^uk_FeG7=d@16#(fh3tGPHG(n;~G0z4u{tGhkzJGeTHv5Bp zRmciRNQwbU?7pY|N=m=8^9>|f_pR>Uje(RNa?Z3gJ7}N4T4WB_(mLWQi%QV=axVX| zD0<37Z@P^{WGe2BBb((HdDD}T<6dOuUhR)_)C(;w0l-t6lDFU86mR7}!QWi-hTjW& za$G*^fpvCQPY=|Ax!JQV`<7vsneIbZNrQpG43MjrFAe5!2nlg<&a*_*TKu^Qd!mbl zidtH6yZZ>{=G(B~FYPiGzoGVAcZsRZLFkD51lwK0THwc_@p{aV>DYVrU>2_q4c6j^ zfX~JME!+D?et7@B^>*&*j;H%tj&k@W7MR`0<#vn}ec6Kz33A`z?)+EGpP>nfZ;80o zcV%s+VmC2?M>@utOKdOl4=w`7T4wKfLz;r(>i0PB<&0)2Cp)|9t}7XU8)2FSJ58>M z;j(`on4uLZMd;ec6wYv+S5-~@6;L1`{KDYU`deSKn;$kgjP1L-k=`@v1f)&Or|P*(#eFc$DSv!o<(t1m^5cJ!_W{aIeSjYT5B zBNY|e3PFDO@{G?ReO%WT`vdQLJSlVA-#WQwK16>0^tG94kKk^qpE()VEx(yqKn?lJ zN=o8@4-JlM@mo1D0A@e4?)z;>Uz@Qt;2nhb!v%|%QUN>q zeK0l$+C6FM>4^mep8@qw5kEx674L?M|ANN3mjU(CDzTmKZkk`6B_3e8+Ro0yqaXmR z+6rp--K+n260UI6FsjUL-uTq|!_u{lm!B@#T@Faeyb7(;h^)xSt$5fy2yQusU3mC| zz>g44PF3OPKL^S8kz>xe_SQ?vwEkJopPqxJ>z#l7U|Z$QThn5h0tMTJ&G%%Yx>If# zK`uo_)z-|PC)woD+>jL8p$28FK)vwZ`nuM_JPSOeN`}F!SLBxkAMQHFrfbj@|9wwB zYffcp^Q^z{JMkT<`9;-thQUHHX*r@HckX^^nw5{)P1S&AB-_jZOU#q51ygd6F)zEq+#C8WsFml4MuwX3^A~x3#ldU0X9Zzn)tel_({pZer5+xv6QO zwKe|j#YkuP(HRjD?A&s2Y9_(t07#G$o9n*D6|>%1zvb|K3VrW;qWqsSqt;lWTriSj zY&?>BvhJ3#xPk|F6os0WR@FX@a`D_ZX$)|jnFcUfG-p$Iepgq57sScmX1K4>zl9Lg z0XY6en5r7}4c@J}RM-9Q2Ly^PUxf<6i5Fj8{|f@F->b+OaSd12EL)q74KOg^EPt@_ z7bpZsPF(l@m`?rOb98l@9y@#UfVC_MJC7UcR4l9?Dv*L;VLhrm3Vl;7tX-0Q>e>Yt U?!x_Rm{+kR#bj@0i0C}|Klp&`K>z>% literal 0 HcmV?d00001 diff --git a/monad/etc/monad.ucls b/monad/etc/monad.ucls new file mode 100644 index 000000000..9c98df7c6 --- /dev/null +++ b/monad/etc/monad.ucls @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/monad/index.md b/monad/index.md index a11360a2e..031b899cc 100644 --- a/monad/index.md +++ b/monad/index.md @@ -3,17 +3,21 @@ layout: pattern title: Monad folder: monad permalink: /patterns/monad/ -categories: Presentation Tier +categories: Other tags: - Java - Difficulty-Advanced + - Functional --- ## Intent Monad pattern based on monad from linear algebra represents the way of chaining operations together step by step. Binding functions can be described as passing one's output to another's input -basing on the 'same type' contract. +basing on the 'same type' contract. Formally, monad consists of a type constructor M and two +operations: +bind - that takes monadic object and a function from plain object to monadic value and returns monadic value +return - that takse plain type object and returns this object wrapped in a monadic value. ![alt text](./etc/monad.png "Monad") @@ -25,5 +29,7 @@ Use the Monad in any of the following situations * when you want to apply each function regardless of the result of any of them ## Credits + * [Design Pattern Reloaded by Remi Forax](https://youtu.be/-k2X7guaArU) * [Brian Beckman: Don't fear the Monad](https://channel9.msdn.com/Shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads) +* [Monad (functional programming) on Wikipedia] (https://en.wikipedia.org/wiki/Monad_(functional_programming) \ No newline at end of file diff --git a/monad/src/main/java/com/iluwatar/monad/User.java b/monad/src/main/java/com/iluwatar/monad/User.java index de1be5a45..edd299643 100644 --- a/monad/src/main/java/com/iluwatar/monad/User.java +++ b/monad/src/main/java/com/iluwatar/monad/User.java @@ -8,11 +8,10 @@ public class User { private String email; /** - * - * @param name - name - * @param age - age - * @param sex - sex - * @param email - email + * @param name - name + * @param age - age + * @param sex - sex + * @param email - email address */ public User(String name, int age, Sex sex, String email) { this.name = name; diff --git a/monad/src/main/java/com/iluwatar/monad/Validator.java b/monad/src/main/java/com/iluwatar/monad/Validator.java index 7cc84298d..2298a4d8e 100644 --- a/monad/src/main/java/com/iluwatar/monad/Validator.java +++ b/monad/src/main/java/com/iluwatar/monad/Validator.java @@ -11,13 +11,22 @@ import java.util.function.Predicate; * given object together step by step. In Validator each step results in either success or * failure indicator, giving a way of receiving each of them easily and finally getting * validated object or list of exceptions. + * * @param Placeholder for an object. */ public class Validator { + /** + * Object that is validated + */ private final T t; + + /** + * List of exception thrown during validation. + */ private final List exceptions = new ArrayList<>(); /** + * Creates a monadic value of given object. * @param t object to be validated */ private Validator(T t) { @@ -52,6 +61,7 @@ public class Validator { /** * Extension for the {@link Validator#validate(Function, Predicate, String)} method, * dedicated for objects, that need to be projected before requested validation. + * * @param projection function that gets an objects, and returns projection representing * element to be validated. * @param validation see {@link Validator#validate(Function, Predicate, String)} @@ -65,7 +75,7 @@ public class Validator { } /** - * To receive validated object. + * Receives validated object or throws exception when invalid. * * @return object that was validated * @throws IllegalStateException when any validation step results with failure From 64f1fe8979103a11b1d9173f754c403acc7b53f6 Mon Sep 17 00:00:00 2001 From: Crossy147 Date: Sat, 20 Feb 2016 14:55:37 +0100 Subject: [PATCH 060/123] issue #335 typos fixed --- monad/index.md | 2 +- monad/src/test/java/com/iluwatar/monad/MonadTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/monad/index.md b/monad/index.md index 031b899cc..d692e18da 100644 --- a/monad/index.md +++ b/monad/index.md @@ -32,4 +32,4 @@ Use the Monad in any of the following situations * [Design Pattern Reloaded by Remi Forax](https://youtu.be/-k2X7guaArU) * [Brian Beckman: Don't fear the Monad](https://channel9.msdn.com/Shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads) -* [Monad (functional programming) on Wikipedia] (https://en.wikipedia.org/wiki/Monad_(functional_programming) \ No newline at end of file +* [Monad on Wikipedia](https://en.wikipedia.org/wiki/Monad_(functional_programming) \ No newline at end of file diff --git a/monad/src/test/java/com/iluwatar/monad/MonadTest.java b/monad/src/test/java/com/iluwatar/monad/MonadTest.java index 5ef2ecc69..2c18e25e7 100644 --- a/monad/src/test/java/com/iluwatar/monad/MonadTest.java +++ b/monad/src/test/java/com/iluwatar/monad/MonadTest.java @@ -23,7 +23,7 @@ public class MonadTest { @Test public void testForInvalidAge() { thrown.expect(IllegalStateException.class); - User tom = new User("John", 17, Sex.MALE, "john@qwe.bar"); + User john = new User("John", 17, Sex.MALE, "john@qwe.bar"); Validator.of(tom).validate(User::getName, Objects::nonNull, "name cannot be null") .validate(User::getAge, age -> age > 21, "user is underaged") .get(); @@ -31,7 +31,7 @@ public class MonadTest { @Test public void testForValid() { - User tom = new User("Sarah", 42, Sex.FEMALE, "sarah@det.org"); + User sarah = new User("Sarah", 42, Sex.FEMALE, "sarah@det.org"); User validated = Validator.of(tom).validate(User::getName, Objects::nonNull, "name cannot be null") .validate(User::getAge, age -> age > 21, "user is underaged") .validate(User::getSex, sex -> sex == Sex.FEMALE, "user is not female") From 80ff7bb217ab0b83161ed3cb79e9e343b0e774f8 Mon Sep 17 00:00:00 2001 From: Crossy147 Date: Sat, 20 Feb 2016 15:01:45 +0100 Subject: [PATCH 061/123] issue #335 brace typo --- monad/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/monad/index.md b/monad/index.md index d692e18da..9ede8e1b4 100644 --- a/monad/index.md +++ b/monad/index.md @@ -32,4 +32,4 @@ Use the Monad in any of the following situations * [Design Pattern Reloaded by Remi Forax](https://youtu.be/-k2X7guaArU) * [Brian Beckman: Don't fear the Monad](https://channel9.msdn.com/Shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads) -* [Monad on Wikipedia](https://en.wikipedia.org/wiki/Monad_(functional_programming) \ No newline at end of file +* [Monad on Wikipedia](https://en.wikipedia.org/wiki/Monad_(functional_programming)) \ No newline at end of file From d3689b2040f165430fe01db2d6b4eeace6efd262 Mon Sep 17 00:00:00 2001 From: Mohammed Ezzat Date: Sat, 20 Feb 2016 18:19:44 +0200 Subject: [PATCH 062/123] squid:S00119 - Type parameter names should comply with a naming convention --- .../com/iluwatar/fluentinterface/app/App.java | 8 +- .../fluentiterable/FluentIterable.java | 32 +++---- .../lazy/DecoratingIterator.java | 14 +-- .../lazy/LazyFluentIterable.java | 86 +++++++++---------- .../simple/SimpleFluentIterable.java | 62 ++++++------- 5 files changed, 101 insertions(+), 101 deletions(-) diff --git a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/app/App.java b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/app/App.java index cd69a2cbb..1be2b1e70 100644 --- a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/app/App.java +++ b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/app/App.java @@ -114,14 +114,14 @@ public class App { return integer -> integer > 0; } - private static void prettyPrint(String prefix, Iterable iterable) { + private static void prettyPrint(String prefix, Iterable iterable) { prettyPrint(", ", prefix, iterable); } - private static void prettyPrint(String delimiter, String prefix, - Iterable iterable) { + private static void prettyPrint(String delimiter, String prefix, + Iterable iterable) { StringJoiner joiner = new StringJoiner(delimiter, prefix, "."); - Iterator iterator = iterable.iterator(); + Iterator iterator = iterable.iterator(); while (iterator.hasNext()) { joiner.add(iterator.next().toString()); } diff --git a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterable.java b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterable.java index d99a14315..a134814dd 100644 --- a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterable.java +++ b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterable.java @@ -34,9 +34,9 @@ import java.util.function.Predicate; * the fluent interface design pattern. This interface defines common operations, but doesn't aim to * be complete. It was inspired by Guava's com.google.common.collect.FluentIterable. * - * @param is the class of objects the iterable contains + * @param is the class of objects the iterable contains */ -public interface FluentIterable extends Iterable { +public interface FluentIterable extends Iterable { /** * Filters the contents of Iterable using the given predicate, leaving only the ones which satisfy @@ -46,7 +46,7 @@ public interface FluentIterable extends Iterable { * tested object is removed by the iterator. * @return a filtered FluentIterable */ - FluentIterable filter(Predicate predicate); + FluentIterable filter(Predicate predicate); /** * Returns an Optional containing the first element of this iterable if present, else returns @@ -54,55 +54,55 @@ public interface FluentIterable extends Iterable { * * @return the first element after the iteration is evaluated */ - Optional first(); + Optional first(); /** * Evaluates the iteration and leaves only the count first elements. * * @return the first count elements as an Iterable */ - FluentIterable first(int count); + FluentIterable first(int count); /** * Evaluates the iteration and returns the last element. This is a terminating operation. * * @return the last element after the iteration is evaluated */ - Optional last(); + Optional last(); /** * Evaluates the iteration and leaves only the count last elements. * * @return the last counts elements as an Iterable */ - FluentIterable last(int count); + FluentIterable last(int count); /** - * Transforms this FluentIterable into a new one containing objects of the type NEW_TYPE. + * Transforms this FluentIterable into a new one containing objects of the type T. * - * @param function a function that transforms an instance of TYPE into an instance of NEW_TYPE - * @param the target type of the transformation + * @param function a function that transforms an instance of E into an instance of T + * @param the target type of the transformation * @return a new FluentIterable of the new type */ - FluentIterable map(Function function); + FluentIterable map(Function function); /** * Returns the contents of this Iterable as a List. * * @return a List representation of this Iterable */ - List asList(); + List asList(); /** * Utility method that iterates over iterable and adds the contents to a list. * * @param iterable the iterable to collect - * @param the type of the objects to iterate + * @param the type of the objects to iterate * @return a list with all objects of the given iterator */ - static List copyToList(Iterable iterable) { - ArrayList copy = new ArrayList<>(); - Iterator iterator = iterable.iterator(); + static List copyToList(Iterable iterable) { + ArrayList copy = new ArrayList<>(); + Iterator iterator = iterable.iterator(); while (iterator.hasNext()) { copy.add(iterator.next()); } diff --git a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/DecoratingIterator.java b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/DecoratingIterator.java index d15cecea7..07d7f5739 100644 --- a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/DecoratingIterator.java +++ b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/DecoratingIterator.java @@ -28,16 +28,16 @@ import java.util.Iterator; * This class is used to realize LazyFluentIterables. It decorates a given iterator. Does not * support consecutive hasNext() calls. */ -public abstract class DecoratingIterator implements Iterator { +public abstract class DecoratingIterator implements Iterator { - protected final Iterator fromIterator; + protected final Iterator fromIterator; - private TYPE next; + private E next; /** * Creates an iterator that decorates the given iterator. */ - public DecoratingIterator(Iterator fromIterator) { + public DecoratingIterator(Iterator fromIterator) { this.fromIterator = fromIterator; } @@ -58,11 +58,11 @@ public abstract class DecoratingIterator implements Iterator { * @return the next element of the Iterable, or null if not present. */ @Override - public final TYPE next() { + public final E next() { if (next == null) { return fromIterator.next(); } else { - final TYPE result = next; + final E result = next; next = null; return result; } @@ -74,5 +74,5 @@ public abstract class DecoratingIterator implements Iterator { * * @return the next element of the Iterable. */ - public abstract TYPE computeNext(); + public abstract E computeNext(); } diff --git a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java index 8b7f88101..63247875c 100644 --- a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java +++ b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/lazy/LazyFluentIterable.java @@ -35,18 +35,18 @@ import com.iluwatar.fluentinterface.fluentiterable.FluentIterable; * This is a lazy implementation of the FluentIterable interface. It evaluates all chained * operations when a terminating operation is applied. * - * @param the type of the objects the iteration is about + * @param the type of the objects the iteration is about */ -public class LazyFluentIterable implements FluentIterable { +public class LazyFluentIterable implements FluentIterable { - private final Iterable iterable; + private final Iterable iterable; /** * This constructor creates a new LazyFluentIterable. It wraps the given iterable. * * @param iterable the iterable this FluentIterable works on. */ - protected LazyFluentIterable(Iterable iterable) { + protected LazyFluentIterable(Iterable iterable) { this.iterable = iterable; } @@ -66,15 +66,15 @@ public class LazyFluentIterable implements FluentIterable { * @return a new FluentIterable object that decorates the source iterable */ @Override - public FluentIterable filter(Predicate predicate) { - return new LazyFluentIterable() { + public FluentIterable filter(Predicate predicate) { + return new LazyFluentIterable() { @Override - public Iterator iterator() { - return new DecoratingIterator(iterable.iterator()) { + public Iterator iterator() { + return new DecoratingIterator(iterable.iterator()) { @Override - public TYPE computeNext() { + public E computeNext() { while (fromIterator.hasNext()) { - TYPE candidate = fromIterator.next(); + E candidate = fromIterator.next(); if (predicate.test(candidate)) { return candidate; } @@ -93,8 +93,8 @@ public class LazyFluentIterable implements FluentIterable { * @return an Optional containing the first object of this Iterable */ @Override - public Optional first() { - Iterator resultIterator = first(1).iterator(); + public Optional first() { + Iterator resultIterator = first(1).iterator(); return resultIterator.hasNext() ? Optional.of(resultIterator.next()) : Optional.empty(); } @@ -106,17 +106,17 @@ public class LazyFluentIterable implements FluentIterable { * objects. */ @Override - public FluentIterable first(int count) { - return new LazyFluentIterable() { + public FluentIterable first(int count) { + return new LazyFluentIterable() { @Override - public Iterator iterator() { - return new DecoratingIterator(iterable.iterator()) { + public Iterator iterator() { + return new DecoratingIterator(iterable.iterator()) { int currentIndex; @Override - public TYPE computeNext() { + public E computeNext() { if (currentIndex < count && fromIterator.hasNext()) { - TYPE candidate = fromIterator.next(); + E candidate = fromIterator.next(); currentIndex++; return candidate; } @@ -133,8 +133,8 @@ public class LazyFluentIterable implements FluentIterable { * @return an Optional containing the last object of this Iterable */ @Override - public Optional last() { - Iterator resultIterator = last(1).iterator(); + public Optional last() { + Iterator resultIterator = last(1).iterator(); return resultIterator.hasNext() ? Optional.of(resultIterator.next()) : Optional.empty(); } @@ -148,21 +148,21 @@ public class LazyFluentIterable implements FluentIterable { * objects */ @Override - public FluentIterable last(int count) { - return new LazyFluentIterable() { + public FluentIterable last(int count) { + return new LazyFluentIterable() { @Override - public Iterator iterator() { - return new DecoratingIterator(iterable.iterator()) { + public Iterator iterator() { + return new DecoratingIterator(iterable.iterator()) { private int stopIndex; private int totalElementsCount; - private List list; + private List list; private int currentIndex; @Override - public TYPE computeNext() { + public E computeNext() { initialize(); - TYPE candidate = null; + E candidate = null; while (currentIndex < stopIndex && fromIterator.hasNext()) { currentIndex++; fromIterator.next(); @@ -176,7 +176,7 @@ public class LazyFluentIterable implements FluentIterable { private void initialize() { if (list == null) { list = new ArrayList<>(); - Iterator newIterator = iterable.iterator(); + Iterator newIterator = iterable.iterator(); while (newIterator.hasNext()) { list.add(newIterator.next()); } @@ -191,24 +191,24 @@ public class LazyFluentIterable implements FluentIterable { } /** - * Transforms this FluentIterable into a new one containing objects of the type NEW_TYPE. + * Transforms this FluentIterable into a new one containing objects of the type T. * - * @param function a function that transforms an instance of TYPE into an instance of NEW_TYPE - * @param the target type of the transformation + * @param function a function that transforms an instance of E into an instance of T + * @param the target type of the transformation * @return a new FluentIterable of the new type */ @Override - public FluentIterable map(Function function) { - return new LazyFluentIterable() { + public FluentIterable map(Function function) { + return new LazyFluentIterable() { @Override - public Iterator iterator() { - return new DecoratingIterator(null) { - Iterator oldTypeIterator = iterable.iterator(); + public Iterator iterator() { + return new DecoratingIterator(null) { + Iterator oldTypeIterator = iterable.iterator(); @Override - public NEW_TYPE computeNext() { + public T computeNext() { if (oldTypeIterator.hasNext()) { - TYPE candidate = oldTypeIterator.next(); + E candidate = oldTypeIterator.next(); return function.apply(candidate); } else { return null; @@ -225,15 +225,15 @@ public class LazyFluentIterable implements FluentIterable { * @return a list with all remaining objects of this iteration */ @Override - public List asList() { + public List asList() { return FluentIterable.copyToList(iterable); } @Override - public Iterator iterator() { - return new DecoratingIterator(iterable.iterator()) { + public Iterator iterator() { + return new DecoratingIterator(iterable.iterator()) { @Override - public TYPE computeNext() { + public E computeNext() { return fromIterator.hasNext() ? fromIterator.next() : null; } }; @@ -242,7 +242,7 @@ public class LazyFluentIterable implements FluentIterable { /** * @return a FluentIterable from a given iterable. Calls the LazyFluentIterable constructor. */ - public static final FluentIterable from(Iterable iterable) { + public static final FluentIterable from(Iterable iterable) { return new LazyFluentIterable<>(iterable); } diff --git a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/simple/SimpleFluentIterable.java b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/simple/SimpleFluentIterable.java index 29ef25b56..153f3faa5 100644 --- a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/simple/SimpleFluentIterable.java +++ b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/simple/SimpleFluentIterable.java @@ -37,18 +37,18 @@ import com.iluwatar.fluentinterface.fluentiterable.FluentIterable; * This is a simple implementation of the FluentIterable interface. It evaluates all chained * operations eagerly. This implementation would be costly to be utilized in real applications. * - * @param the type of the objects the iteration is about + * @param the type of the objects the iteration is about */ -public class SimpleFluentIterable implements FluentIterable { +public class SimpleFluentIterable implements FluentIterable { - private final Iterable iterable; + private final Iterable iterable; /** * This constructor creates a copy of a given iterable's contents. * * @param iterable the iterable this interface copies to work on. */ - protected SimpleFluentIterable(Iterable iterable) { + protected SimpleFluentIterable(Iterable iterable) { this.iterable = iterable; } @@ -61,10 +61,10 @@ public class SimpleFluentIterable implements FluentIterable { * @return the same FluentIterable with a filtered collection */ @Override - public final FluentIterable filter(Predicate predicate) { - Iterator iterator = iterator(); + public final FluentIterable filter(Predicate predicate) { + Iterator iterator = iterator(); while (iterator.hasNext()) { - TYPE nextElement = iterator.next(); + E nextElement = iterator.next(); if (!predicate.test(nextElement)) { iterator.remove(); } @@ -78,8 +78,8 @@ public class SimpleFluentIterable implements FluentIterable { * @return an option of the first object of the Iterable */ @Override - public final Optional first() { - Iterator resultIterator = first(1).iterator(); + public final Optional first() { + Iterator resultIterator = first(1).iterator(); return resultIterator.hasNext() ? Optional.of(resultIterator.next()) : Optional.empty(); } @@ -91,8 +91,8 @@ public class SimpleFluentIterable implements FluentIterable { * objects. */ @Override - public final FluentIterable first(int count) { - Iterator iterator = iterator(); + public final FluentIterable first(int count) { + Iterator iterator = iterator(); int currentCount = 0; while (iterator.hasNext()) { iterator.next(); @@ -110,8 +110,8 @@ public class SimpleFluentIterable implements FluentIterable { * @return an option of the last object of the Iterable */ @Override - public final Optional last() { - List list = last(1).asList(); + public final Optional last() { + List list = last(1).asList(); if (list.isEmpty()) { return Optional.empty(); } @@ -126,9 +126,9 @@ public class SimpleFluentIterable implements FluentIterable { * objects */ @Override - public final FluentIterable last(int count) { + public final FluentIterable last(int count) { int remainingElementsCount = getRemainingElementsCount(); - Iterator iterator = iterator(); + Iterator iterator = iterator(); int currentIndex = 0; while (iterator.hasNext()) { iterator.next(); @@ -142,16 +142,16 @@ public class SimpleFluentIterable implements FluentIterable { } /** - * Transforms this FluentIterable into a new one containing objects of the type NEW_TYPE. + * Transforms this FluentIterable into a new one containing objects of the type T. * - * @param function a function that transforms an instance of TYPE into an instance of NEW_TYPE - * @param the target type of the transformation + * @param function a function that transforms an instance of E into an instance of T + * @param the target type of the transformation * @return a new FluentIterable of the new type */ @Override - public final FluentIterable map(Function function) { - List temporaryList = new ArrayList<>(); - Iterator iterator = iterator(); + public final FluentIterable map(Function function) { + List temporaryList = new ArrayList<>(); + Iterator iterator = iterator(); while (iterator.hasNext()) { temporaryList.add(function.apply(iterator.next())); } @@ -164,35 +164,35 @@ public class SimpleFluentIterable implements FluentIterable { * @return a list with all remaining objects of this Iterable */ @Override - public List asList() { + public List asList() { return toList(iterable.iterator()); } /** * @return a FluentIterable from a given iterable. Calls the SimpleFluentIterable constructor. */ - public static final FluentIterable from(Iterable iterable) { + public static final FluentIterable from(Iterable iterable) { return new SimpleFluentIterable<>(iterable); } - public static final FluentIterable fromCopyOf(Iterable iterable) { - List copy = FluentIterable.copyToList(iterable); + public static final FluentIterable fromCopyOf(Iterable iterable) { + List copy = FluentIterable.copyToList(iterable); return new SimpleFluentIterable<>(copy); } @Override - public Iterator iterator() { + public Iterator iterator() { return iterable.iterator(); } @Override - public void forEach(Consumer action) { + public void forEach(Consumer action) { iterable.forEach(action); } @Override - public Spliterator spliterator() { + public Spliterator spliterator() { return iterable.spliterator(); } @@ -201,7 +201,7 @@ public class SimpleFluentIterable implements FluentIterable { */ public final int getRemainingElementsCount() { int counter = 0; - Iterator iterator = iterator(); + Iterator iterator = iterator(); while (iterator.hasNext()) { iterator.next(); counter++; @@ -214,8 +214,8 @@ public class SimpleFluentIterable implements FluentIterable { * * @return a new List with the remaining objects. */ - public static List toList(Iterator iterator) { - List copy = new ArrayList<>(); + public static List toList(Iterator iterator) { + List copy = new ArrayList<>(); while (iterator.hasNext()) { copy.add(iterator.next()); } From 81e8d354a967b76f7b9c9511b42c9822a02cc46f Mon Sep 17 00:00:00 2001 From: Crossy147 Date: Sun, 21 Feb 2016 12:10:08 +0100 Subject: [PATCH 063/123] issue #335 review changes --- monad/index.md | 2 +- monad/src/main/java/com/iluwatar/monad/App.java | 16 ++++++++++++++++ .../test/java/com/iluwatar/monad/MonadTest.java | 6 +++--- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/monad/index.md b/monad/index.md index 9ede8e1b4..82deba922 100644 --- a/monad/index.md +++ b/monad/index.md @@ -17,7 +17,7 @@ together step by step. Binding functions can be described as passing one's outpu basing on the 'same type' contract. Formally, monad consists of a type constructor M and two operations: bind - that takes monadic object and a function from plain object to monadic value and returns monadic value -return - that takse plain type object and returns this object wrapped in a monadic value. +return - that takes plain type object and returns this object wrapped in a monadic value. ![alt text](./etc/monad.png "Monad") diff --git a/monad/src/main/java/com/iluwatar/monad/App.java b/monad/src/main/java/com/iluwatar/monad/App.java index 2ab376201..e330cfa64 100644 --- a/monad/src/main/java/com/iluwatar/monad/App.java +++ b/monad/src/main/java/com/iluwatar/monad/App.java @@ -1,7 +1,23 @@ package com.iluwatar.monad; import java.util.Objects; +import java.util.function.Function; +import java.util.function.Predicate; +/** + * The Monad pattern defines a monad structure, that enables chaining operations + * in pipelines and processing data step by step. + * Formally, monad consists of a type constructor M and two operations: + *
bind - that takes monadic object and a function from plain object to the + * monadic value and returns monadic value. + *
return - that takes plain type object and returns this object wrapped in a monadic value. + *

+ * In the given example, the Monad pattern is represented as a {@link Validator} that takes an instance + * of a plain object with {@link Validator#of(Object)} + * and validates it {@link Validator#validate(Function, Predicate, String)} against given predicates. + *

As a validation result {@link Validator#get()} it either returns valid object {@link Validator#t} + * or throws a list of exceptions {@link Validator#exceptions} collected during validation. + */ public class App { /** diff --git a/monad/src/test/java/com/iluwatar/monad/MonadTest.java b/monad/src/test/java/com/iluwatar/monad/MonadTest.java index 2c18e25e7..ae78572f8 100644 --- a/monad/src/test/java/com/iluwatar/monad/MonadTest.java +++ b/monad/src/test/java/com/iluwatar/monad/MonadTest.java @@ -24,7 +24,7 @@ public class MonadTest { public void testForInvalidAge() { thrown.expect(IllegalStateException.class); User john = new User("John", 17, Sex.MALE, "john@qwe.bar"); - Validator.of(tom).validate(User::getName, Objects::nonNull, "name cannot be null") + Validator.of(john).validate(User::getName, Objects::nonNull, "name cannot be null") .validate(User::getAge, age -> age > 21, "user is underaged") .get(); } @@ -32,11 +32,11 @@ public class MonadTest { @Test public void testForValid() { User sarah = new User("Sarah", 42, Sex.FEMALE, "sarah@det.org"); - User validated = Validator.of(tom).validate(User::getName, Objects::nonNull, "name cannot be null") + User validated = Validator.of(sarah).validate(User::getName, Objects::nonNull, "name cannot be null") .validate(User::getAge, age -> age > 21, "user is underaged") .validate(User::getSex, sex -> sex == Sex.FEMALE, "user is not female") .validate(User::getEmail, email -> email.contains("@"), "email does not contain @ sign") .get(); - Assert.assertSame(validated, tom); + Assert.assertSame(validated, sarah); } } From cfd83b575332e0724bb70685a9fea246f2906178 Mon Sep 17 00:00:00 2001 From: Crossy147 Date: Sun, 21 Feb 2016 12:54:40 +0100 Subject: [PATCH 064/123] issue #333 review changes --- factory-kit/index.md | 2 +- .../src/main/java/com/iluwatar/factorykit/App.java | 13 +++++++++++++ .../iluwatar/factory/method/FactoryMethodTest.java | 4 ++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/factory-kit/index.md b/factory-kit/index.md index 03fa53de0..c25701047 100644 --- a/factory-kit/index.md +++ b/factory-kit/index.md @@ -11,7 +11,7 @@ tags: --- ## Intent -Define factory of immutable content with separated builder and factory interfaces. +Define a factory of immutable content with separated builder and factory interfaces. ![alt text](./etc/factory-kit.png "Factory Kit") diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/App.java b/factory-kit/src/main/java/com/iluwatar/factorykit/App.java index 7b62678ba..91d1eb061 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/App.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/App.java @@ -1,5 +1,18 @@ package com.iluwatar.factorykit; +/** + * Factory-kit is a creational pattern which defines a factory of immutable content + * with separated builder and factory interfaces to deal with the problem of + * creating one of the objects specified directly in the factory-kit instance. + * + *

+ * In the given example {@link WeaponFactory} represents the factory-kit, that contains + * four {@link Builder}s for creating new objects of + * the classes implementing {@link Weapon} interface. + *
Each of them can be called with {@link WeaponFactory#create(WeaponType)} method, with + * an input representing an instance of {@link WeaponType} that needs to + * be mapped explicitly with desired class type in the factory instance. + */ public class App { /** * Program entry point. diff --git a/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java index 7e82a37fa..2f8d1c9bb 100644 --- a/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java +++ b/factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java @@ -93,9 +93,9 @@ public class FactoryMethodTest { * @param expectedWeaponType expected WeaponType of the weapon * @param clazz expected class of the weapon */ - private void verifyWeapon(Weapon weapon, WeaponType expectedWeaponType, Class clazz) { + private void verifyWeapon(Weapon weapon, WeaponType expectedWeaponType, Class clazz) { assertTrue("Weapon must be an object of: " + clazz.getName(), clazz.isInstance(weapon)); assertEquals("Weapon must be of weaponType: " + clazz.getName(), expectedWeaponType, weapon.getWeaponType()); } -} \ No newline at end of file +} From 3791a80978d126370c8be5be4d0f3b97925d23f4 Mon Sep 17 00:00:00 2001 From: Mohammed Ezzat Date: Mon, 22 Feb 2016 19:15:51 +0200 Subject: [PATCH 065/123] squid:S2325 - private methods that don't access instance data should be static --- .../java/com/iluwatar/facade/DwarvenGoldmineFacade.java | 2 +- .../java/com/iluwatar/front/controller/FrontController.java | 2 +- .../main/java/com/iluwatar/reactor/app/LoggingHandler.java | 6 +++--- .../java/com/iluwatar/reactor/framework/NioReactor.java | 2 +- .../com/iluwatar/reader/writer/lock/ReaderWriterLock.java | 2 +- .../src/main/java/com/iluwatar/repository/AppConfig.java | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/facade/src/main/java/com/iluwatar/facade/DwarvenGoldmineFacade.java b/facade/src/main/java/com/iluwatar/facade/DwarvenGoldmineFacade.java index 9e3aa29c3..4f6e3be4c 100644 --- a/facade/src/main/java/com/iluwatar/facade/DwarvenGoldmineFacade.java +++ b/facade/src/main/java/com/iluwatar/facade/DwarvenGoldmineFacade.java @@ -60,7 +60,7 @@ public class DwarvenGoldmineFacade { makeActions(workers, DwarvenMineWorker.Action.GO_HOME, DwarvenMineWorker.Action.GO_TO_SLEEP); } - private void makeActions(Collection workers, + private static void makeActions(Collection workers, DwarvenMineWorker.Action... actions) { for (DwarvenMineWorker worker : workers) { worker.action(actions); diff --git a/front-controller/src/main/java/com/iluwatar/front/controller/FrontController.java b/front-controller/src/main/java/com/iluwatar/front/controller/FrontController.java index f5537c39b..6e2cccb0f 100644 --- a/front-controller/src/main/java/com/iluwatar/front/controller/FrontController.java +++ b/front-controller/src/main/java/com/iluwatar/front/controller/FrontController.java @@ -44,7 +44,7 @@ public class FrontController { } } - private Class getCommandClass(String request) { + private static Class getCommandClass(String request) { Class result; try { result = Class.forName("com.iluwatar.front.controller." + request + "Command"); diff --git a/reactor/src/main/java/com/iluwatar/reactor/app/LoggingHandler.java b/reactor/src/main/java/com/iluwatar/reactor/app/LoggingHandler.java index 88716728c..c8eee2d81 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/app/LoggingHandler.java +++ b/reactor/src/main/java/com/iluwatar/reactor/app/LoggingHandler.java @@ -58,7 +58,7 @@ public class LoggingHandler implements ChannelHandler { } } - private void sendReply(AbstractNioChannel channel, DatagramPacket incomingPacket, SelectionKey key) { + private static void sendReply(AbstractNioChannel channel, DatagramPacket incomingPacket, SelectionKey key) { /* * Create a reply acknowledgement datagram packet setting the receiver to the sender of incoming * message. @@ -69,12 +69,12 @@ public class LoggingHandler implements ChannelHandler { channel.write(replyPacket, key); } - private void sendReply(AbstractNioChannel channel, SelectionKey key) { + private static void sendReply(AbstractNioChannel channel, SelectionKey key) { ByteBuffer buffer = ByteBuffer.wrap(ACK); channel.write(buffer, key); } - private void doLogging(ByteBuffer data) { + private static void doLogging(ByteBuffer data) { // assuming UTF-8 :( System.out.println(new String(data.array(), 0, data.limit())); } diff --git a/reactor/src/main/java/com/iluwatar/reactor/framework/NioReactor.java b/reactor/src/main/java/com/iluwatar/reactor/framework/NioReactor.java index 716f88801..3d5ebf5a0 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/framework/NioReactor.java +++ b/reactor/src/main/java/com/iluwatar/reactor/framework/NioReactor.java @@ -186,7 +186,7 @@ public class NioReactor { } } - private void onChannelWritable(SelectionKey key) throws IOException { + private static void onChannelWritable(SelectionKey key) throws IOException { AbstractNioChannel channel = (AbstractNioChannel) key.attachment(); channel.flush(key); } diff --git a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java index c8f59edd5..f08ed805d 100644 --- a/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java +++ b/reader-writer-lock/src/main/java/com/iluwatar/reader/writer/lock/ReaderWriterLock.java @@ -89,7 +89,7 @@ public class ReaderWriterLock implements ReadWriteLock { return globalMutex.isEmpty(); } - private void waitUninterruptibly(Object o) { + private static void waitUninterruptibly(Object o) { try { o.wait(); } catch (InterruptedException e) { diff --git a/repository/src/main/java/com/iluwatar/repository/AppConfig.java b/repository/src/main/java/com/iluwatar/repository/AppConfig.java index 285ecfbfe..3e7093358 100644 --- a/repository/src/main/java/com/iluwatar/repository/AppConfig.java +++ b/repository/src/main/java/com/iluwatar/repository/AppConfig.java @@ -76,7 +76,7 @@ public class AppConfig { /** * Properties for Jpa */ - private Properties jpaProperties() { + private static Properties jpaProperties() { Properties properties = new Properties(); properties.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect"); properties.setProperty("hibernate.hbm2ddl.auto", "create-drop"); From e4c34b1e22a532dea42b03623eef6f34ff48e864 Mon Sep 17 00:00:00 2001 From: Mohammed Ezzat Date: Mon, 22 Feb 2016 19:39:26 +0200 Subject: [PATCH 066/123] squid:S1319 - Declarations should use Java collection interfaces such as List rather than specific implementation classes such as LinkedList --- caching/src/main/java/com/iluwatar/caching/CacheStore.java | 6 +++--- caching/src/main/java/com/iluwatar/caching/DbManager.java | 3 ++- caching/src/main/java/com/iluwatar/caching/LruCache.java | 6 ++++-- .../fluentinterface/fluentiterable/FluentIterable.java | 2 +- .../src/main/java/com/iluwatar/iterator/TreasureChest.java | 2 +- .../src/test/java/com/iluwatar/observer/HobbitsTest.java | 3 ++- observer/src/test/java/com/iluwatar/observer/OrcsTest.java | 3 ++- .../java/com/iluwatar/observer/generic/GHobbitsTest.java | 3 ++- .../test/java/com/iluwatar/observer/generic/OrcsTest.java | 3 ++- .../main/java/com/iluwatar/producer/consumer/ItemQueue.java | 3 ++- servant/src/main/java/com/iluwatar/servant/Servant.java | 4 ++-- 11 files changed, 23 insertions(+), 15 deletions(-) diff --git a/caching/src/main/java/com/iluwatar/caching/CacheStore.java b/caching/src/main/java/com/iluwatar/caching/CacheStore.java index e2e04076a..5903f8219 100644 --- a/caching/src/main/java/com/iluwatar/caching/CacheStore.java +++ b/caching/src/main/java/com/iluwatar/caching/CacheStore.java @@ -22,7 +22,7 @@ */ package com.iluwatar.caching; -import java.util.ArrayList; +import java.util.List; /** * @@ -134,7 +134,7 @@ public class CacheStore { if (null == cache) { return; } - ArrayList listOfUserAccounts = cache.getCacheDataInListForm(); + List listOfUserAccounts = cache.getCacheDataInListForm(); for (UserAccount userAccount : listOfUserAccounts) { DbManager.upsertDb(userAccount); } @@ -144,7 +144,7 @@ public class CacheStore { * Print user accounts */ public static String print() { - ArrayList listOfUserAccounts = cache.getCacheDataInListForm(); + List listOfUserAccounts = cache.getCacheDataInListForm(); StringBuilder sb = new StringBuilder(); sb.append("\n--CACHE CONTENT--\n"); for (UserAccount userAccount : listOfUserAccounts) { diff --git a/caching/src/main/java/com/iluwatar/caching/DbManager.java b/caching/src/main/java/com/iluwatar/caching/DbManager.java index 9aee682a3..c12461d0c 100644 --- a/caching/src/main/java/com/iluwatar/caching/DbManager.java +++ b/caching/src/main/java/com/iluwatar/caching/DbManager.java @@ -24,6 +24,7 @@ package com.iluwatar.caching; import java.text.ParseException; import java.util.HashMap; +import java.util.Map; import org.bson.Document; @@ -49,7 +50,7 @@ public final class DbManager { private static MongoDatabase db; private static boolean useMongoDB; - private static HashMap virtualDB; + private static Map virtualDB; private DbManager() { } diff --git a/caching/src/main/java/com/iluwatar/caching/LruCache.java b/caching/src/main/java/com/iluwatar/caching/LruCache.java index c5e1a9d46..5c5549afd 100644 --- a/caching/src/main/java/com/iluwatar/caching/LruCache.java +++ b/caching/src/main/java/com/iluwatar/caching/LruCache.java @@ -24,6 +24,8 @@ package com.iluwatar.caching; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * @@ -49,7 +51,7 @@ public class LruCache { } int capacity; - HashMap cache = new HashMap<>(); + Map cache = new HashMap<>(); Node head; Node end; @@ -161,7 +163,7 @@ public class LruCache { * * Returns cache data in list form. */ - public ArrayList getCacheDataInListForm() { + public List getCacheDataInListForm() { ArrayList listOfCacheData = new ArrayList<>(); Node temp = head; while (temp != null) { diff --git a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterable.java b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterable.java index a134814dd..f6d7e2e2b 100644 --- a/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterable.java +++ b/fluentinterface/src/main/java/com/iluwatar/fluentinterface/fluentiterable/FluentIterable.java @@ -101,7 +101,7 @@ public interface FluentIterable extends Iterable { * @return a list with all objects of the given iterator */ static List copyToList(Iterable iterable) { - ArrayList copy = new ArrayList<>(); + List copy = new ArrayList<>(); Iterator iterator = iterable.iterator(); while (iterator.hasNext()) { copy.add(iterator.next()); diff --git a/iterator/src/main/java/com/iluwatar/iterator/TreasureChest.java b/iterator/src/main/java/com/iluwatar/iterator/TreasureChest.java index 6f375434b..2c5d698e9 100644 --- a/iterator/src/main/java/com/iluwatar/iterator/TreasureChest.java +++ b/iterator/src/main/java/com/iluwatar/iterator/TreasureChest.java @@ -59,7 +59,7 @@ public class TreasureChest { * Get all items */ public List getItems() { - ArrayList list = new ArrayList<>(); + List list = new ArrayList<>(); list.addAll(items); return list; } diff --git a/observer/src/test/java/com/iluwatar/observer/HobbitsTest.java b/observer/src/test/java/com/iluwatar/observer/HobbitsTest.java index 41f8977db..8b670c56b 100644 --- a/observer/src/test/java/com/iluwatar/observer/HobbitsTest.java +++ b/observer/src/test/java/com/iluwatar/observer/HobbitsTest.java @@ -27,6 +27,7 @@ import org.junit.runners.Parameterized; import java.util.ArrayList; import java.util.Collection; +import java.util.List; /** * Date: 12/27/15 - 12:07 PM @@ -38,7 +39,7 @@ public class HobbitsTest extends WeatherObserverTest { @Parameterized.Parameters public static Collection data() { - final ArrayList testData = new ArrayList<>(); + final List testData = new ArrayList<>(); testData.add(new Object[]{WeatherType.SUNNY, "The happy hobbits bade in the warm sun."}); testData.add(new Object[]{WeatherType.RAINY, "The hobbits look for cover from the rain."}); testData.add(new Object[]{WeatherType.WINDY, "The hobbits hold their hats tightly in the windy weather."}); diff --git a/observer/src/test/java/com/iluwatar/observer/OrcsTest.java b/observer/src/test/java/com/iluwatar/observer/OrcsTest.java index a81ecb03b..a7997eaa7 100644 --- a/observer/src/test/java/com/iluwatar/observer/OrcsTest.java +++ b/observer/src/test/java/com/iluwatar/observer/OrcsTest.java @@ -27,6 +27,7 @@ import org.junit.runners.Parameterized; import java.util.ArrayList; import java.util.Collection; +import java.util.List; /** * Date: 12/27/15 - 12:07 PM @@ -38,7 +39,7 @@ public class OrcsTest extends WeatherObserverTest { @Parameterized.Parameters public static Collection data() { - final ArrayList testData = new ArrayList<>(); + final List testData = new ArrayList<>(); testData.add(new Object[]{WeatherType.SUNNY, "The sun hurts the orcs' eyes."}); testData.add(new Object[]{WeatherType.RAINY, "The orcs are dripping wet."}); testData.add(new Object[]{WeatherType.WINDY, "The orc smell almost vanishes in the wind."}); diff --git a/observer/src/test/java/com/iluwatar/observer/generic/GHobbitsTest.java b/observer/src/test/java/com/iluwatar/observer/generic/GHobbitsTest.java index bd1afd21b..7668daee6 100644 --- a/observer/src/test/java/com/iluwatar/observer/generic/GHobbitsTest.java +++ b/observer/src/test/java/com/iluwatar/observer/generic/GHobbitsTest.java @@ -31,6 +31,7 @@ import org.junit.runners.Parameterized; import java.util.ArrayList; import java.util.Collection; +import java.util.List; /** * Date: 12/27/15 - 12:07 PM @@ -42,7 +43,7 @@ public class GHobbitsTest extends ObserverTest { @Parameterized.Parameters public static Collection data() { - final ArrayList testData = new ArrayList<>(); + final List testData = new ArrayList<>(); testData.add(new Object[]{WeatherType.SUNNY, "The happy hobbits bade in the warm sun."}); testData.add(new Object[]{WeatherType.RAINY, "The hobbits look for cover from the rain."}); testData.add(new Object[]{WeatherType.WINDY, "The hobbits hold their hats tightly in the windy weather."}); diff --git a/observer/src/test/java/com/iluwatar/observer/generic/OrcsTest.java b/observer/src/test/java/com/iluwatar/observer/generic/OrcsTest.java index 417668607..9ac1bddea 100644 --- a/observer/src/test/java/com/iluwatar/observer/generic/OrcsTest.java +++ b/observer/src/test/java/com/iluwatar/observer/generic/OrcsTest.java @@ -29,6 +29,7 @@ import org.junit.runners.Parameterized; import java.util.ArrayList; import java.util.Collection; +import java.util.List; /** * Date: 12/27/15 - 12:07 PM @@ -40,7 +41,7 @@ public class OrcsTest extends ObserverTest { @Parameterized.Parameters public static Collection data() { - final ArrayList testData = new ArrayList<>(); + final List testData = new ArrayList<>(); testData.add(new Object[]{WeatherType.SUNNY, "The sun hurts the orcs' eyes."}); testData.add(new Object[]{WeatherType.RAINY, "The orcs are dripping wet."}); testData.add(new Object[]{WeatherType.WINDY, "The orc smell almost vanishes in the wind."}); diff --git a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/ItemQueue.java b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/ItemQueue.java index 33a723589..ea925152b 100644 --- a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/ItemQueue.java +++ b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/ItemQueue.java @@ -22,6 +22,7 @@ */ package com.iluwatar.producer.consumer; +import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; /** @@ -29,7 +30,7 @@ import java.util.concurrent.LinkedBlockingQueue; */ public class ItemQueue { - private LinkedBlockingQueue queue; + private BlockingQueue queue; public ItemQueue() { diff --git a/servant/src/main/java/com/iluwatar/servant/Servant.java b/servant/src/main/java/com/iluwatar/servant/Servant.java index d24c42ab2..56d65bde2 100644 --- a/servant/src/main/java/com/iluwatar/servant/Servant.java +++ b/servant/src/main/java/com/iluwatar/servant/Servant.java @@ -22,7 +22,7 @@ */ package com.iluwatar.servant; -import java.util.ArrayList; +import java.util.List; /** * @@ -55,7 +55,7 @@ public class Servant { /** * Check if we will be hanged */ - public boolean checkIfYouWillBeHanged(ArrayList tableGuests) { + public boolean checkIfYouWillBeHanged(List tableGuests) { boolean anotherDay = true; for (Royalty r : tableGuests) { if (!r.getMood()) { From 046e13111991a4ba9e2cc23cfcc8481688fde6f2 Mon Sep 17 00:00:00 2001 From: Mohammed Ezzat Date: Tue, 23 Feb 2016 20:57:55 +0200 Subject: [PATCH 067/123] squid:UselessParenthesesCheck - Useless parentheses around expressions should be removed to prevent any misunderstanding --- .../main/java/com/iluwatar/flux/dispatcher/Dispatcher.java | 2 +- flux/src/main/java/com/iluwatar/flux/store/Store.java | 2 +- .../src/main/java/com/iluwatar/halfsynchalfasync/App.java | 2 +- .../java/com/iluwatar/layers/CakeBakingServiceImpl.java | 4 ++-- layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java | 2 +- .../src/main/java/com/iluwatar/message/channel/App.java | 2 +- .../src/main/java/com/iluwatar/publish/subscribe/App.java | 2 +- .../main/java/com/iluwatar/reactor/app/LoggingHandler.java | 2 +- .../src/main/java/com/iluwatar/repository/Person.java | 6 +++--- .../src/main/java/com/iluwatar/stepbuilder/Character.java | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/flux/src/main/java/com/iluwatar/flux/dispatcher/Dispatcher.java b/flux/src/main/java/com/iluwatar/flux/dispatcher/Dispatcher.java index 4ab01b9fc..10f064efa 100644 --- a/flux/src/main/java/com/iluwatar/flux/dispatcher/Dispatcher.java +++ b/flux/src/main/java/com/iluwatar/flux/dispatcher/Dispatcher.java @@ -71,6 +71,6 @@ public final class Dispatcher { } private void dispatchAction(Action action) { - stores.stream().forEach((store) -> store.onAction(action)); + stores.stream().forEach(store -> store.onAction(action)); } } diff --git a/flux/src/main/java/com/iluwatar/flux/store/Store.java b/flux/src/main/java/com/iluwatar/flux/store/Store.java index b3bc56b6f..f7cc2ccbf 100644 --- a/flux/src/main/java/com/iluwatar/flux/store/Store.java +++ b/flux/src/main/java/com/iluwatar/flux/store/Store.java @@ -44,6 +44,6 @@ public abstract class Store { } protected void notifyChange() { - views.stream().forEach((view) -> view.storeChanged(this)); + views.stream().forEach(view -> view.storeChanged(this)); } } diff --git a/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/App.java b/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/App.java index 3c25be414..17839bb32 100644 --- a/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/App.java +++ b/half-sync-half-async/src/main/java/com/iluwatar/halfsynchalfasync/App.java @@ -143,6 +143,6 @@ public class App { } catch (InterruptedException e) { System.out.println(e); } - return (i) * (i + 1) / 2; + return i * (i + 1) / 2; } } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java b/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java index dd62fa632..e8518b625 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeBakingServiceImpl.java @@ -54,7 +54,7 @@ public class CakeBakingServiceImpl implements CakeBakingService { public void bakeNewCake(CakeInfo cakeInfo) throws CakeBakingException { List allToppings = getAvailableToppingEntities(); List matchingToppings = - allToppings.stream().filter((t) -> t.getName().equals(cakeInfo.cakeToppingInfo.name)) + allToppings.stream().filter(t -> t.getName().equals(cakeInfo.cakeToppingInfo.name)) .collect(Collectors.toList()); if (matchingToppings.isEmpty()) { throw new CakeBakingException(String.format("Topping %s is not available", @@ -64,7 +64,7 @@ public class CakeBakingServiceImpl implements CakeBakingService { Set foundLayers = new HashSet<>(); for (CakeLayerInfo info : cakeInfo.cakeLayerInfos) { Optional found = - allLayers.stream().filter((layer) -> layer.getName().equals(info.name)).findFirst(); + allLayers.stream().filter(layer -> layer.getName().equals(info.name)).findFirst(); if (!found.isPresent()) { throw new CakeBakingException(String.format("Layer %s is not available", info.name)); } else { diff --git a/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java b/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java index 18ab34e7f..bc489e16e 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java @@ -36,6 +36,6 @@ public class CakeViewImpl implements View { } public void render() { - cakeBakingService.getAllCakes().stream().forEach((cake) -> System.out.println(cake)); + cakeBakingService.getAllCakes().stream().forEach(cake -> System.out.println(cake)); } } diff --git a/message-channel/src/main/java/com/iluwatar/message/channel/App.java b/message-channel/src/main/java/com/iluwatar/message/channel/App.java index 4e5ef11cf..dab04bd37 100644 --- a/message-channel/src/main/java/com/iluwatar/message/channel/App.java +++ b/message-channel/src/main/java/com/iluwatar/message/channel/App.java @@ -66,7 +66,7 @@ public class App { }); context.start(); - context.getRoutes().stream().forEach((r) -> System.out.println(r)); + context.getRoutes().stream().forEach(r -> System.out.println(r)); context.stop(); } } diff --git a/publish-subscribe/src/main/java/com/iluwatar/publish/subscribe/App.java b/publish-subscribe/src/main/java/com/iluwatar/publish/subscribe/App.java index b3eeaeb8e..c4e423b04 100644 --- a/publish-subscribe/src/main/java/com/iluwatar/publish/subscribe/App.java +++ b/publish-subscribe/src/main/java/com/iluwatar/publish/subscribe/App.java @@ -61,7 +61,7 @@ public class App { }); ProducerTemplate template = context.createProducerTemplate(); context.start(); - context.getRoutes().stream().forEach((r) -> System.out.println(r)); + context.getRoutes().stream().forEach(r -> System.out.println(r)); template.sendBody("direct:origin", "Hello from origin"); context.stop(); } diff --git a/reactor/src/main/java/com/iluwatar/reactor/app/LoggingHandler.java b/reactor/src/main/java/com/iluwatar/reactor/app/LoggingHandler.java index 88716728c..e2b02e445 100644 --- a/reactor/src/main/java/com/iluwatar/reactor/app/LoggingHandler.java +++ b/reactor/src/main/java/com/iluwatar/reactor/app/LoggingHandler.java @@ -47,7 +47,7 @@ public class LoggingHandler implements ChannelHandler { * received is a ByteBuffer (from TCP channel) or a DatagramPacket (from UDP channel). */ if (readObject instanceof ByteBuffer) { - doLogging(((ByteBuffer) readObject)); + doLogging((ByteBuffer) readObject); sendReply(channel, key); } else if (readObject instanceof DatagramPacket) { DatagramPacket datagram = (DatagramPacket) readObject; diff --git a/repository/src/main/java/com/iluwatar/repository/Person.java b/repository/src/main/java/com/iluwatar/repository/Person.java index a29a7fd43..b1559cf00 100644 --- a/repository/src/main/java/com/iluwatar/repository/Person.java +++ b/repository/src/main/java/com/iluwatar/repository/Person.java @@ -97,9 +97,9 @@ public class Person { final int prime = 31; int result = 1; result = prime * result + age; - result = prime * result + ((id == null) ? 0 : id.hashCode()); - result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + ((surname == null) ? 0 : surname.hashCode()); + result = prime * result + (id == null ? 0 : id.hashCode()); + result = prime * result + (name == null ? 0 : name.hashCode()); + result = prime * result + (surname == null ? 0 : surname.hashCode()); return result; } diff --git a/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java b/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java index 092993f5c..1e21758a3 100644 --- a/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java +++ b/step-builder/src/main/java/com/iluwatar/stepbuilder/Character.java @@ -97,7 +97,7 @@ public class Character { .append(name) .append(" armed with a ") .append(weapon != null ? weapon : spell != null ? spell : "with nothing") - .append(abilities != null ? (" and wielding " + abilities + " abilities") : "") + .append(abilities != null ? " and wielding " + abilities + " abilities" : "") .append('.'); return sb.toString(); } From adb94044ff7ba6c2a2bdc56b90d081b10788ff54 Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Tue, 1 Mar 2016 17:28:28 +0530 Subject: [PATCH 068/123] Work on #385, created project and provided two mute methods --- mute-idiom/pom.xml | 47 +++++++++++ .../src/main/java/com/iluwatar/mute/App.java | 77 +++++++++++++++++++ .../com/iluwatar/mute/CheckedRunnable.java | 36 +++++++++ .../src/main/java/com/iluwatar/mute/Mute.java | 65 ++++++++++++++++ .../test/java/com/iluwatar/mute/AppTest.java | 15 ++++ .../test/java/com/iluwatar/mute/MuteTest.java | 62 +++++++++++++++ 6 files changed, 302 insertions(+) create mode 100644 mute-idiom/pom.xml create mode 100644 mute-idiom/src/main/java/com/iluwatar/mute/App.java create mode 100644 mute-idiom/src/main/java/com/iluwatar/mute/CheckedRunnable.java create mode 100644 mute-idiom/src/main/java/com/iluwatar/mute/Mute.java create mode 100644 mute-idiom/src/test/java/com/iluwatar/mute/AppTest.java create mode 100644 mute-idiom/src/test/java/com/iluwatar/mute/MuteTest.java diff --git a/mute-idiom/pom.xml b/mute-idiom/pom.xml new file mode 100644 index 000000000..e4597446b --- /dev/null +++ b/mute-idiom/pom.xml @@ -0,0 +1,47 @@ + + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.11.0-SNAPSHOT + + mute-idiom + + + junit + junit + test + + + org.mockito + mockito-core + test + + + diff --git a/mute-idiom/src/main/java/com/iluwatar/mute/App.java b/mute-idiom/src/main/java/com/iluwatar/mute/App.java new file mode 100644 index 000000000..edb5ebcc9 --- /dev/null +++ b/mute-idiom/src/main/java/com/iluwatar/mute/App.java @@ -0,0 +1,77 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.mute; + +import java.io.ByteArrayOutputStream; +import java.sql.Connection; +import java.sql.SQLException; + +public class App { + + public static void main(String[] args) { + + useOfLoggedMute(); + + useOfMute(); + } + + /* + * Typically used when the API declares some exception but cannot do so. Usually a signature mistake. + * In this example out is not supposed to throw exception as it is a ByteArrayOutputStream. So we + * utilize mute, which will throw AssertionError if unexpected exception occurs. + */ + private static void useOfMute() { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Mute.mute(() -> out.write("Hello".getBytes())); + } + + private static void useOfLoggedMute() { + Connection connection = openConnection(); + try { + readStuff(connection); + } catch (SQLException ex) { + ex.printStackTrace(); + } finally { + closeConnection(connection); + } + } + + /* + * All we can do while failed close of connection is to log it. + */ + private static void closeConnection(Connection connection) { + if (connection != null) { + Mute.loggedMute(() -> connection.close()); + } + } + + private static void readStuff(Connection connection) throws SQLException { + if (connection != null) { + connection.createStatement(); + } + } + + private static Connection openConnection() { + return null; + } +} diff --git a/mute-idiom/src/main/java/com/iluwatar/mute/CheckedRunnable.java b/mute-idiom/src/main/java/com/iluwatar/mute/CheckedRunnable.java new file mode 100644 index 000000000..7f99386f0 --- /dev/null +++ b/mute-idiom/src/main/java/com/iluwatar/mute/CheckedRunnable.java @@ -0,0 +1,36 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.mute; + +/** + * A runnable which may throw exception on execution. + * + */ +@FunctionalInterface +public interface CheckedRunnable { + /** + * Same as {@link Runnable#run()} with a possibility of exception in execution. + * @throws Exception if any exception occurs. + */ + public void run() throws Exception; +} diff --git a/mute-idiom/src/main/java/com/iluwatar/mute/Mute.java b/mute-idiom/src/main/java/com/iluwatar/mute/Mute.java new file mode 100644 index 000000000..ba055422b --- /dev/null +++ b/mute-idiom/src/main/java/com/iluwatar/mute/Mute.java @@ -0,0 +1,65 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.mute; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +/** + * A utility class that allows you to utilize mute idiom. + */ +public final class Mute { + + /** + * Executes the runnable and throws the exception occurred within a {@link AssertionError}. + * This method should be utilized to mute the operations that are guaranteed not to throw an exception. + * For instance {@link ByteArrayOutputStream#write(byte[])} declares in it's signature that it can throw + * an {@link IOException}, but in reality it cannot. This is because the bulk write method is not overridden + * in {@link ByteArrayOutputStream}. + * + * @param runnable a runnable that should never throw an exception on execution. + */ + public static void mute(CheckedRunnable runnable) { + try { + runnable.run(); + } catch (Exception e) { + throw new AssertionError(e); + } + } + + /** + * Executes the runnable and logs the exception occurred on {@link System#err}. + * This method should be utilized to mute the operations about which most you can do is log. + * For instance while closing a connection to database, all you can do is log the exception + * occurred. + * + * @param runnable a runnable that may throw an exception on execution. + */ + public static void loggedMute(CheckedRunnable runnable) { + try { + runnable.run(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/mute-idiom/src/test/java/com/iluwatar/mute/AppTest.java b/mute-idiom/src/test/java/com/iluwatar/mute/AppTest.java new file mode 100644 index 000000000..8079c6acb --- /dev/null +++ b/mute-idiom/src/test/java/com/iluwatar/mute/AppTest.java @@ -0,0 +1,15 @@ +package com.iluwatar.mute; + +import org.junit.Test; + +/** + * Tests that Mute idiom example runs without errors. + * + */ +public class AppTest { + + @Test + public void test() { + App.main(null); + } +} diff --git a/mute-idiom/src/test/java/com/iluwatar/mute/MuteTest.java b/mute-idiom/src/test/java/com/iluwatar/mute/MuteTest.java new file mode 100644 index 000000000..b0016a331 --- /dev/null +++ b/mute-idiom/src/test/java/com/iluwatar/mute/MuteTest.java @@ -0,0 +1,62 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.mute; + +import static org.junit.Assert.assertTrue; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.PrintStream; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +public class MuteTest { + + private static final String MESSAGE = "should not occur"; + + @Rule public ExpectedException exception = ExpectedException.none(); + + @Test + public void muteShouldRethrowUnexpectedExceptionAsAssertionError() throws Exception { + exception.expect(AssertionError.class); + exception.expectMessage(MESSAGE); + + Mute.mute(() -> methodThrowingException()); + } + + private void methodThrowingException() throws Exception { + throw new Exception(MESSAGE); + } + + @Test + public void loggedMuteShouldLogExceptionTraceBeforeSwallowingIt() throws IOException { + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + System.setErr(new PrintStream(stream)); + + Mute.loggedMute(() -> methodThrowingException()); + + assertTrue(new String(stream.toByteArray()).contains(MESSAGE)); + } +} From 3ed3bc1fa52b7c1ce9a5684ce08ac03073e7668b Mon Sep 17 00:00:00 2001 From: gwildor28 Date: Mon, 7 Mar 2016 19:40:50 +0000 Subject: [PATCH 069/123] Added mutex and semaphore modules to demonstrate locks Added two modules to demonstrate locks. Mutex demonstrates a simple mutual exclusion lock. Semaphore demonstrates a semaphore for controlling access to a pool of resources. The main class of both programs is App.java. --- mutex/pom.xml | 35 ++++++ .../src/main/java/com/iluwatar/mutex/App.java | 42 +++++++ .../src/main/java/com/iluwatar/mutex/Jar.java | 58 ++++++++++ .../main/java/com/iluwatar/mutex/Lock.java | 34 ++++++ .../main/java/com/iluwatar/mutex/Mutex.java | 46 ++++++++ .../main/java/com/iluwatar/mutex/Thief.java | 51 +++++++++ pom.xml | 2 + semaphore/pom.xml | 35 ++++++ .../main/java/com/iluwatar/semaphore/App.java | 43 ++++++++ .../java/com/iluwatar/semaphore/Customer.java | 63 +++++++++++ .../java/com/iluwatar/semaphore/Fruit.java | 60 ++++++++++ .../com/iluwatar/semaphore/FruitBowl.java | 78 +++++++++++++ .../com/iluwatar/semaphore/FruitShop.java | 103 ++++++++++++++++++ .../java/com/iluwatar/semaphore/Lock.java | 34 ++++++ .../com/iluwatar/semaphore/Semaphore.java | 51 +++++++++ 15 files changed, 735 insertions(+) create mode 100644 mutex/pom.xml create mode 100644 mutex/src/main/java/com/iluwatar/mutex/App.java create mode 100644 mutex/src/main/java/com/iluwatar/mutex/Jar.java create mode 100644 mutex/src/main/java/com/iluwatar/mutex/Lock.java create mode 100644 mutex/src/main/java/com/iluwatar/mutex/Mutex.java create mode 100644 mutex/src/main/java/com/iluwatar/mutex/Thief.java create mode 100644 semaphore/pom.xml create mode 100644 semaphore/src/main/java/com/iluwatar/semaphore/App.java create mode 100644 semaphore/src/main/java/com/iluwatar/semaphore/Customer.java create mode 100644 semaphore/src/main/java/com/iluwatar/semaphore/Fruit.java create mode 100644 semaphore/src/main/java/com/iluwatar/semaphore/FruitBowl.java create mode 100644 semaphore/src/main/java/com/iluwatar/semaphore/FruitShop.java create mode 100644 semaphore/src/main/java/com/iluwatar/semaphore/Lock.java create mode 100644 semaphore/src/main/java/com/iluwatar/semaphore/Semaphore.java diff --git a/mutex/pom.xml b/mutex/pom.xml new file mode 100644 index 000000000..5b7058083 --- /dev/null +++ b/mutex/pom.xml @@ -0,0 +1,35 @@ + + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.11.0-SNAPSHOT + + mutex + diff --git a/mutex/src/main/java/com/iluwatar/mutex/App.java b/mutex/src/main/java/com/iluwatar/mutex/App.java new file mode 100644 index 000000000..e2d10763f --- /dev/null +++ b/mutex/src/main/java/com/iluwatar/mutex/App.java @@ -0,0 +1,42 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.mutex; + +/** + * App. + */ +public class App { + + /** + * main method + */ + public static void main(String[] args) { + Mutex mutex = new Mutex(); + Jar jar = new Jar(mutex); + Thief peter = new Thief("Peter", jar); + Thief john = new Thief("John", jar); + peter.start(); + john.start(); + } + +} diff --git a/mutex/src/main/java/com/iluwatar/mutex/Jar.java b/mutex/src/main/java/com/iluwatar/mutex/Jar.java new file mode 100644 index 000000000..6cbe009d8 --- /dev/null +++ b/mutex/src/main/java/com/iluwatar/mutex/Jar.java @@ -0,0 +1,58 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.mutex; + +/** + * Jar. + */ +public class Jar { + + private Lock lock; + + private int beans = 1000; + + public Jar(Lock lock) { + this.lock = lock; + } + + /** + * takeBean method + */ + public boolean takeBean(Thief thief) { + boolean success = false; + try { + lock.acquire(); + success = beans > 0; + if (success) { + beans = beans - 1; + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + lock.release(); + } + + return success; + } + +} diff --git a/mutex/src/main/java/com/iluwatar/mutex/Lock.java b/mutex/src/main/java/com/iluwatar/mutex/Lock.java new file mode 100644 index 000000000..b748f3761 --- /dev/null +++ b/mutex/src/main/java/com/iluwatar/mutex/Lock.java @@ -0,0 +1,34 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.mutex; + +/** + * Lock. + */ +public interface Lock { + + void acquire() throws InterruptedException; + + void release(); + +} diff --git a/mutex/src/main/java/com/iluwatar/mutex/Mutex.java b/mutex/src/main/java/com/iluwatar/mutex/Mutex.java new file mode 100644 index 000000000..a8cf6a919 --- /dev/null +++ b/mutex/src/main/java/com/iluwatar/mutex/Mutex.java @@ -0,0 +1,46 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.mutex; + +/** + * Mutex. + */ +public class Mutex implements Lock { + private Object owner = null; + + @Override + public synchronized void acquire() throws InterruptedException { + while (owner != null) { + wait(); + } + + owner = Thread.currentThread(); + } + + @Override + public synchronized void release() { + owner = null; + notify(); + } + +} diff --git a/mutex/src/main/java/com/iluwatar/mutex/Thief.java b/mutex/src/main/java/com/iluwatar/mutex/Thief.java new file mode 100644 index 000000000..8fbc75f92 --- /dev/null +++ b/mutex/src/main/java/com/iluwatar/mutex/Thief.java @@ -0,0 +1,51 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.mutex; + +/** + * Thief. + */ +public class Thief extends Thread { + + private String name; + + private Jar jar; + + public Thief(String name, Jar jar) { + this.name = name; + this.jar = jar; + } + + @Override + public void run() { + int beans = 0; + + while (jar.takeBean(this)) { + beans = beans + 1; + System.out.println(name + " took a bean."); + } + + System.out.println(name + " took " + beans + " beans."); + } + +} diff --git a/pom.xml b/pom.xml index 555844660..fa0fe771c 100644 --- a/pom.xml +++ b/pom.xml @@ -123,6 +123,8 @@ feature-toggle value-object monad + mutex + semaphore diff --git a/semaphore/pom.xml b/semaphore/pom.xml new file mode 100644 index 000000000..66a961c3f --- /dev/null +++ b/semaphore/pom.xml @@ -0,0 +1,35 @@ + + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.11.0-SNAPSHOT + + semaphore + diff --git a/semaphore/src/main/java/com/iluwatar/semaphore/App.java b/semaphore/src/main/java/com/iluwatar/semaphore/App.java new file mode 100644 index 000000000..4dd5a764a --- /dev/null +++ b/semaphore/src/main/java/com/iluwatar/semaphore/App.java @@ -0,0 +1,43 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.semaphore; + +/** + * App. + */ +public class App { + + /** + * main method + */ + public static void main(String[] args) { + FruitShop shop = new FruitShop(); + new Customer("Peter", shop).start(); + new Customer("Paul", shop).start(); + new Customer("Mary", shop).start(); + new Customer("John", shop).start(); + new Customer("Ringo", shop).start(); + new Customer("George", shop).start(); + } + +} diff --git a/semaphore/src/main/java/com/iluwatar/semaphore/Customer.java b/semaphore/src/main/java/com/iluwatar/semaphore/Customer.java new file mode 100644 index 000000000..a3fc65ac3 --- /dev/null +++ b/semaphore/src/main/java/com/iluwatar/semaphore/Customer.java @@ -0,0 +1,63 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.semaphore; + +/** + * Customer. + */ +public class Customer extends Thread { + + private String name; + private FruitShop fruitShop; + private FruitBowl fruitBowl; + + /** + * Customer constructor + */ + public Customer(String name, FruitShop fruitShop) { + this.name = name; + this.fruitShop = fruitShop; + this.fruitBowl = new FruitBowl(); + } + + /** + * run method + */ + public void run() { + + while (fruitShop.countFruit() > 0) { + FruitBowl bowl = fruitShop.takeBowl(); + Fruit fruit; + + if (bowl != null && (fruit = bowl.take()) != null) { + System.out.println(name + " took an " + fruit); + fruitBowl.put(fruit); + fruitShop.returnBowl(bowl); + } + } + + System.out.println(name + " took " + fruitBowl); + + } + +} diff --git a/semaphore/src/main/java/com/iluwatar/semaphore/Fruit.java b/semaphore/src/main/java/com/iluwatar/semaphore/Fruit.java new file mode 100644 index 000000000..ecf8d1d29 --- /dev/null +++ b/semaphore/src/main/java/com/iluwatar/semaphore/Fruit.java @@ -0,0 +1,60 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.semaphore; + +/** + * Fruit. + */ +public class Fruit { + + public static enum FruitType { + ORANGE, APPLE, LEMON + } + + private FruitType type; + + public Fruit(FruitType type) { + this.type = type; + } + + public FruitType getType() { + return type; + } + + /** + * toString method + */ + public String toString() { + switch (type) { + case ORANGE: + return "Orange"; + case APPLE: + return "Apple"; + case LEMON: + return "Lemon"; + default: + return ""; + } + } + +} diff --git a/semaphore/src/main/java/com/iluwatar/semaphore/FruitBowl.java b/semaphore/src/main/java/com/iluwatar/semaphore/FruitBowl.java new file mode 100644 index 000000000..7760b8e3a --- /dev/null +++ b/semaphore/src/main/java/com/iluwatar/semaphore/FruitBowl.java @@ -0,0 +1,78 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.semaphore; + +import java.util.ArrayList; + +/** + * FruitBowl. + */ +public class FruitBowl { + + private ArrayList fruit = new ArrayList<>(); + + public int countFruit() { + return fruit.size(); + } + + public void put(Fruit f) { + fruit.add(f); + } + + /** + * take method + */ + public Fruit take() { + if (fruit.isEmpty()) { + return null; + } else { + return fruit.remove(0); + } + } + + /** + * toString method + */ + public String toString() { + int apples = 0; + int oranges = 0; + int lemons = 0; + + for (Fruit f : fruit) { + switch (f.getType()) { + case APPLE: + apples++; + break; + case ORANGE: + oranges++; + break; + case LEMON: + lemons++; + break; + default: + } + } + + return apples + " Apples, " + oranges + " Oranges, and " + lemons + " Lemons"; + } +} diff --git a/semaphore/src/main/java/com/iluwatar/semaphore/FruitShop.java b/semaphore/src/main/java/com/iluwatar/semaphore/FruitShop.java new file mode 100644 index 000000000..fff764bad --- /dev/null +++ b/semaphore/src/main/java/com/iluwatar/semaphore/FruitShop.java @@ -0,0 +1,103 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.semaphore; + +/** + * FruitShop. + */ +public class FruitShop { + + private FruitBowl[] bowls = { + new FruitBowl(), + new FruitBowl(), + new FruitBowl() + }; + + private boolean[] available = { + true, + true, + true + }; + + private Semaphore semaphore; + + /** + * FruitShop constructor + */ + public FruitShop() { + for (int i = 0; i < 100; i++) { + bowls[0].put(new Fruit(Fruit.FruitType.APPLE)); + bowls[1].put(new Fruit(Fruit.FruitType.ORANGE)); + bowls[2].put(new Fruit(Fruit.FruitType.LEMON)); + } + + semaphore = new Semaphore(3); + } + + public synchronized int countFruit() { + return bowls[0].countFruit() + bowls[1].countFruit() + bowls[2].countFruit(); + } + + /** + * takeBowl method + */ + public synchronized FruitBowl takeBowl() { + + FruitBowl bowl = null; + + try { + semaphore.acquire(); + + if (available[0]) { + bowl = bowls[0]; + available[0] = false; + } else if (available[1]) { + bowl = bowls[1]; + available[1] = false; + } else if (available[2]) { + bowl = bowls[2]; + available[2] = false; + } + + } catch (InterruptedException e) { + e.printStackTrace(); + } finally { + semaphore.release(); + } + return bowl; + } + + /** + * returnBowl method + */ + public synchronized void returnBowl(FruitBowl bowl) { + if (bowl == bowls[0]) { + available[0] = true; + } else if (bowl == bowls[1]) { + available[1] = true; + } else if (bowl == bowls[2]) { + available [2] = true; + } + } + +} diff --git a/semaphore/src/main/java/com/iluwatar/semaphore/Lock.java b/semaphore/src/main/java/com/iluwatar/semaphore/Lock.java new file mode 100644 index 000000000..99b8f85b5 --- /dev/null +++ b/semaphore/src/main/java/com/iluwatar/semaphore/Lock.java @@ -0,0 +1,34 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.semaphore; + +/** + * Lock. + */ +public interface Lock { + + void acquire() throws InterruptedException; + + void release(); + +} diff --git a/semaphore/src/main/java/com/iluwatar/semaphore/Semaphore.java b/semaphore/src/main/java/com/iluwatar/semaphore/Semaphore.java new file mode 100644 index 000000000..5873df2b5 --- /dev/null +++ b/semaphore/src/main/java/com/iluwatar/semaphore/Semaphore.java @@ -0,0 +1,51 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.semaphore; + +/** + * Semaphore. + */ +public class Semaphore implements Lock { + + private int counter; + + public Semaphore(int counter) { + this.counter = counter; + } + + /** + * acquire method + */ + public synchronized void acquire() throws InterruptedException { + while (counter == 0) { + wait(); + } + counter = counter - 1; + } + + public synchronized void release() { + counter = counter + 1; + notify(); + } + +} From afb897300b9fd310a9a580b45b6f233e7325edf3 Mon Sep 17 00:00:00 2001 From: Oleg Date: Tue, 8 Mar 2016 00:56:08 -0800 Subject: [PATCH 070/123] Event driven architecture refactored. 1. Renamed Message to Event and Event to AbstractEvent 2. Generified Event and Handler 3. Updated EventDispatcher to make unsafe configuration impossible 4. Updated UML diagram accordingly --- event-driven-architecture/etc/eda.png | Bin 80265 -> 58476 bytes event-driven-architecture/etc/eda.ucls | 158 ++++++++---------- .../src/main/java/com/iluwatar/eda/App.java | 10 +- .../event/{Event.java => AbstractEvent.java} | 10 +- .../iluwatar/eda/event/UserCreatedEvent.java | 2 +- .../iluwatar/eda/event/UserUpdatedEvent.java | 2 +- .../framework/{Message.java => Event.java} | 6 +- .../eda/framework/EventDispatcher.java | 17 +- .../com/iluwatar/eda/framework/Handler.java | 6 +- .../eda/handler/UserCreatedEventHandler.java | 8 +- .../eda/handler/UserUpdatedEventHandler.java | 7 +- .../eda/event/UserCreatedEventTest.java | 6 +- .../eda/framework/EventDispatcherTest.java | 14 +- 13 files changed, 115 insertions(+), 131 deletions(-) rename event-driven-architecture/src/main/java/com/iluwatar/eda/event/{Event.java => AbstractEvent.java} (85%) rename event-driven-architecture/src/main/java/com/iluwatar/eda/framework/{Message.java => Event.java} (91%) diff --git a/event-driven-architecture/etc/eda.png b/event-driven-architecture/etc/eda.png index 38c433a409e06da181798e44e1db1b0b88e589c7..7437264518029acca6c2db4781b69d3b36c1a91a 100644 GIT binary patch literal 58476 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

*&nI)sQ1C8^KMhLOi}&PndASpm%;RT(W=9PU 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 XEPJa~ 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 F{{dVD$#eh! diff --git a/event-driven-architecture/etc/eda.ucls b/event-driven-architecture/etc/eda.ucls index 4ddb8b20c..776bedc81 100644 --- a/event-driven-architecture/etc/eda.ucls +++ b/event-driven-architecture/etc/eda.ucls @@ -4,7 +4,7 @@ - + @@ -15,7 +15,7 @@ project="event-driven-architecture" file="/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java" binary="false" corner="BOTTOM_RIGHT"> - + @@ -26,17 +26,17 @@ project="event-driven-architecture" file="/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java" binary="false" corner="BOTTOM_RIGHT"> - + - - + @@ -46,7 +46,7 @@ - + @@ -56,7 +56,7 @@ - + @@ -66,7 +66,7 @@ - + @@ -76,17 +76,17 @@ - + - - + @@ -94,99 +94,87 @@ - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + + - - + - - - + + + - - + + - - + + - - - - + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + - - + + diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java index 4179046c8..866b3c9e9 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java @@ -22,9 +22,9 @@ */ package com.iluwatar.eda; -import com.iluwatar.eda.event.Event; import com.iluwatar.eda.event.UserCreatedEvent; import com.iluwatar.eda.event.UserUpdatedEvent; +import com.iluwatar.eda.framework.Event; import com.iluwatar.eda.framework.EventDispatcher; import com.iluwatar.eda.handler.UserCreatedEventHandler; import com.iluwatar.eda.handler.UserUpdatedEventHandler; @@ -53,12 +53,12 @@ public class App { public static void main(String[] args) { EventDispatcher dispatcher = new EventDispatcher(); - dispatcher.registerChannel(UserCreatedEvent.class, new UserCreatedEventHandler()); - dispatcher.registerChannel(UserUpdatedEvent.class, new UserUpdatedEventHandler()); + dispatcher.registerHandler(UserCreatedEvent.class, new UserCreatedEventHandler()); + dispatcher.registerHandler(UserUpdatedEvent.class, new UserUpdatedEventHandler()); User user = new User("iluwatar"); - dispatcher.onEvent(new UserCreatedEvent(user)); - dispatcher.onEvent(new UserUpdatedEvent(user)); + dispatcher.dispatch(new UserCreatedEvent(user)); + dispatcher.dispatch(new UserUpdatedEvent(user)); } } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/AbstractEvent.java similarity index 85% rename from event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java rename to event-driven-architecture/src/main/java/com/iluwatar/eda/event/AbstractEvent.java index 3ed0f9c9d..54a916c7b 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/Event.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/AbstractEvent.java @@ -23,10 +23,10 @@ package com.iluwatar.eda.event; import com.iluwatar.eda.framework.EventDispatcher; -import com.iluwatar.eda.framework.Message; +import com.iluwatar.eda.framework.Event; /** - * The {@link Event} class serves as a base class for defining custom events happening with your + * The {@link AbstractEvent} class serves as a base class for defining custom events happening with your * system. In this example we have two types of events defined. *

* Events can be distinguished using the {@link #getType() getType} method. */ -public class Event implements Message { +public abstract class AbstractEvent implements Event { /** * Returns the event type as a {@link Class} object * In this example, this method is used by the {@link EventDispatcher} to * dispatch events depending on their type. * - * @return the Event type as a {@link Class}. + * @return the AbstractEvent type as a {@link Class}. */ - public Class getType() { + public Class getType() { return getClass(); } } \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java index e3354aaf2..717ed1a9d 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java @@ -29,7 +29,7 @@ import com.iluwatar.eda.model.User; * This class can be extended to contain details about the user has been created. In this example, * the entire {@link User} object is passed on as data with the event. */ -public class UserCreatedEvent extends Event { +public class UserCreatedEvent extends AbstractEvent { private User user; diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java index 37ca05932..9646957dc 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java @@ -29,7 +29,7 @@ import com.iluwatar.eda.model.User; * This class can be extended to contain details about the user has been updated. In this example, * the entire {@link User} object is passed on as data with the event. */ -public class UserUpdatedEvent extends Event { +public class UserUpdatedEvent extends AbstractEvent { private User user; diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Event.java similarity index 91% rename from event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java rename to event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Event.java index ee9c48965..c63d2746f 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Message.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Event.java @@ -23,15 +23,15 @@ package com.iluwatar.eda.framework; /** - * A {@link Message} is an object with a specific type that is associated + * A {@link Event} is an object with a specific type that is associated * to a specific {@link Handler}. */ -public interface Message { +public interface Event { /** * Returns the message type as a {@link Class} object. In this example the message type is * used to handle events by their type. * @return the message type as a {@link Class}. */ - Class getType(); + Class getType(); } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java index 69e2cf0e3..9f8e29315 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java @@ -22,19 +22,16 @@ */ package com.iluwatar.eda.framework; -import com.iluwatar.eda.event.Event; - import java.util.HashMap; import java.util.Map; /** * Handles the routing of {@link Event} messages to associated handlers. * A {@link HashMap} is used to store the association between events and their respective handlers. - * */ public class EventDispatcher { - private Map, Handler> handlers; + private Map, Handler> handlers; public EventDispatcher() { handlers = new HashMap<>(); @@ -46,8 +43,8 @@ public class EventDispatcher { * @param eventType The {@link Event} to be registered * @param handler The {@link Handler} that will be handling the {@link Event} */ - public void registerChannel(Class eventType, - Handler handler) { + public void registerHandler(Class eventType, + Handler handler) { handlers.put(eventType, handler); } @@ -56,8 +53,12 @@ public class EventDispatcher { * * @param event The {@link Event} to be dispatched */ - public void onEvent(Event event) { - handlers.get(event.getClass()).onEvent(event); + @SuppressWarnings("unchecked") + public void dispatch(E event) { + Handler handler = (Handler) handlers.get(event.getClass()); + if (handler != null) { + handler.onEvent(event); + } } } \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java index 9c800a4d4..44bdab6dc 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java @@ -22,13 +22,11 @@ */ package com.iluwatar.eda.framework; -import com.iluwatar.eda.event.Event; - /** * This interface can be implemented to handle different types of messages. * Every handler is responsible for a single of type message */ -public interface Handler { +public interface Handler { /** * The onEvent method should implement and handle behavior related to the event. @@ -36,5 +34,5 @@ public interface Handler { * a queue to be consumed by other sub systems. * @param event the {@link Event} object to be handled. */ - void onEvent(Event event); + void onEvent(E event); } \ No newline at end of file diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java index c51b3391a..3ef4e8255 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java @@ -22,7 +22,6 @@ */ package com.iluwatar.eda.handler; -import com.iluwatar.eda.event.Event; import com.iluwatar.eda.event.UserCreatedEvent; import com.iluwatar.eda.framework.Handler; @@ -32,9 +31,10 @@ import com.iluwatar.eda.framework.Handler; public class UserCreatedEventHandler implements Handler { @Override - public void onEvent(Event message) { + public void onEvent(UserCreatedEvent event) { - UserCreatedEvent userCreatedEvent = (UserCreatedEvent) message; - System.out.printf("User with %s has been Created!", userCreatedEvent.getUser().getUsername()); + System.out.println(String.format( + "User '%s' has been Created!", event.getUser().getUsername())); } + } diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java index 5be4ab5cc..0311d5781 100644 --- a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java +++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java @@ -22,7 +22,6 @@ */ package com.iluwatar.eda.handler; -import com.iluwatar.eda.event.Event; import com.iluwatar.eda.event.UserUpdatedEvent; import com.iluwatar.eda.framework.Handler; @@ -32,9 +31,9 @@ import com.iluwatar.eda.framework.Handler; public class UserUpdatedEventHandler implements Handler { @Override - public void onEvent(Event message) { + public void onEvent(UserUpdatedEvent event) { - UserUpdatedEvent userUpdatedEvent = (UserUpdatedEvent) message; - System.out.printf("User with %s has been Updated!", userUpdatedEvent.getUser().getUsername()); + System.out.println(String.format( + "User '%s' has been Updated!", event.getUser().getUsername())); } } diff --git a/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java b/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java index 754fac678..b9074faf2 100644 --- a/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java +++ b/event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java @@ -29,13 +29,13 @@ import org.junit.Test; import static org.junit.Assert.assertEquals; /** - * {@link UserCreatedEventTest} tests and verifies {@link Event} behaviour. + * {@link UserCreatedEventTest} tests and verifies {@link AbstractEvent} behaviour. */ public class UserCreatedEventTest { /** - * This unit test should correctly return the {@link Event} class type when calling the - * {@link Event#getType() getType} method. + * This unit test should correctly return the {@link AbstractEvent} class type when calling the + * {@link AbstractEvent#getType() getType} method. */ @Test public void testGetEventType() { diff --git a/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java b/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java index 8db315ff4..21956afec 100644 --- a/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java +++ b/event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java @@ -22,7 +22,6 @@ */ package com.iluwatar.eda.framework; -import com.iluwatar.eda.framework.EventDispatcher; import com.iluwatar.eda.event.UserCreatedEvent; import com.iluwatar.eda.event.UserUpdatedEvent; import com.iluwatar.eda.handler.UserCreatedEventHandler; @@ -49,8 +48,8 @@ public class EventDispatcherTest { EventDispatcher dispatcher = spy(new EventDispatcher()); UserCreatedEventHandler userCreatedEventHandler = spy(new UserCreatedEventHandler()); UserUpdatedEventHandler userUpdatedEventHandler = spy(new UserUpdatedEventHandler()); - dispatcher.registerChannel(UserCreatedEvent.class, userCreatedEventHandler); - dispatcher.registerChannel(UserUpdatedEvent.class, userUpdatedEventHandler); + dispatcher.registerHandler(UserCreatedEvent.class, userCreatedEventHandler); + dispatcher.registerHandler(UserUpdatedEvent.class, userUpdatedEventHandler); User user = new User("iluwatar"); @@ -58,15 +57,14 @@ public class EventDispatcherTest { UserUpdatedEvent userUpdatedEvent = new UserUpdatedEvent(user); //fire a userCreatedEvent and verify that userCreatedEventHandler has been invoked. - dispatcher.onEvent(userCreatedEvent); + dispatcher.dispatch(userCreatedEvent); verify(userCreatedEventHandler).onEvent(userCreatedEvent); - verify(dispatcher).onEvent(userCreatedEvent); + verify(dispatcher).dispatch(userCreatedEvent); //fire a userCreatedEvent and verify that userUpdatedEventHandler has been invoked. - dispatcher.onEvent(userUpdatedEvent); + dispatcher.dispatch(userUpdatedEvent); verify(userUpdatedEventHandler).onEvent(userUpdatedEvent); - verify(dispatcher).onEvent(userUpdatedEvent); + verify(dispatcher).dispatch(userUpdatedEvent); } - } From 528d179efecb827a4f4bb0359e9ceff3c32abaf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sun, 13 Mar 2016 17:29:09 +0200 Subject: [PATCH 071/123] Add missing license headers --- .../java/com/iluwatar/factorykit/App.java | 22 +++++++++++++++++ .../java/com/iluwatar/factorykit/Axe.java | 22 +++++++++++++++++ .../java/com/iluwatar/factorykit/Bow.java | 22 +++++++++++++++++ .../java/com/iluwatar/factorykit/Builder.java | 22 +++++++++++++++++ .../java/com/iluwatar/factorykit/Spear.java | 22 +++++++++++++++++ .../java/com/iluwatar/factorykit/Sword.java | 22 +++++++++++++++++ .../java/com/iluwatar/factorykit/Weapon.java | 22 +++++++++++++++++ .../iluwatar/factorykit/WeaponFactory.java | 22 +++++++++++++++++ .../com/iluwatar/factorykit/WeaponType.java | 22 +++++++++++++++++ .../com/iluwatar/factorykit/app/AppTest.java | 22 +++++++++++++++++ .../factorykit/factorykit/FactoryKitTest.java | 22 +++++++++++++++++ .../src/main/java/com/iluwatar/monad/App.java | 22 +++++++++++++++++ .../src/main/java/com/iluwatar/monad/Sex.java | 22 +++++++++++++++++ .../main/java/com/iluwatar/monad/User.java | 22 +++++++++++++++++ .../java/com/iluwatar/monad/Validator.java | 22 +++++++++++++++++ .../test/java/com/iluwatar/monad/AppTest.java | 22 +++++++++++++++++ .../java/com/iluwatar/monad/MonadTest.java | 22 +++++++++++++++++ value-object/pom.xml | 24 +++++++++++++++++++ .../java/com/iluwatar/value/object/App.java | 22 +++++++++++++++++ .../com/iluwatar/value/object/HeroStat.java | 22 +++++++++++++++++ .../com/iluwatar/value/object/AppTest.java | 22 +++++++++++++++++ .../iluwatar/value/object/HeroStatTest.java | 22 +++++++++++++++++ 22 files changed, 486 insertions(+) diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/App.java b/factory-kit/src/main/java/com/iluwatar/factorykit/App.java index 91d1eb061..f27bee170 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/App.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factorykit; /** diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Axe.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Axe.java index 4e1a5e554..826a1f9ec 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/Axe.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Axe.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factorykit; public class Axe implements Weapon { diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Bow.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Bow.java index a90f4cf2e..5aa952c3d 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/Bow.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Bow.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factorykit; public class Bow implements Weapon { diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java index be74626f7..1049c7b6f 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factorykit; import java.util.function.Supplier; diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Spear.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Spear.java index a50f54290..c32811e8c 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/Spear.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Spear.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factorykit; public class Spear implements Weapon { diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Sword.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Sword.java index 278febaf5..208cd6bbb 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/Sword.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Sword.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factorykit; public class Sword implements Weapon { diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java b/factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java index 980a2219f..3d668e352 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factorykit; /** diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java index e83a997c6..80a6fd9d3 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factorykit; import java.util.HashMap; diff --git a/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java index ac542048d..283f252de 100644 --- a/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java +++ b/factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factorykit; /** diff --git a/factory-kit/src/test/java/com/iluwatar/factorykit/app/AppTest.java b/factory-kit/src/test/java/com/iluwatar/factorykit/app/AppTest.java index 9b9af2530..036326d97 100644 --- a/factory-kit/src/test/java/com/iluwatar/factorykit/app/AppTest.java +++ b/factory-kit/src/test/java/com/iluwatar/factorykit/app/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factorykit.app; import com.iluwatar.factorykit.App; diff --git a/factory-kit/src/test/java/com/iluwatar/factorykit/factorykit/FactoryKitTest.java b/factory-kit/src/test/java/com/iluwatar/factorykit/factorykit/FactoryKitTest.java index ea629f57d..c57bee3e3 100644 --- a/factory-kit/src/test/java/com/iluwatar/factorykit/factorykit/FactoryKitTest.java +++ b/factory-kit/src/test/java/com/iluwatar/factorykit/factorykit/FactoryKitTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.factorykit.factorykit; import com.iluwatar.factorykit.*; diff --git a/monad/src/main/java/com/iluwatar/monad/App.java b/monad/src/main/java/com/iluwatar/monad/App.java index e330cfa64..7b28fdcf8 100644 --- a/monad/src/main/java/com/iluwatar/monad/App.java +++ b/monad/src/main/java/com/iluwatar/monad/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.monad; import java.util.Objects; diff --git a/monad/src/main/java/com/iluwatar/monad/Sex.java b/monad/src/main/java/com/iluwatar/monad/Sex.java index 8b7e43f3c..b5d094d4b 100644 --- a/monad/src/main/java/com/iluwatar/monad/Sex.java +++ b/monad/src/main/java/com/iluwatar/monad/Sex.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.monad; public enum Sex { diff --git a/monad/src/main/java/com/iluwatar/monad/User.java b/monad/src/main/java/com/iluwatar/monad/User.java index edd299643..471094526 100644 --- a/monad/src/main/java/com/iluwatar/monad/User.java +++ b/monad/src/main/java/com/iluwatar/monad/User.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.monad; public class User { diff --git a/monad/src/main/java/com/iluwatar/monad/Validator.java b/monad/src/main/java/com/iluwatar/monad/Validator.java index 2298a4d8e..cc4f36020 100644 --- a/monad/src/main/java/com/iluwatar/monad/Validator.java +++ b/monad/src/main/java/com/iluwatar/monad/Validator.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.monad; import java.util.ArrayList; diff --git a/monad/src/test/java/com/iluwatar/monad/AppTest.java b/monad/src/test/java/com/iluwatar/monad/AppTest.java index 5d23b41a6..78440b468 100644 --- a/monad/src/test/java/com/iluwatar/monad/AppTest.java +++ b/monad/src/test/java/com/iluwatar/monad/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.monad; import org.junit.Test; diff --git a/monad/src/test/java/com/iluwatar/monad/MonadTest.java b/monad/src/test/java/com/iluwatar/monad/MonadTest.java index ae78572f8..4ada7191d 100644 --- a/monad/src/test/java/com/iluwatar/monad/MonadTest.java +++ b/monad/src/test/java/com/iluwatar/monad/MonadTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.monad; diff --git a/value-object/pom.xml b/value-object/pom.xml index 1ed2adb43..3cbb7bb86 100644 --- a/value-object/pom.xml +++ b/value-object/pom.xml @@ -1,4 +1,28 @@ + diff --git a/value-object/src/main/java/com/iluwatar/value/object/App.java b/value-object/src/main/java/com/iluwatar/value/object/App.java index 85779fcb7..1e943d054 100644 --- a/value-object/src/main/java/com/iluwatar/value/object/App.java +++ b/value-object/src/main/java/com/iluwatar/value/object/App.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.value.object; /** diff --git a/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java b/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java index 101837db0..258c4d6a0 100644 --- a/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java +++ b/value-object/src/main/java/com/iluwatar/value/object/HeroStat.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.value.object; /** diff --git a/value-object/src/test/java/com/iluwatar/value/object/AppTest.java b/value-object/src/test/java/com/iluwatar/value/object/AppTest.java index aed3c2f20..85ef8b84e 100644 --- a/value-object/src/test/java/com/iluwatar/value/object/AppTest.java +++ b/value-object/src/test/java/com/iluwatar/value/object/AppTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.value.object; import org.junit.Test; diff --git a/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java b/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java index 785a4d8fe..4a8034b0b 100644 --- a/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java +++ b/value-object/src/test/java/com/iluwatar/value/object/HeroStatTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.value.object; import static org.hamcrest.CoreMatchers.is; From 7aff77ab27d3f2339d82a533353b1614620c4893 Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Tue, 15 Mar 2016 18:44:59 +0530 Subject: [PATCH 072/123] Used mockito to replicate SQLException while closing connection to show use of loggedMute --- mute-idiom/pom.xml | 82 +++++++++---------- .../src/main/java/com/iluwatar/mute/App.java | 12 ++- .../src/main/java/com/iluwatar/mute/Mute.java | 4 +- 3 files changed, 48 insertions(+), 50 deletions(-) diff --git a/mute-idiom/pom.xml b/mute-idiom/pom.xml index e4597446b..528b60967 100644 --- a/mute-idiom/pom.xml +++ b/mute-idiom/pom.xml @@ -1,47 +1,39 @@ - - - 4.0.0 - - com.iluwatar - java-design-patterns - 1.11.0-SNAPSHOT - - mute-idiom - - - junit - junit - test - - - org.mockito - mockito-core - test - - + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.11.0-SNAPSHOT + + mute-idiom + + + junit + junit + test + + + org.mockito + mockito-core + compile + + diff --git a/mute-idiom/src/main/java/com/iluwatar/mute/App.java b/mute-idiom/src/main/java/com/iluwatar/mute/App.java index edb5ebcc9..36da1c4f9 100644 --- a/mute-idiom/src/main/java/com/iluwatar/mute/App.java +++ b/mute-idiom/src/main/java/com/iluwatar/mute/App.java @@ -22,6 +22,9 @@ */ package com.iluwatar.mute; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; + import java.io.ByteArrayOutputStream; import java.sql.Connection; import java.sql.SQLException; @@ -46,8 +49,9 @@ public class App { } private static void useOfLoggedMute() { - Connection connection = openConnection(); + Connection connection = null; try { + connection = openConnection(); readStuff(connection); } catch (SQLException ex) { ex.printStackTrace(); @@ -71,7 +75,9 @@ public class App { } } - private static Connection openConnection() { - return null; + private static Connection openConnection() throws SQLException { + Connection mockedConnection = mock(Connection.class); + doThrow(SQLException.class).when(mockedConnection).close(); + return mockedConnection; } } diff --git a/mute-idiom/src/main/java/com/iluwatar/mute/Mute.java b/mute-idiom/src/main/java/com/iluwatar/mute/Mute.java index ba055422b..3e1ad2e2e 100644 --- a/mute-idiom/src/main/java/com/iluwatar/mute/Mute.java +++ b/mute-idiom/src/main/java/com/iluwatar/mute/Mute.java @@ -50,8 +50,8 @@ public final class Mute { /** * Executes the runnable and logs the exception occurred on {@link System#err}. * This method should be utilized to mute the operations about which most you can do is log. - * For instance while closing a connection to database, all you can do is log the exception - * occurred. + * For instance while closing a connection to database, or cleaning up a resource, + * all you can do is log the exception occurred. * * @param runnable a runnable that may throw an exception on execution. */ From c78dd2667a0106d5c62cb022db0efb6610676443 Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Wed, 16 Mar 2016 12:40:46 +0530 Subject: [PATCH 073/123] Work on #385, added documentation and class diagram. Made refactoring changes to pass checkstyle and PMD checks --- mute-idiom/etc/mute-idiom.png | Bin 0 -> 13502 bytes mute-idiom/etc/mute-idiom.ucls | 45 ++++++++++++++++ .../src/main/java/com/iluwatar/mute/App.java | 50 +++++++++++++----- .../com/iluwatar/mute/CheckedRunnable.java | 3 +- .../src/main/java/com/iluwatar/mute/Mute.java | 3 ++ .../test/java/com/iluwatar/mute/AppTest.java | 2 +- .../test/java/com/iluwatar/mute/MuteTest.java | 20 ++++++- pom.xml | 1 + 8 files changed, 106 insertions(+), 18 deletions(-) create mode 100644 mute-idiom/etc/mute-idiom.png create mode 100644 mute-idiom/etc/mute-idiom.ucls diff --git a/mute-idiom/etc/mute-idiom.png b/mute-idiom/etc/mute-idiom.png new file mode 100644 index 0000000000000000000000000000000000000000..626cec827a8b6fb5083dfde75c94937d682ee64b GIT binary patch literal 13502 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mute-idiom/src/main/java/com/iluwatar/mute/App.java b/mute-idiom/src/main/java/com/iluwatar/mute/App.java index 36da1c4f9..a0eb815fd 100644 --- a/mute-idiom/src/main/java/com/iluwatar/mute/App.java +++ b/mute-idiom/src/main/java/com/iluwatar/mute/App.java @@ -20,6 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.mute; import static org.mockito.Mockito.doThrow; @@ -28,33 +29,56 @@ import static org.mockito.Mockito.mock; import java.io.ByteArrayOutputStream; import java.sql.Connection; import java.sql.SQLException; +import java.sql.Statement; +/** + * Mute pattern is utilized when we need to suppress an exception due to an API flaw or in + * situation when all we can do to handle the exception is to log it. + * This pattern should not be used everywhere. It is very important to logically handle the + * exceptions in a system, but some situations like the ones described above require this pattern, + * so that we don't need to repeat + *
+ * 
+ *   try {
+ *     // code that may throwing exception we need to ignore or may never be thrown
+ *   } catch (Exception ex) {
+ *     // ignore by logging or throw error if unexpected exception occurs
+ *   }
+ * 
+ * 
every time we need to ignore an exception. + * + */ public class App { - public static void main(String[] args) { - + /** + * Program entry point. + * + * @param args command line args. + * @throws Exception if any exception occurs + */ + public static void main(String[] args) throws Exception { + useOfLoggedMute(); - + useOfMute(); } /* - * Typically used when the API declares some exception but cannot do so. Usually a signature mistake. - * In this example out is not supposed to throw exception as it is a ByteArrayOutputStream. So we - * utilize mute, which will throw AssertionError if unexpected exception occurs. + * Typically used when the API declares some exception but cannot do so. Usually a + * signature mistake.In this example out is not supposed to throw exception as it is a + * ByteArrayOutputStream. So we utilize mute, which will throw AssertionError if unexpected + * exception occurs. */ private static void useOfMute() { ByteArrayOutputStream out = new ByteArrayOutputStream(); Mute.mute(() -> out.write("Hello".getBytes())); } - private static void useOfLoggedMute() { + private static void useOfLoggedMute() throws SQLException { Connection connection = null; try { connection = openConnection(); readStuff(connection); - } catch (SQLException ex) { - ex.printStackTrace(); } finally { closeConnection(connection); } @@ -64,14 +88,12 @@ public class App { * All we can do while failed close of connection is to log it. */ private static void closeConnection(Connection connection) { - if (connection != null) { - Mute.loggedMute(() -> connection.close()); - } + Mute.loggedMute(() -> connection.close()); } private static void readStuff(Connection connection) throws SQLException { - if (connection != null) { - connection.createStatement(); + try (Statement statement = connection.createStatement()) { + System.out.println("Read data from statement"); } } diff --git a/mute-idiom/src/main/java/com/iluwatar/mute/CheckedRunnable.java b/mute-idiom/src/main/java/com/iluwatar/mute/CheckedRunnable.java index 7f99386f0..d1440636f 100644 --- a/mute-idiom/src/main/java/com/iluwatar/mute/CheckedRunnable.java +++ b/mute-idiom/src/main/java/com/iluwatar/mute/CheckedRunnable.java @@ -20,6 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.mute; /** @@ -32,5 +33,5 @@ public interface CheckedRunnable { * Same as {@link Runnable#run()} with a possibility of exception in execution. * @throws Exception if any exception occurs. */ - public void run() throws Exception; + void run() throws Exception; } diff --git a/mute-idiom/src/main/java/com/iluwatar/mute/Mute.java b/mute-idiom/src/main/java/com/iluwatar/mute/Mute.java index 3e1ad2e2e..64169a8f5 100644 --- a/mute-idiom/src/main/java/com/iluwatar/mute/Mute.java +++ b/mute-idiom/src/main/java/com/iluwatar/mute/Mute.java @@ -29,6 +29,9 @@ import java.io.IOException; * A utility class that allows you to utilize mute idiom. */ public final class Mute { + + // The constructor is never meant to be called. + private Mute() {} /** * Executes the runnable and throws the exception occurred within a {@link AssertionError}. diff --git a/mute-idiom/src/test/java/com/iluwatar/mute/AppTest.java b/mute-idiom/src/test/java/com/iluwatar/mute/AppTest.java index 8079c6acb..2d4e344a9 100644 --- a/mute-idiom/src/test/java/com/iluwatar/mute/AppTest.java +++ b/mute-idiom/src/test/java/com/iluwatar/mute/AppTest.java @@ -9,7 +9,7 @@ import org.junit.Test; public class AppTest { @Test - public void test() { + public void test() throws Exception { App.main(null); } } diff --git a/mute-idiom/src/test/java/com/iluwatar/mute/MuteTest.java b/mute-idiom/src/test/java/com/iluwatar/mute/MuteTest.java index b0016a331..58cbfe893 100644 --- a/mute-idiom/src/test/java/com/iluwatar/mute/MuteTest.java +++ b/mute-idiom/src/test/java/com/iluwatar/mute/MuteTest.java @@ -20,6 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.mute; import static org.junit.Assert.assertTrue; @@ -38,6 +39,11 @@ public class MuteTest { @Rule public ExpectedException exception = ExpectedException.none(); + @Test + public void muteShouldRunTheCheckedRunnableAndNotThrowAnyExceptionIfCheckedRunnableDoesNotThrowAnyException() { + Mute.mute(() -> methodNotThrowingAnyException()); + } + @Test public void muteShouldRethrowUnexpectedExceptionAsAssertionError() throws Exception { exception.expect(AssertionError.class); @@ -46,8 +52,9 @@ public class MuteTest { Mute.mute(() -> methodThrowingException()); } - private void methodThrowingException() throws Exception { - throw new Exception(MESSAGE); + @Test + public void loggedMuteShouldRunTheCheckedRunnableAndNotThrowAnyExceptionIfCheckedRunnableDoesNotThrowAnyException() { + Mute.loggedMute(() -> methodNotThrowingAnyException()); } @Test @@ -59,4 +66,13 @@ public class MuteTest { assertTrue(new String(stream.toByteArray()).contains(MESSAGE)); } + + + private void methodNotThrowingAnyException() { + System.out.println("Executed successfully"); + } + + private void methodThrowingException() throws Exception { + throw new Exception(MESSAGE); + } } diff --git a/pom.xml b/pom.xml index 555844660..57d030756 100644 --- a/pom.xml +++ b/pom.xml @@ -123,6 +123,7 @@ feature-toggle value-object monad + mute-idiom From e5217bbde8e8d8baf7d4b3b3e3453879b775d005 Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Wed, 16 Mar 2016 12:48:53 +0530 Subject: [PATCH 074/123] Work on #385, added missing license template --- .../test/java/com/iluwatar/mute/AppTest.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/mute-idiom/src/test/java/com/iluwatar/mute/AppTest.java b/mute-idiom/src/test/java/com/iluwatar/mute/AppTest.java index 2d4e344a9..8075d9c85 100644 --- a/mute-idiom/src/test/java/com/iluwatar/mute/AppTest.java +++ b/mute-idiom/src/test/java/com/iluwatar/mute/AppTest.java @@ -1,3 +1,26 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + package com.iluwatar.mute; import org.junit.Test; From f6a20c7693d97b93654f472691acdb3d9a7f0110 Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Wed, 16 Mar 2016 18:47:07 +0530 Subject: [PATCH 075/123] Refactoring changes to DAO pattern. Renamed default dao implementation to InMemory and refined interface --- dao/src/main/java/com/iluwatar/dao/App.java | 18 +++--- .../java/com/iluwatar/dao/CustomerDao.java | 12 ++-- .../java/com/iluwatar/dao/DBCustomerDao.java | 38 ++++++++++++ ...rDaoImpl.java => InMemoryCustomerDao.java} | 56 ++++++++--------- ...Test.java => InMemoryCustomerDaoTest.java} | 62 +++++++++++-------- 5 files changed, 116 insertions(+), 70 deletions(-) create mode 100644 dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java rename dao/src/main/java/com/iluwatar/dao/{CustomerDaoImpl.java => InMemoryCustomerDao.java} (62%) rename dao/src/test/java/com/iluwatar/dao/{CustomerDaoImplTest.java => InMemoryCustomerDaoTest.java} (71%) diff --git a/dao/src/main/java/com/iluwatar/dao/App.java b/dao/src/main/java/com/iluwatar/dao/App.java index 3fa4b34d5..27daf3098 100644 --- a/dao/src/main/java/com/iluwatar/dao/App.java +++ b/dao/src/main/java/com/iluwatar/dao/App.java @@ -51,18 +51,18 @@ public class App { * @param args command line args. */ public static void main(final String[] args) { - final CustomerDao customerDao = new CustomerDaoImpl(generateSampleCustomers()); - log.info("customerDao.getAllCustomers(): " + customerDao.getAllCustomers()); - log.info("customerDao.getCusterById(2): " + customerDao.getCustomerById(2)); + final CustomerDao customerDao = new InMemoryCustomerDao(generateSampleCustomers()); + log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); + log.info("customerDao.getCusterById(2): " + customerDao.getById(2)); final Customer customer = new Customer(4, "Dan", "Danson"); - customerDao.addCustomer(customer); - log.info("customerDao.getAllCustomers(): " + customerDao.getAllCustomers()); + customerDao.add(customer); + log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); customer.setFirstName("Daniel"); customer.setLastName("Danielson"); - customerDao.updateCustomer(customer); - log.info("customerDao.getAllCustomers(): " + customerDao.getAllCustomers()); - customerDao.deleteCustomer(customer); - log.info("customerDao.getAllCustomers(): " + customerDao.getAllCustomers()); + customerDao.update(customer); + log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); + customerDao.delete(customer); + log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); } /** diff --git a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java index 26b4df47b..07608621b 100644 --- a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java @@ -22,7 +22,7 @@ */ package com.iluwatar.dao; -import java.util.List; +import java.util.stream.Stream; /** * @@ -31,13 +31,13 @@ import java.util.List; */ public interface CustomerDao { - List getAllCustomers(); + Stream getAll(); - Customer getCustomerById(int id); + Customer getById(int id); - void addCustomer(Customer customer); + boolean add(Customer customer); - void updateCustomer(Customer customer); + boolean update(Customer customer); - void deleteCustomer(Customer customer); + boolean delete(Customer customer); } diff --git a/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java new file mode 100644 index 000000000..fb53c1fed --- /dev/null +++ b/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java @@ -0,0 +1,38 @@ +package com.iluwatar.dao; + +import java.util.stream.Stream; + +public class DBCustomerDao implements CustomerDao { + + @Override + public Stream getAll() { + // TODO Auto-generated method stub + return null; + } + + @Override + public Customer getById(int id) { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean add(Customer customer) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean update(Customer customer) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean delete(Customer customer) { + // TODO Auto-generated method stub + return false; + } + + +} diff --git a/dao/src/main/java/com/iluwatar/dao/CustomerDaoImpl.java b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java similarity index 62% rename from dao/src/main/java/com/iluwatar/dao/CustomerDaoImpl.java rename to dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java index 25d4149fa..0057e7abe 100644 --- a/dao/src/main/java/com/iluwatar/dao/CustomerDaoImpl.java +++ b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java @@ -22,7 +22,10 @@ */ package com.iluwatar.dao; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Stream; /** * @@ -34,51 +37,44 @@ import java.util.List; * the DAO), from how these needs can be satisfied with a specific DBMS, database schema, etc. * */ -public class CustomerDaoImpl implements CustomerDao { +// TODO update the javadoc +public class InMemoryCustomerDao implements CustomerDao { - // Represents the DB structure for our example so we don't have to managed it ourselves - // Note: Normally this would be in the form of an actual database and not part of the Dao Impl. - private List customers; + private Map idToCustomer = new HashMap<>(); - public CustomerDaoImpl(final List customers) { - this.customers = customers; + public InMemoryCustomerDao(final List customers) { + customers.stream() + .forEach((customer) -> idToCustomer.put(customer.getId(), customer)); } @Override - public List getAllCustomers() { - return customers; + public Stream getAll() { + return idToCustomer.values().stream(); } @Override - public Customer getCustomerById(final int id) { - Customer customer = null; - for (final Customer cus : getAllCustomers()) { - if (cus.getId() == id) { - customer = cus; - break; - } - } - return customer; - } - - @Override - public void addCustomer(final Customer customer) { - if (getCustomerById(customer.getId()) == null) { - customers.add(customer); + public Customer getById(final int id) { + return idToCustomer.get(id); + } + + @Override + public boolean add(final Customer customer) { + if (getById(customer.getId()) != null) { + return false; } + + idToCustomer.put(customer.getId(), customer); + return true; } @Override - public void updateCustomer(final Customer customer) { - if (getAllCustomers().contains(customer)) { - final int index = getAllCustomers().indexOf(customer); - getAllCustomers().set(index, customer); - } + public boolean update(final Customer customer) { + return idToCustomer.replace(customer.getId(), customer) != null; } @Override - public void deleteCustomer(final Customer customer) { - getAllCustomers().remove(customer); + public boolean delete(final Customer customer) { + return idToCustomer.remove(customer.getId()) != null; } } diff --git a/dao/src/test/java/com/iluwatar/dao/CustomerDaoImplTest.java b/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java similarity index 71% rename from dao/src/test/java/com/iluwatar/dao/CustomerDaoImplTest.java rename to dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java index f30740629..6ebc4ccdc 100644 --- a/dao/src/test/java/com/iluwatar/dao/CustomerDaoImplTest.java +++ b/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java @@ -22,19 +22,18 @@ */ package com.iluwatar.dao; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; import java.util.ArrayList; import java.util.List; +import org.junit.Assume; import org.junit.Before; import org.junit.Test; -public class CustomerDaoImplTest { +public class InMemoryCustomerDaoTest { - private CustomerDaoImpl impl; + private InMemoryCustomerDao dao; private List customers; private static final Customer CUSTOMER = new Customer(1, "Freddy", "Krueger"); @@ -42,21 +41,26 @@ public class CustomerDaoImplTest { public void setUp() { customers = new ArrayList<>(); customers.add(CUSTOMER); - impl = new CustomerDaoImpl(customers); + dao = new InMemoryCustomerDao(customers); } @Test public void deleteExistingCustomer() { - assertEquals(1, impl.getAllCustomers().size()); - impl.deleteCustomer(CUSTOMER); - assertTrue(impl.getAllCustomers().isEmpty()); + Assume.assumeTrue(dao.getAll().count() == 1); + + boolean result = dao.delete(CUSTOMER); + + assertTrue(result); + assertTrue(dao.getAll().count() == 0); } @Test public void deleteNonExistingCustomer() { final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); - impl.deleteCustomer(nonExistingCustomer); - assertEquals(1, impl.getAllCustomers().size()); + boolean result = dao.delete(nonExistingCustomer); + + assertFalse(result); + assertEquals(1, dao.getAll().count()); } @Test @@ -64,8 +68,10 @@ public class CustomerDaoImplTest { final String newFirstname = "Bernard"; final String newLastname = "Montgomery"; final Customer customer = new Customer(CUSTOMER.getId(), newFirstname, newLastname); - impl.updateCustomer(customer); - final Customer cust = impl.getCustomerById(CUSTOMER.getId()); + boolean result = dao.update(customer); + + assertTrue(result); + final Customer cust = dao.getById(CUSTOMER.getId()); assertEquals(newFirstname, cust.getFirstName()); assertEquals(newLastname, cust.getLastName()); } @@ -76,9 +82,11 @@ public class CustomerDaoImplTest { final String newFirstname = "Douglas"; final String newLastname = "MacArthur"; final Customer customer = new Customer(nonExistingId, newFirstname, newLastname); - impl.updateCustomer(customer); - assertNull(impl.getCustomerById(nonExistingId)); - final Customer existingCustomer = impl.getCustomerById(CUSTOMER.getId()); + boolean result = dao.update(customer); + + assertFalse(result); + assertNull(dao.getById(nonExistingId)); + final Customer existingCustomer = dao.getById(CUSTOMER.getId()); assertEquals(CUSTOMER.getFirstName(), existingCustomer.getFirstName()); assertEquals(CUSTOMER.getLastName(), existingCustomer.getLastName()); } @@ -86,28 +94,32 @@ public class CustomerDaoImplTest { @Test public void addCustomer() { final Customer newCustomer = new Customer(3, "George", "Patton"); - impl.addCustomer(newCustomer); - assertEquals(2, impl.getAllCustomers().size()); + boolean result = dao.add(newCustomer); + + assertTrue(result); + assertEquals(2, dao.getAll().count()); } @Test public void addAlreadyAddedCustomer() { final Customer newCustomer = new Customer(3, "George", "Patton"); - impl.addCustomer(newCustomer); - assertEquals(2, impl.getAllCustomers().size()); - impl.addCustomer(newCustomer); - assertEquals(2, impl.getAllCustomers().size()); + dao.add(newCustomer); + + boolean result = dao.add(newCustomer); + assertFalse(result); + assertEquals(2, dao.getAll().count()); } @Test public void getExistinCustomerById() { - assertEquals(CUSTOMER, impl.getCustomerById(CUSTOMER.getId())); + assertEquals(CUSTOMER, dao.getById(CUSTOMER.getId())); } @Test - public void getNonExistinCustomerById() { + public void getNonExistingCustomerById() { final int nonExistingId = getNonExistingCustomerId(); - assertNull(impl.getCustomerById(nonExistingId)); + + assertNull(dao.getById(nonExistingId)); } /** From 448d855809aa7380663cc4b2b6f88b23e5eb7bde Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Fri, 18 Mar 2016 16:39:45 +0530 Subject: [PATCH 076/123] implemented and added test cases for DB dao. Added dependency of Hierarchical junit runner in parent pom --- dao/pom.xml | 8 + .../java/com/iluwatar/dao/DBCustomerDao.java | 114 ++++++++++++-- .../com/iluwatar/dao/DBCustomerDaoTest.java | 149 ++++++++++++++++++ pom.xml | 7 + 4 files changed, 267 insertions(+), 11 deletions(-) create mode 100644 dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java diff --git a/dao/pom.xml b/dao/pom.xml index 3b6fc7d1e..3f22a0cc6 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -44,6 +44,14 @@ log4j log4j + + com.h2database + h2 + + + de.bechte.junit + junit-hierarchicalcontextrunner +
diff --git a/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java index fb53c1fed..1b9c4b981 100644 --- a/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java @@ -1,38 +1,130 @@ package com.iluwatar.dao; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Spliterator; +import java.util.Spliterators; +import java.util.function.Consumer; import java.util.stream.Stream; +import java.util.stream.StreamSupport; public class DBCustomerDao implements CustomerDao { - @Override - public Stream getAll() { - // TODO Auto-generated method stub - return null; + private String dbUrl; + + public DBCustomerDao(String dbUrl) { + this.dbUrl = dbUrl; } + @Override + public Stream getAll() { + + Connection connection; + try { + connection = getConnection(); + PreparedStatement statement = connection.prepareStatement("SELECT * FROM CUSTOMERS"); + ResultSet resultSet = statement.executeQuery(); + return StreamSupport.stream(new Spliterators.AbstractSpliterator(Long.MAX_VALUE, Spliterator.ORDERED) { + + @Override + public boolean tryAdvance(Consumer action) { + try { + if (!resultSet.next()) { + return false; + } + action.accept(createCustomer(resultSet)); + return true; + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + }}, false).onClose(() -> mutedClose(connection)); + } catch (SQLException e) { + e.printStackTrace(); + return null; + } + } + + private void mutedClose(Connection connection) { + try { + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + private Customer createCustomer(ResultSet resultSet) throws SQLException { + return new Customer(resultSet.getInt("ID"), + resultSet.getString("FNAME"), + resultSet.getString("LNAME")); + } + @Override public Customer getById(int id) { - // TODO Auto-generated method stub + try (Connection connection = getConnection(); + PreparedStatement statement = connection.prepareStatement("SELECT * FROM CUSTOMERS WHERE ID = ?")) { + statement.setInt(1, id); + ResultSet resultSet = statement.executeQuery(); + if (resultSet.next()) { + return createCustomer(resultSet); + } + } catch (SQLException ex) { + ex.printStackTrace(); + } return null; } @Override public boolean add(Customer customer) { - // TODO Auto-generated method stub - return false; + if (getById(customer.getId()) != null) { + return false; + } + + try (Connection connection = getConnection(); + PreparedStatement statement = connection.prepareStatement("INSERT INTO CUSTOMERS VALUES (?,?,?)")) { + statement.setInt(1, customer.getId()); + statement.setString(2, customer.getFirstName()); + statement.setString(3, customer.getLastName()); + statement.execute(); + return true; + } catch (SQLException ex) { + ex.printStackTrace(); + return false; + } } @Override public boolean update(Customer customer) { - // TODO Auto-generated method stub - return false; + try (Connection connection = getConnection(); + PreparedStatement statement = connection.prepareStatement("UPDATE CUSTOMERS SET FNAME = ?, LNAME = ? WHERE ID = ?")) { + statement.setString(1, customer.getFirstName()); + statement.setString(2, customer.getLastName()); + statement.setInt(3, customer.getId()); + return statement.executeUpdate() > 0; + } catch (SQLException ex) { + ex.printStackTrace(); + return false; + } } @Override public boolean delete(Customer customer) { - // TODO Auto-generated method stub - return false; + try (Connection connection = getConnection(); + PreparedStatement statement = connection.prepareStatement("DELETE FROM CUSTOMERS WHERE ID = ?")) { + statement.setInt(1, customer.getId()); + return statement.executeUpdate() > 0; + } catch (SQLException ex) { + ex.printStackTrace(); + return false; + } } + private Connection getConnection() throws SQLException { + return DriverManager.getConnection(dbUrl); + } } diff --git a/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java b/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java new file mode 100644 index 000000000..202140e98 --- /dev/null +++ b/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java @@ -0,0 +1,149 @@ +package com.iluwatar.dao; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.stream.Stream; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import de.bechte.junit.runners.context.HierarchicalContextRunner; + +@RunWith(HierarchicalContextRunner.class) +public class DBCustomerDaoTest { + + private static final String DB_URL = "jdbc:h2:~/dao:customerdb"; + private DBCustomerDao dao; + private Customer existingCustomer = new Customer(1, "Freddy", "Krueger"); + + @Before + public void createSchema() throws SQLException { + try (Connection connection = DriverManager.getConnection(DB_URL); + Statement statement = connection.createStatement()) { + statement.execute("CREATE TABLE CUSTOMERS (ID NUMBER, FNAME VARCHAR(100), LNAME VARCHAR(100))"); + } + } + + @Before + public void setUp() { + dao = new DBCustomerDao(DB_URL); + boolean result = dao.add(existingCustomer); + assumeTrue(result); + } + + public class NonExistantCustomer { + + @Test + public void addingShouldResultInSuccess() { + try (Stream allCustomers = dao.getAll()) { + assumeTrue(allCustomers.count() == 1); + } + + final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); + boolean result = dao.add(nonExistingCustomer); + assertTrue(result); + + assertCustomerCountIs(2); + assertEquals(nonExistingCustomer, dao.getById(nonExistingCustomer.getId())); + } + + @Test + public void deletionShouldBeFailureAndNotAffectExistingCustomers() { + final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); + boolean result = dao.delete(nonExistingCustomer); + + assertFalse(result); + assertCustomerCountIs(1); + } + + @Test + public void updationShouldBeFailureAndNotAffectExistingCustomers() { + final int nonExistingId = getNonExistingCustomerId(); + final String newFirstname = "Douglas"; + final String newLastname = "MacArthur"; + final Customer customer = new Customer(nonExistingId, newFirstname, newLastname); + boolean result = dao.update(customer); + + assertFalse(result); + assertNull(dao.getById(nonExistingId)); + } + + @Test + public void retrieveShouldReturnNull() { + assertNull(dao.getById(getNonExistingCustomerId())); + } + + } + + public class ExistingCustomer { + + @Test + public void addingShouldResultInFailureAndNotAffectExistingCustomers() { + Customer existingCustomer = new Customer(1, "Freddy", "Krueger"); + + boolean result = dao.add(existingCustomer); + + assertFalse(result); + assertCustomerCountIs(1); + assertEquals(existingCustomer, dao.getById(existingCustomer.getId())); + } + + @Test + public void deletionShouldBeSuccessAndCustomerShouldBeNonAccessible() { + boolean result = dao.delete(existingCustomer); + + assertTrue(result); + assertCustomerCountIs(0); + assertNull(dao.getById(existingCustomer.getId())); + } + + @Test + public void updationShouldBeSuccessAndAccessingTheSameCustomerShouldReturnUpdatedInformation() { + final String newFirstname = "Bernard"; + final String newLastname = "Montgomery"; + final Customer customer = new Customer(existingCustomer.getId(), newFirstname, newLastname); + boolean result = dao.update(customer); + + assertTrue(result); + + final Customer cust = dao.getById(existingCustomer.getId()); + assertEquals(newFirstname, cust.getFirstName()); + assertEquals(newLastname, cust.getLastName()); + } + + } + + @After + public void deleteSchema() throws SQLException { + try (Connection connection = DriverManager.getConnection(DB_URL); + Statement statement = connection.createStatement()) { + statement.execute("DROP TABLE CUSTOMERS"); + } + } + + private void assertCustomerCountIs(int count) { + try (Stream allCustomers = dao.getAll()) { + assertTrue(allCustomers.count() == count); + } + } + + + /** + * An arbitrary number which does not correspond to an active Customer id. + * + * @return an int of a customer id which doesn't exist + */ + private int getNonExistingCustomerId() { + return 999; + } +} diff --git a/pom.xml b/pom.xml index 555844660..524a0261b 100644 --- a/pom.xml +++ b/pom.xml @@ -50,6 +50,7 @@ 19.0 1.15.1 1.10.19 + 4.12.1 abstract-factory @@ -195,6 +196,12 @@ ${systemrules.version} test + + de.bechte.junit + junit-hierarchicalcontextrunner + ${hierarchical-junit-runner-version} + test +
From bd1b65276e899af44d84bcfe0e94a3ce57d2fc10 Mon Sep 17 00:00:00 2001 From: slawiko Date: Sun, 20 Mar 2016 11:50:21 +0300 Subject: [PATCH 077/123] all index.md files renamed to README.md for more compatibility with github --- abstract-factory/{index.md => README.md} | 0 adapter/{index.md => README.md} | 0 .../{index.md => README.md} | 0 bridge/{index.md => README.md} | 0 builder/{index.md => README.md} | 0 business-delegate/{index.md => README.md} | 0 caching/{index.md => README.md} | 0 callback/{index.md => README.md} | 0 chain/{index.md => README.md} | 0 command/{index.md => README.md} | 0 composite/{index.md => README.md} | 0 dao/{index.md => README.md} | 0 decorator/{index.md => README.md} | 0 delegation/{index.md => README.md} | 0 dependency-injection/{index.md => README.md} | 0 .../{index.md => README.md} | 0 double-dispatch/{index.md => README.md} | 0 event-aggregator/{index.md => README.md} | 0 .../{index.md => README.md} | 0 execute-around/{index.md => README.md} | 0 facade/{index.md => README.md} | 0 factory-kit/{index.md => README.md} | 0 factory-method/{index.md => README.md} | 0 feature-toggle/{index.md => README.md} | 0 fluentinterface/{index.md => README.md} | 0 flux/{index.md => README.md} | 0 flyweight/{index.md => README.md} | 0 front-controller/{index.md => README.md} | 0 half-sync-half-async/{index.md => README.md} | 0 intercepting-filter/{index.md => README.md} | 0 interpreter/{index.md => README.md} | 0 iterator/{index.md => README.md} | 0 layers/{index.md => README.md} | 0 lazy-loading/{index.md => README.md} | 0 mediator/{index.md => README.md} | 0 memento/{index.md => README.md} | 0 message-channel/{index.md => README.md} | 0 model-view-controller/{index.md => README.md} | 0 model-view-presenter/{index.md => README.md} | 0 monad/{index.md => README.md} | 68 +++++++++---------- monostate/{index.md => README.md} | 0 multiton/{index.md => README.md} | 0 naked-objects/{index.md => README.md} | 0 null-object/{index.md => README.md} | 0 object-pool/{index.md => README.md} | 0 observer/{index.md => README.md} | 0 poison-pill/{index.md => README.md} | 0 private-class-data/{index.md => README.md} | 0 producer-consumer/{index.md => README.md} | 0 property/{index.md => README.md} | 0 prototype/{index.md => README.md} | 0 proxy/{index.md => README.md} | 0 publish-subscribe/{index.md => README.md} | 0 reactor/{index.md => README.md} | 0 reader-writer-lock/{index.md => README.md} | 0 repository/{index.md => README.md} | 0 .../{index.md => README.md} | 0 servant/{index.md => README.md} | 0 service-layer/{index.md => README.md} | 0 service-locator/{index.md => README.md} | 0 singleton/{index.md => README.md} | 0 specification/{index.md => README.md} | 0 state/{index.md => README.md} | 0 step-builder/{index.md => README.md} | 0 strategy/{index.md => README.md} | 0 template-method/{index.md => README.md} | 0 thread-pool/{index.md => README.md} | 0 tolerant-reader/{index.md => README.md} | 0 twin/{index.md => README.md} | 0 value-object/{index.md => README.md} | 0 visitor/{index.md => README.md} | 0 71 files changed, 34 insertions(+), 34 deletions(-) rename abstract-factory/{index.md => README.md} (100%) rename adapter/{index.md => README.md} (100%) rename async-method-invocation/{index.md => README.md} (100%) rename bridge/{index.md => README.md} (100%) rename builder/{index.md => README.md} (100%) rename business-delegate/{index.md => README.md} (100%) rename caching/{index.md => README.md} (100%) rename callback/{index.md => README.md} (100%) rename chain/{index.md => README.md} (100%) rename command/{index.md => README.md} (100%) rename composite/{index.md => README.md} (100%) rename dao/{index.md => README.md} (100%) rename decorator/{index.md => README.md} (100%) rename delegation/{index.md => README.md} (100%) rename dependency-injection/{index.md => README.md} (100%) rename double-checked-locking/{index.md => README.md} (100%) rename double-dispatch/{index.md => README.md} (100%) rename event-aggregator/{index.md => README.md} (100%) rename event-driven-architecture/{index.md => README.md} (100%) rename execute-around/{index.md => README.md} (100%) rename facade/{index.md => README.md} (100%) rename factory-kit/{index.md => README.md} (100%) rename factory-method/{index.md => README.md} (100%) rename feature-toggle/{index.md => README.md} (100%) rename fluentinterface/{index.md => README.md} (100%) rename flux/{index.md => README.md} (100%) rename flyweight/{index.md => README.md} (100%) rename front-controller/{index.md => README.md} (100%) rename half-sync-half-async/{index.md => README.md} (100%) rename intercepting-filter/{index.md => README.md} (100%) rename interpreter/{index.md => README.md} (100%) rename iterator/{index.md => README.md} (100%) rename layers/{index.md => README.md} (100%) rename lazy-loading/{index.md => README.md} (100%) rename mediator/{index.md => README.md} (100%) rename memento/{index.md => README.md} (100%) rename message-channel/{index.md => README.md} (100%) rename model-view-controller/{index.md => README.md} (100%) rename model-view-presenter/{index.md => README.md} (100%) rename monad/{index.md => README.md} (97%) rename monostate/{index.md => README.md} (100%) rename multiton/{index.md => README.md} (100%) rename naked-objects/{index.md => README.md} (100%) rename null-object/{index.md => README.md} (100%) rename object-pool/{index.md => README.md} (100%) rename observer/{index.md => README.md} (100%) rename poison-pill/{index.md => README.md} (100%) rename private-class-data/{index.md => README.md} (100%) rename producer-consumer/{index.md => README.md} (100%) rename property/{index.md => README.md} (100%) rename prototype/{index.md => README.md} (100%) rename proxy/{index.md => README.md} (100%) rename publish-subscribe/{index.md => README.md} (100%) rename reactor/{index.md => README.md} (100%) rename reader-writer-lock/{index.md => README.md} (100%) rename repository/{index.md => README.md} (100%) rename resource-acquisition-is-initialization/{index.md => README.md} (100%) rename servant/{index.md => README.md} (100%) rename service-layer/{index.md => README.md} (100%) rename service-locator/{index.md => README.md} (100%) rename singleton/{index.md => README.md} (100%) rename specification/{index.md => README.md} (100%) rename state/{index.md => README.md} (100%) rename step-builder/{index.md => README.md} (100%) rename strategy/{index.md => README.md} (100%) rename template-method/{index.md => README.md} (100%) rename thread-pool/{index.md => README.md} (100%) rename tolerant-reader/{index.md => README.md} (100%) rename twin/{index.md => README.md} (100%) rename value-object/{index.md => README.md} (100%) rename visitor/{index.md => README.md} (100%) diff --git a/abstract-factory/index.md b/abstract-factory/README.md similarity index 100% rename from abstract-factory/index.md rename to abstract-factory/README.md diff --git a/adapter/index.md b/adapter/README.md similarity index 100% rename from adapter/index.md rename to adapter/README.md diff --git a/async-method-invocation/index.md b/async-method-invocation/README.md similarity index 100% rename from async-method-invocation/index.md rename to async-method-invocation/README.md diff --git a/bridge/index.md b/bridge/README.md similarity index 100% rename from bridge/index.md rename to bridge/README.md diff --git a/builder/index.md b/builder/README.md similarity index 100% rename from builder/index.md rename to builder/README.md diff --git a/business-delegate/index.md b/business-delegate/README.md similarity index 100% rename from business-delegate/index.md rename to business-delegate/README.md diff --git a/caching/index.md b/caching/README.md similarity index 100% rename from caching/index.md rename to caching/README.md diff --git a/callback/index.md b/callback/README.md similarity index 100% rename from callback/index.md rename to callback/README.md diff --git a/chain/index.md b/chain/README.md similarity index 100% rename from chain/index.md rename to chain/README.md diff --git a/command/index.md b/command/README.md similarity index 100% rename from command/index.md rename to command/README.md diff --git a/composite/index.md b/composite/README.md similarity index 100% rename from composite/index.md rename to composite/README.md diff --git a/dao/index.md b/dao/README.md similarity index 100% rename from dao/index.md rename to dao/README.md diff --git a/decorator/index.md b/decorator/README.md similarity index 100% rename from decorator/index.md rename to decorator/README.md diff --git a/delegation/index.md b/delegation/README.md similarity index 100% rename from delegation/index.md rename to delegation/README.md diff --git a/dependency-injection/index.md b/dependency-injection/README.md similarity index 100% rename from dependency-injection/index.md rename to dependency-injection/README.md diff --git a/double-checked-locking/index.md b/double-checked-locking/README.md similarity index 100% rename from double-checked-locking/index.md rename to double-checked-locking/README.md diff --git a/double-dispatch/index.md b/double-dispatch/README.md similarity index 100% rename from double-dispatch/index.md rename to double-dispatch/README.md diff --git a/event-aggregator/index.md b/event-aggregator/README.md similarity index 100% rename from event-aggregator/index.md rename to event-aggregator/README.md diff --git a/event-driven-architecture/index.md b/event-driven-architecture/README.md similarity index 100% rename from event-driven-architecture/index.md rename to event-driven-architecture/README.md diff --git a/execute-around/index.md b/execute-around/README.md similarity index 100% rename from execute-around/index.md rename to execute-around/README.md diff --git a/facade/index.md b/facade/README.md similarity index 100% rename from facade/index.md rename to facade/README.md diff --git a/factory-kit/index.md b/factory-kit/README.md similarity index 100% rename from factory-kit/index.md rename to factory-kit/README.md diff --git a/factory-method/index.md b/factory-method/README.md similarity index 100% rename from factory-method/index.md rename to factory-method/README.md diff --git a/feature-toggle/index.md b/feature-toggle/README.md similarity index 100% rename from feature-toggle/index.md rename to feature-toggle/README.md diff --git a/fluentinterface/index.md b/fluentinterface/README.md similarity index 100% rename from fluentinterface/index.md rename to fluentinterface/README.md diff --git a/flux/index.md b/flux/README.md similarity index 100% rename from flux/index.md rename to flux/README.md diff --git a/flyweight/index.md b/flyweight/README.md similarity index 100% rename from flyweight/index.md rename to flyweight/README.md diff --git a/front-controller/index.md b/front-controller/README.md similarity index 100% rename from front-controller/index.md rename to front-controller/README.md diff --git a/half-sync-half-async/index.md b/half-sync-half-async/README.md similarity index 100% rename from half-sync-half-async/index.md rename to half-sync-half-async/README.md diff --git a/intercepting-filter/index.md b/intercepting-filter/README.md similarity index 100% rename from intercepting-filter/index.md rename to intercepting-filter/README.md diff --git a/interpreter/index.md b/interpreter/README.md similarity index 100% rename from interpreter/index.md rename to interpreter/README.md diff --git a/iterator/index.md b/iterator/README.md similarity index 100% rename from iterator/index.md rename to iterator/README.md diff --git a/layers/index.md b/layers/README.md similarity index 100% rename from layers/index.md rename to layers/README.md diff --git a/lazy-loading/index.md b/lazy-loading/README.md similarity index 100% rename from lazy-loading/index.md rename to lazy-loading/README.md diff --git a/mediator/index.md b/mediator/README.md similarity index 100% rename from mediator/index.md rename to mediator/README.md diff --git a/memento/index.md b/memento/README.md similarity index 100% rename from memento/index.md rename to memento/README.md diff --git a/message-channel/index.md b/message-channel/README.md similarity index 100% rename from message-channel/index.md rename to message-channel/README.md diff --git a/model-view-controller/index.md b/model-view-controller/README.md similarity index 100% rename from model-view-controller/index.md rename to model-view-controller/README.md diff --git a/model-view-presenter/index.md b/model-view-presenter/README.md similarity index 100% rename from model-view-presenter/index.md rename to model-view-presenter/README.md diff --git a/monad/index.md b/monad/README.md similarity index 97% rename from monad/index.md rename to monad/README.md index 82deba922..ffc67a354 100644 --- a/monad/index.md +++ b/monad/README.md @@ -1,35 +1,35 @@ ---- -layout: pattern -title: Monad -folder: monad -permalink: /patterns/monad/ -categories: Other -tags: - - Java - - Difficulty-Advanced - - Functional ---- - -## Intent - -Monad pattern based on monad from linear algebra represents the way of chaining operations -together step by step. Binding functions can be described as passing one's output to another's input -basing on the 'same type' contract. Formally, monad consists of a type constructor M and two -operations: -bind - that takes monadic object and a function from plain object to monadic value and returns monadic value -return - that takes plain type object and returns this object wrapped in a monadic value. - -![alt text](./etc/monad.png "Monad") - -## Applicability - -Use the Monad in any of the following situations - -* when you want to chain operations easily -* when you want to apply each function regardless of the result of any of them - -## Credits - -* [Design Pattern Reloaded by Remi Forax](https://youtu.be/-k2X7guaArU) -* [Brian Beckman: Don't fear the Monad](https://channel9.msdn.com/Shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads) +--- +layout: pattern +title: Monad +folder: monad +permalink: /patterns/monad/ +categories: Other +tags: + - Java + - Difficulty-Advanced + - Functional +--- + +## Intent + +Monad pattern based on monad from linear algebra represents the way of chaining operations +together step by step. Binding functions can be described as passing one's output to another's input +basing on the 'same type' contract. Formally, monad consists of a type constructor M and two +operations: +bind - that takes monadic object and a function from plain object to monadic value and returns monadic value +return - that takes plain type object and returns this object wrapped in a monadic value. + +![alt text](./etc/monad.png "Monad") + +## Applicability + +Use the Monad in any of the following situations + +* when you want to chain operations easily +* when you want to apply each function regardless of the result of any of them + +## Credits + +* [Design Pattern Reloaded by Remi Forax](https://youtu.be/-k2X7guaArU) +* [Brian Beckman: Don't fear the Monad](https://channel9.msdn.com/Shows/Going+Deep/Brian-Beckman-Dont-fear-the-Monads) * [Monad on Wikipedia](https://en.wikipedia.org/wiki/Monad_(functional_programming)) \ No newline at end of file diff --git a/monostate/index.md b/monostate/README.md similarity index 100% rename from monostate/index.md rename to monostate/README.md diff --git a/multiton/index.md b/multiton/README.md similarity index 100% rename from multiton/index.md rename to multiton/README.md diff --git a/naked-objects/index.md b/naked-objects/README.md similarity index 100% rename from naked-objects/index.md rename to naked-objects/README.md diff --git a/null-object/index.md b/null-object/README.md similarity index 100% rename from null-object/index.md rename to null-object/README.md diff --git a/object-pool/index.md b/object-pool/README.md similarity index 100% rename from object-pool/index.md rename to object-pool/README.md diff --git a/observer/index.md b/observer/README.md similarity index 100% rename from observer/index.md rename to observer/README.md diff --git a/poison-pill/index.md b/poison-pill/README.md similarity index 100% rename from poison-pill/index.md rename to poison-pill/README.md diff --git a/private-class-data/index.md b/private-class-data/README.md similarity index 100% rename from private-class-data/index.md rename to private-class-data/README.md diff --git a/producer-consumer/index.md b/producer-consumer/README.md similarity index 100% rename from producer-consumer/index.md rename to producer-consumer/README.md diff --git a/property/index.md b/property/README.md similarity index 100% rename from property/index.md rename to property/README.md diff --git a/prototype/index.md b/prototype/README.md similarity index 100% rename from prototype/index.md rename to prototype/README.md diff --git a/proxy/index.md b/proxy/README.md similarity index 100% rename from proxy/index.md rename to proxy/README.md diff --git a/publish-subscribe/index.md b/publish-subscribe/README.md similarity index 100% rename from publish-subscribe/index.md rename to publish-subscribe/README.md diff --git a/reactor/index.md b/reactor/README.md similarity index 100% rename from reactor/index.md rename to reactor/README.md diff --git a/reader-writer-lock/index.md b/reader-writer-lock/README.md similarity index 100% rename from reader-writer-lock/index.md rename to reader-writer-lock/README.md diff --git a/repository/index.md b/repository/README.md similarity index 100% rename from repository/index.md rename to repository/README.md diff --git a/resource-acquisition-is-initialization/index.md b/resource-acquisition-is-initialization/README.md similarity index 100% rename from resource-acquisition-is-initialization/index.md rename to resource-acquisition-is-initialization/README.md diff --git a/servant/index.md b/servant/README.md similarity index 100% rename from servant/index.md rename to servant/README.md diff --git a/service-layer/index.md b/service-layer/README.md similarity index 100% rename from service-layer/index.md rename to service-layer/README.md diff --git a/service-locator/index.md b/service-locator/README.md similarity index 100% rename from service-locator/index.md rename to service-locator/README.md diff --git a/singleton/index.md b/singleton/README.md similarity index 100% rename from singleton/index.md rename to singleton/README.md diff --git a/specification/index.md b/specification/README.md similarity index 100% rename from specification/index.md rename to specification/README.md diff --git a/state/index.md b/state/README.md similarity index 100% rename from state/index.md rename to state/README.md diff --git a/step-builder/index.md b/step-builder/README.md similarity index 100% rename from step-builder/index.md rename to step-builder/README.md diff --git a/strategy/index.md b/strategy/README.md similarity index 100% rename from strategy/index.md rename to strategy/README.md diff --git a/template-method/index.md b/template-method/README.md similarity index 100% rename from template-method/index.md rename to template-method/README.md diff --git a/thread-pool/index.md b/thread-pool/README.md similarity index 100% rename from thread-pool/index.md rename to thread-pool/README.md diff --git a/tolerant-reader/index.md b/tolerant-reader/README.md similarity index 100% rename from tolerant-reader/index.md rename to tolerant-reader/README.md diff --git a/twin/index.md b/twin/README.md similarity index 100% rename from twin/index.md rename to twin/README.md diff --git a/value-object/index.md b/value-object/README.md similarity index 100% rename from value-object/index.md rename to value-object/README.md diff --git a/visitor/index.md b/visitor/README.md similarity index 100% rename from visitor/index.md rename to visitor/README.md From fa077c8be9020cb0417b1ea705dd8873775ce72b Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Mon, 21 Mar 2016 17:55:29 +0530 Subject: [PATCH 078/123] Work on #404, javadocs and test cases for DB and in memory dao. --- dao/pom.xml | 4 + dao/src/main/java/com/iluwatar/dao/App.java | 12 +- .../java/com/iluwatar/dao/CustomerDao.java | 52 +++- .../java/com/iluwatar/dao/DBCustomerDao.java | 72 ++++-- .../com/iluwatar/dao/InMemoryCustomerDao.java | 23 +- .../test/java/com/iluwatar/dao/AppTest.java | 4 +- .../com/iluwatar/dao/DBCustomerDaoTest.java | 227 +++++++++++------- .../iluwatar/dao/InMemoryCustomerDaoTest.java | 164 +++++++------ 8 files changed, 345 insertions(+), 213 deletions(-) diff --git a/dao/pom.xml b/dao/pom.xml index 3f22a0cc6..05ab2b22a 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -52,6 +52,10 @@ de.bechte.junit junit-hierarchicalcontextrunner + + org.mockito + mockito-core +
diff --git a/dao/src/main/java/com/iluwatar/dao/App.java b/dao/src/main/java/com/iluwatar/dao/App.java index 27daf3098..146fddcb0 100644 --- a/dao/src/main/java/com/iluwatar/dao/App.java +++ b/dao/src/main/java/com/iluwatar/dao/App.java @@ -49,9 +49,11 @@ public class App { * Program entry point. * * @param args command line args. + * @throws Exception if any error occurs. */ - public static void main(final String[] args) { - final CustomerDao customerDao = new InMemoryCustomerDao(generateSampleCustomers()); + public static void main(final String[] args) throws Exception { + final CustomerDao customerDao = new InMemoryCustomerDao(); + addCustomers(customerDao); log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); log.info("customerDao.getCusterById(2): " + customerDao.getById(2)); final Customer customer = new Customer(4, "Dan", "Danson"); @@ -65,6 +67,12 @@ public class App { log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); } + private static void addCustomers(CustomerDao customerDao) throws Exception { + for (Customer customer : generateSampleCustomers()) { + customerDao.add(customer); + } + } + /** * Generate customers. * diff --git a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java index 07608621b..545e46a5e 100644 --- a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java @@ -26,18 +26,54 @@ import java.util.stream.Stream; /** * - * CustomerDao - * + * In an application the Data Access Object (DAO) is a part of Data access layer. It is an object + * that provides an interface to some type of persistence mechanism. By mapping application calls + * to the persistence layer, DAO provides some specific data operations without exposing details + * of the database. This isolation supports the Single responsibility principle. It separates what + * data accesses the application needs, in terms of domain-specific objects and data types + * (the public interface of the DAO), from how these needs can be satisfied with a specific DBMS, + * database schema, etc. + *

+ * Any change in the way data is stored and retrieved will not change the client code as the client + * will be using interface and need not worry about exact source. + * + * @see InMemoryCustomerDao + * @see DBCustomerDao */ public interface CustomerDao { - Stream getAll(); + /** + * @return all the customers as a stream. The stream may be lazily or eagerly evaluated based on the + * implementation. The stream must be closed after use. + * @throws Exception if any error occurs. + */ + Stream getAll() throws Exception; + + /** + * @param id unique identifier of the customer. + * @return customer with unique identifier id is found, null otherwise. + * @throws Exception if any error occurs. + */ + Customer getById(int id) throws Exception; - Customer getById(int id); + /** + * @param customer the customer to be added. + * @return true if customer is successfully added, false if customer already exists. + * @throws Exception if any error occurs. + */ + boolean add(Customer customer) throws Exception; - boolean add(Customer customer); + /** + * @param customer the customer to be updated. + * @return true if customer exists and is successfully updated, false otherwise. + * @throws Exception if any error occurs. + */ + boolean update(Customer customer) throws Exception; - boolean update(Customer customer); - - boolean delete(Customer customer); + /** + * @param customer the customer to be deleted. + * @return true if customer exists and is successfully deleted, false otherwise. + * @throws Exception if any error occurs. + */ + boolean delete(Customer customer) throws Exception; } diff --git a/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java index 1b9c4b981..950ecb1b3 100644 --- a/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java @@ -1,7 +1,28 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dao; import java.sql.Connection; -import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -11,16 +32,22 @@ import java.util.function.Consumer; import java.util.stream.Stream; import java.util.stream.StreamSupport; +import javax.sql.DataSource; + +/** + * + * + */ public class DBCustomerDao implements CustomerDao { - private String dbUrl; + private final DataSource dataSource; - public DBCustomerDao(String dbUrl) { - this.dbUrl = dbUrl; + public DBCustomerDao(DataSource dataSource) { + this.dataSource = dataSource; } @Override - public Stream getAll() { + public Stream getAll() throws Exception { Connection connection; try { @@ -41,14 +68,16 @@ public class DBCustomerDao implements CustomerDao { e.printStackTrace(); return false; } - }}, false).onClose(() -> mutedClose(connection)); } catch (SQLException e) { - e.printStackTrace(); - return null; + throw new Exception(e.getMessage(), e); } } + private Connection getConnection() throws SQLException { + return dataSource.getConnection(); + } + private void mutedClose(Connection connection) { try { connection.close(); @@ -64,22 +93,23 @@ public class DBCustomerDao implements CustomerDao { } @Override - public Customer getById(int id) { + public Customer getById(int id) throws Exception { try (Connection connection = getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT * FROM CUSTOMERS WHERE ID = ?")) { statement.setInt(1, id); ResultSet resultSet = statement.executeQuery(); if (resultSet.next()) { return createCustomer(resultSet); + } else { + return null; } } catch (SQLException ex) { - ex.printStackTrace(); + throw new Exception(ex.getMessage(), ex); } - return null; } @Override - public boolean add(Customer customer) { + public boolean add(Customer customer) throws Exception { if (getById(customer.getId()) != null) { return false; } @@ -92,13 +122,12 @@ public class DBCustomerDao implements CustomerDao { statement.execute(); return true; } catch (SQLException ex) { - ex.printStackTrace(); - return false; + throw new Exception(ex.getMessage(), ex); } } @Override - public boolean update(Customer customer) { + public boolean update(Customer customer) throws Exception { try (Connection connection = getConnection(); PreparedStatement statement = connection.prepareStatement("UPDATE CUSTOMERS SET FNAME = ?, LNAME = ? WHERE ID = ?")) { statement.setString(1, customer.getFirstName()); @@ -106,25 +135,18 @@ public class DBCustomerDao implements CustomerDao { statement.setInt(3, customer.getId()); return statement.executeUpdate() > 0; } catch (SQLException ex) { - ex.printStackTrace(); - return false; + throw new Exception(ex.getMessage(), ex); } } @Override - public boolean delete(Customer customer) { + public boolean delete(Customer customer) throws Exception { try (Connection connection = getConnection(); PreparedStatement statement = connection.prepareStatement("DELETE FROM CUSTOMERS WHERE ID = ?")) { statement.setInt(1, customer.getId()); return statement.executeUpdate() > 0; } catch (SQLException ex) { - ex.printStackTrace(); - return false; + throw new Exception(ex.getMessage(), ex); } } - - private Connection getConnection() throws SQLException { - return DriverManager.getConnection(dbUrl); - } - } diff --git a/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java index 0057e7abe..62276d5c5 100644 --- a/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java @@ -23,30 +23,22 @@ package com.iluwatar.dao; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.stream.Stream; /** - * - * The data access object (DAO) is an object that provides an abstract interface to some type of - * database or other persistence mechanism. By mapping application calls to the persistence layer, - * DAO provide some specific data operations without exposing details of the database. This - * isolation supports the Single responsibility principle. It separates what data accesses the - * application needs, in terms of domain-specific objects and data types (the public interface of - * the DAO), from how these needs can be satisfied with a specific DBMS, database schema, etc. - * + * An in memory implementation of {@link CustomerDao}, which stores the customers in JVM memory + * and data is lost when the application exits. + *
+ * This implementation is useful as temporary database or for testing. */ -// TODO update the javadoc public class InMemoryCustomerDao implements CustomerDao { private Map idToCustomer = new HashMap<>(); - public InMemoryCustomerDao(final List customers) { - customers.stream() - .forEach((customer) -> idToCustomer.put(customer.getId(), customer)); - } - + /** + * An eagerly evaluated stream of customers stored in memory. + */ @Override public Stream getAll() { return idToCustomer.values().stream(); @@ -67,7 +59,6 @@ public class InMemoryCustomerDao implements CustomerDao { return true; } - @Override public boolean update(final Customer customer) { return idToCustomer.replace(customer.getId(), customer) != null; diff --git a/dao/src/test/java/com/iluwatar/dao/AppTest.java b/dao/src/test/java/com/iluwatar/dao/AppTest.java index b4caa54b4..08babc62a 100644 --- a/dao/src/test/java/com/iluwatar/dao/AppTest.java +++ b/dao/src/test/java/com/iluwatar/dao/AppTest.java @@ -24,14 +24,12 @@ package com.iluwatar.dao; import org.junit.Test; -import java.io.IOException; - /** * Tests that DAO example runs without errors. */ public class AppTest { @Test - public void test() throws IOException { + public void test() throws Exception { String[] args = {}; App.main(args); } diff --git a/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java b/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java index 202140e98..243d9b3ac 100644 --- a/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java +++ b/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java @@ -5,6 +5,9 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assume.assumeTrue; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; import java.sql.Connection; import java.sql.DriverManager; @@ -12,16 +15,22 @@ import java.sql.SQLException; import java.sql.Statement; import java.util.stream.Stream; +import javax.sql.DataSource; + +import org.h2.jdbcx.JdbcDataSource; import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; +import org.mockito.Mockito; import de.bechte.junit.runners.context.HierarchicalContextRunner; @RunWith(HierarchicalContextRunner.class) public class DBCustomerDaoTest { - + private static final String DB_URL = "jdbc:h2:~/dao:customerdb"; private DBCustomerDao dao; private Customer existingCustomer = new Customer(1, "Freddy", "Krueger"); @@ -33,94 +42,148 @@ public class DBCustomerDaoTest { statement.execute("CREATE TABLE CUSTOMERS (ID NUMBER, FNAME VARCHAR(100), LNAME VARCHAR(100))"); } } - - @Before - public void setUp() { - dao = new DBCustomerDao(DB_URL); - boolean result = dao.add(existingCustomer); - assumeTrue(result); - } - - public class NonExistantCustomer { - - @Test - public void addingShouldResultInSuccess() { - try (Stream allCustomers = dao.getAll()) { - assumeTrue(allCustomers.count() == 1); - } - - final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); - boolean result = dao.add(nonExistingCustomer); - assertTrue(result); - - assertCustomerCountIs(2); - assertEquals(nonExistingCustomer, dao.getById(nonExistingCustomer.getId())); - } - - @Test - public void deletionShouldBeFailureAndNotAffectExistingCustomers() { - final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); - boolean result = dao.delete(nonExistingCustomer); - - assertFalse(result); - assertCustomerCountIs(1); - } - - @Test - public void updationShouldBeFailureAndNotAffectExistingCustomers() { - final int nonExistingId = getNonExistingCustomerId(); - final String newFirstname = "Douglas"; - final String newLastname = "MacArthur"; - final Customer customer = new Customer(nonExistingId, newFirstname, newLastname); - boolean result = dao.update(customer); - - assertFalse(result); - assertNull(dao.getById(nonExistingId)); - } - - @Test - public void retrieveShouldReturnNull() { - assertNull(dao.getById(getNonExistingCustomerId())); - } - - } - - public class ExistingCustomer { - - @Test - public void addingShouldResultInFailureAndNotAffectExistingCustomers() { - Customer existingCustomer = new Customer(1, "Freddy", "Krueger"); - + + public class ConnectionSuccess { + + @Before + public void setUp() throws Exception { + JdbcDataSource dataSource = new JdbcDataSource(); + dataSource.setURL(DB_URL); + dao = new DBCustomerDao(dataSource); boolean result = dao.add(existingCustomer); - - assertFalse(result); - assertCustomerCountIs(1); - assertEquals(existingCustomer, dao.getById(existingCustomer.getId())); - } - - @Test - public void deletionShouldBeSuccessAndCustomerShouldBeNonAccessible() { - boolean result = dao.delete(existingCustomer); - assertTrue(result); - assertCustomerCountIs(0); - assertNull(dao.getById(existingCustomer.getId())); + } + + public class NonExistantCustomer { + + @Test + public void addingShouldResultInSuccess() throws Exception { + try (Stream allCustomers = dao.getAll()) { + assumeTrue(allCustomers.count() == 1); + } + + final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); + boolean result = dao.add(nonExistingCustomer); + assertTrue(result); + + assertCustomerCountIs(2); + assertEquals(nonExistingCustomer, dao.getById(nonExistingCustomer.getId())); + } + + @Test + public void deletionShouldBeFailureAndNotAffectExistingCustomers() throws Exception { + final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); + boolean result = dao.delete(nonExistingCustomer); + + assertFalse(result); + assertCustomerCountIs(1); + } + + @Test + public void updationShouldBeFailureAndNotAffectExistingCustomers() throws Exception { + final int nonExistingId = getNonExistingCustomerId(); + final String newFirstname = "Douglas"; + final String newLastname = "MacArthur"; + final Customer customer = new Customer(nonExistingId, newFirstname, newLastname); + boolean result = dao.update(customer); + + assertFalse(result); + assertNull(dao.getById(nonExistingId)); + } + + @Test + public void retrieveShouldReturnNull() throws Exception { + assertNull(dao.getById(getNonExistingCustomerId())); + } + } + + public class ExistingCustomer { + + @Test + public void addingShouldResultInFailureAndNotAffectExistingCustomers() throws Exception { + Customer existingCustomer = new Customer(1, "Freddy", "Krueger"); + + boolean result = dao.add(existingCustomer); + + assertFalse(result); + assertCustomerCountIs(1); + assertEquals(existingCustomer, dao.getById(existingCustomer.getId())); + } + + @Test + public void deletionShouldBeSuccessAndCustomerShouldBeNonAccessible() throws Exception { + boolean result = dao.delete(existingCustomer); + + assertTrue(result); + assertCustomerCountIs(0); + assertNull(dao.getById(existingCustomer.getId())); + } + + @Test + public void updationShouldBeSuccessAndAccessingTheSameCustomerShouldReturnUpdatedInformation() throws Exception { + final String newFirstname = "Bernard"; + final String newLastname = "Montgomery"; + final Customer customer = new Customer(existingCustomer.getId(), newFirstname, newLastname); + boolean result = dao.update(customer); + + assertTrue(result); + + final Customer cust = dao.getById(existingCustomer.getId()); + assertEquals(newFirstname, cust.getFirstName()); + assertEquals(newLastname, cust.getLastName()); + } + } + } + + public class DBConnectivityIssue { + + private static final String EXCEPTION_CAUSE = "Connection not available"; + @Rule public ExpectedException exception = ExpectedException.none(); + + @Before + public void setUp() throws SQLException { + dao = new DBCustomerDao(mockedDatasource()); + exception.expect(Exception.class); + exception.expectMessage(EXCEPTION_CAUSE); + } + + private DataSource mockedDatasource() throws SQLException { + DataSource mockedDataSource = mock(DataSource.class); + Connection mockedConnection = mock(Connection.class); + SQLException exception = new SQLException(EXCEPTION_CAUSE); + doThrow(exception).when(mockedConnection).prepareStatement(Mockito.anyString()); + doReturn(mockedConnection).when(mockedDataSource).getConnection(); + return mockedDataSource; + } + + @Test + public void addingACustomerFailsWithExceptionAsFeedbackToClient() throws Exception { + dao.add(new Customer(2, "Bernard", "Montgomery")); } @Test - public void updationShouldBeSuccessAndAccessingTheSameCustomerShouldReturnUpdatedInformation() { + public void deletingACustomerFailsWithExceptionAsFeedbackToTheClient() throws Exception { + dao.delete(existingCustomer); + } + + @Test + public void updatingACustomerFailsWithFeedbackToTheClient() throws Exception { final String newFirstname = "Bernard"; final String newLastname = "Montgomery"; - final Customer customer = new Customer(existingCustomer.getId(), newFirstname, newLastname); - boolean result = dao.update(customer); - assertTrue(result); - - final Customer cust = dao.getById(existingCustomer.getId()); - assertEquals(newFirstname, cust.getFirstName()); - assertEquals(newLastname, cust.getLastName()); + dao.update(new Customer(existingCustomer.getId(), newFirstname, newLastname)); } + @Test + public void retrievingACustomerByIdReturnsNull() throws Exception { + dao.getById(existingCustomer.getId()); + } + + @Test + public void retrievingAllCustomersReturnsAnEmptyStream() throws Exception { + dao.getAll(); + } + } @After @@ -130,13 +193,13 @@ public class DBCustomerDaoTest { statement.execute("DROP TABLE CUSTOMERS"); } } - - private void assertCustomerCountIs(int count) { + + private void assertCustomerCountIs(int count) throws Exception { try (Stream allCustomers = dao.getAll()) { assertTrue(allCustomers.count() == count); } } - + /** * An arbitrary number which does not correspond to an active Customer id. diff --git a/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java b/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java index 6ebc4ccdc..ca5180e97 100644 --- a/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java +++ b/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java @@ -22,104 +22,108 @@ */ package com.iluwatar.dao; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; -import java.util.ArrayList; -import java.util.List; +import java.util.stream.Stream; -import org.junit.Assume; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import de.bechte.junit.runners.context.HierarchicalContextRunner; + +@RunWith(HierarchicalContextRunner.class) public class InMemoryCustomerDaoTest { private InMemoryCustomerDao dao; - private List customers; private static final Customer CUSTOMER = new Customer(1, "Freddy", "Krueger"); @Before public void setUp() { - customers = new ArrayList<>(); - customers.add(CUSTOMER); - dao = new InMemoryCustomerDao(customers); + dao = new InMemoryCustomerDao(); + dao.add(CUSTOMER); + } + + public class NonExistantCustomer { + + @Test + public void addingShouldResultInSuccess() throws Exception { + try (Stream allCustomers = dao.getAll()) { + assumeTrue(allCustomers.count() == 1); + } + + final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); + boolean result = dao.add(nonExistingCustomer); + assertTrue(result); + + assertCustomerCountIs(2); + assertEquals(nonExistingCustomer, dao.getById(nonExistingCustomer.getId())); + } + + @Test + public void deletionShouldBeFailureAndNotAffectExistingCustomers() throws Exception { + final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); + boolean result = dao.delete(nonExistingCustomer); + + assertFalse(result); + assertCustomerCountIs(1); + } + + @Test + public void updationShouldBeFailureAndNotAffectExistingCustomers() throws Exception { + final int nonExistingId = getNonExistingCustomerId(); + final String newFirstname = "Douglas"; + final String newLastname = "MacArthur"; + final Customer customer = new Customer(nonExistingId, newFirstname, newLastname); + boolean result = dao.update(customer); + + assertFalse(result); + assertNull(dao.getById(nonExistingId)); + } + + @Test + public void retrieveShouldReturnNull() throws Exception { + assertNull(dao.getById(getNonExistingCustomerId())); + } } - @Test - public void deleteExistingCustomer() { - Assume.assumeTrue(dao.getAll().count() == 1); + public class ExistingCustomer { - boolean result = dao.delete(CUSTOMER); - - assertTrue(result); - assertTrue(dao.getAll().count() == 0); - } + @Test + public void addingShouldResultInFailureAndNotAffectExistingCustomers() throws Exception { + boolean result = dao.add(CUSTOMER); - @Test - public void deleteNonExistingCustomer() { - final Customer nonExistingCustomer = new Customer(2, "Robert", "Englund"); - boolean result = dao.delete(nonExistingCustomer); - - assertFalse(result); - assertEquals(1, dao.getAll().count()); - } + assertFalse(result); + assertCustomerCountIs(1); + assertEquals(CUSTOMER, dao.getById(CUSTOMER.getId())); + } - @Test - public void updateExistingCustomer() { - final String newFirstname = "Bernard"; - final String newLastname = "Montgomery"; - final Customer customer = new Customer(CUSTOMER.getId(), newFirstname, newLastname); - boolean result = dao.update(customer); - - assertTrue(result); - final Customer cust = dao.getById(CUSTOMER.getId()); - assertEquals(newFirstname, cust.getFirstName()); - assertEquals(newLastname, cust.getLastName()); - } + @Test + public void deletionShouldBeSuccessAndCustomerShouldBeNonAccessible() throws Exception { + boolean result = dao.delete(CUSTOMER); - @Test - public void updateNonExistingCustomer() { - final int nonExistingId = getNonExistingCustomerId(); - final String newFirstname = "Douglas"; - final String newLastname = "MacArthur"; - final Customer customer = new Customer(nonExistingId, newFirstname, newLastname); - boolean result = dao.update(customer); - - assertFalse(result); - assertNull(dao.getById(nonExistingId)); - final Customer existingCustomer = dao.getById(CUSTOMER.getId()); - assertEquals(CUSTOMER.getFirstName(), existingCustomer.getFirstName()); - assertEquals(CUSTOMER.getLastName(), existingCustomer.getLastName()); - } + assertTrue(result); + assertCustomerCountIs(0); + assertNull(dao.getById(CUSTOMER.getId())); + } - @Test - public void addCustomer() { - final Customer newCustomer = new Customer(3, "George", "Patton"); - boolean result = dao.add(newCustomer); - - assertTrue(result); - assertEquals(2, dao.getAll().count()); - } + @Test + public void updationShouldBeSuccessAndAccessingTheSameCustomerShouldReturnUpdatedInformation() throws Exception { + final String newFirstname = "Bernard"; + final String newLastname = "Montgomery"; + final Customer customer = new Customer(CUSTOMER.getId(), newFirstname, newLastname); + boolean result = dao.update(customer); - @Test - public void addAlreadyAddedCustomer() { - final Customer newCustomer = new Customer(3, "George", "Patton"); - dao.add(newCustomer); - - boolean result = dao.add(newCustomer); - assertFalse(result); - assertEquals(2, dao.getAll().count()); - } + assertTrue(result); - @Test - public void getExistinCustomerById() { - assertEquals(CUSTOMER, dao.getById(CUSTOMER.getId())); - } - - @Test - public void getNonExistingCustomerById() { - final int nonExistingId = getNonExistingCustomerId(); - - assertNull(dao.getById(nonExistingId)); + final Customer cust = dao.getById(CUSTOMER.getId()); + assertEquals(newFirstname, cust.getFirstName()); + assertEquals(newLastname, cust.getLastName()); + } } /** @@ -130,4 +134,10 @@ public class InMemoryCustomerDaoTest { private int getNonExistingCustomerId() { return 999; } + + private void assertCustomerCountIs(int count) throws Exception { + try (Stream allCustomers = dao.getAll()) { + assertTrue(allCustomers.count() == count); + } + } } From 3f7ead5ca57210b77356338e64ff8e66d6f847a1 Mon Sep 17 00:00:00 2001 From: Narendra Pathai Date: Wed, 23 Mar 2016 13:13:19 +0530 Subject: [PATCH 079/123] Work on #404, updated class diagram and javadoc. Passed checkstyle checks --- dao/etc/dao.png | Bin 215487 -> 39783 bytes dao/etc/dao.ucls | 78 ++++++++++++------ dao/pom.xml | 1 + dao/src/main/java/com/iluwatar/dao/App.java | 67 ++++++++++++--- .../main/java/com/iluwatar/dao/Customer.java | 14 ++-- .../java/com/iluwatar/dao/CustomerDao.java | 16 ++-- ...{DBCustomerDao.java => DbCustomerDao.java} | 76 +++++++++++------ .../com/iluwatar/dao/InMemoryCustomerDao.java | 1 + .../test/java/com/iluwatar/dao/AppTest.java | 1 + .../java/com/iluwatar/dao/CustomerTest.java | 1 + ...merDaoTest.java => DbCustomerDaoTest.java} | 50 +++++++++-- .../iluwatar/dao/InMemoryCustomerDaoTest.java | 16 +++- 12 files changed, 237 insertions(+), 84 deletions(-) rename dao/src/main/java/com/iluwatar/dao/{DBCustomerDao.java => DbCustomerDao.java} (71%) rename dao/src/test/java/com/iluwatar/dao/{DBCustomerDaoTest.java => DbCustomerDaoTest.java} (84%) diff --git a/dao/etc/dao.png b/dao/etc/dao.png index 9fe34b976d7c954b17d71df76c148f43f22f2285..452e72ba10acd5399dcabf1740de9f3806b3fc42 100644 GIT binary patch literal 39783 zcmbrmbzGKP*EMQ_NQZPQ-AH%0gawikB1lO$D2=p$ARvu^NJ+OeB8Y^5beD7^b>@w_ z-S6{0-|zg+cmCTOulu@I%(d2-V~n{1Rh4DYuM%H9ckUdzyqwhSbLTFOojZ5F=*k87 z%l)4k-RI85v&u_}-*rk@euJWc*SfpgIrWMJH@JncJI71L+mG@JYZjVUGPM`6nkpW4 zOcOfQi>hbIsW#mvsZG8Che(X9$@F>2@|Nr_hWLgZr%!nDkz%p}hu!k;_KX|37#m?5 zFL-!%InQN_=;-JObL-5nB)(f!(3H4B<%1;=a9Q=!$Tdp%FZf>}ubzan|G)}*){~GG zsvs2@d-zxy@h|5Iy8@Qzqpayn6gU-Z;oD*x&T|dqzIzbbe;jl9oY=ejDz(7b?2d(c98*IfSPd zB_SmIX1LVCbeAo?>0dumOYAw?U1{{kWaFNEE$XTCU4F~U%RHo|dwUL(Vs5nDxsHjA~y}P$KR#Q_=T(B{HQH|*F451?n_sUY-&gKX7L5+!?U zr5*=m;~1u>R(ZVU8tU3Y3oDNX@}#b~JHe~Sz8-JdNC~i6NsB$B zyKz|SzDBgA8ixxL8|DiW8~WkZoa*o!!LpN+!xdT~mmbnh0Y=7hMFIlRI^`}=z2nRz zhwHYVUzN78J8w?VD2_!xW~c8gyw8`C8Af)f`f^V7fQP4Fu5o!KK0RGYc8*+FAfV$V zSIpX@mf#fI`OufUG;Fe(_QyY;7aCsl3FVzj;i7|4QEG%Jl6|1Kg^an`(}R=Te7LhE zZZp&J0^LSQA+i2iR*MuKF{!X?ping-iJsP zTx-3pIxpvB!)O(Igjg+SI$rBnM)!3x%iA948W{L>CLWg-M^}>)=225qU(hP^aNn3} zi|4gPbD{4iLYT`E1&J9{W#E^K^!(EZ7?jGY;mH^6l+QTBqv0*I!eSGK6W9nZ`u&N__(vx0G zID3I+^zAKF`kjCPu>fQ5o{6D zL~3MFbL}_(?iit)5pzj%x|#yKywpar`^hWQ$X2q%>p!x$hRZNj5(q~M z^hX)*F;3f#lzZ@6k}|K7@2$96?X7x7FN(Ww$}42lIZgU{Iysl{JFUAHG1;6o@~Sr? z`Z=TL#yy-L1&sUoFz}P8C-jUi#w49y=sH^D*9a22?Lk4I-j{hR9v^D~R=ws@`hnw8DI1?nKw0i zGD$q_vX2-#W4?605ph|2?^vXtgYQng>m+pOI{Ca=#wb@#fPwQAmcAO1ippaXy~)?y zW>WdOab8}_2?>}5PYyO2o_ZY2(xyNDf+k7aUasF*37gP!Qc;IxNhfoQTg=pWy5ggsAU{V}&h4wzEhrG^(`G=h%vq)K_=tipp<=-=}ai;hv}7%xzk>~K7qo<7N;`I zp~MB({Di2t-reg}eQp24V0M-;YL3G5NRFblIi%yWR(FY+pnOmx5!OVYc?{d*{;Z9W zcq^XKD#yu%Zud#O8kd&uMI;f=?8Zu%y6Y!PG80{{E{O^Yr?~9ABM!N)@C@Jo%kGAC zXP1h_x22LVZ?qa2N?m57V{mX}rg0=x;u@=Kh8t{mmTL2BhmN*;RgjS#1>Kw&`ka$Q zRyE8DXoI!VNt3xU8M+3Wv#;{-sF6J)u8=(DMO)rgd%E}S`B=_FgD_JwQG%d#Wamt@ z4J|g#t~Y{Lqd$GorDkhQ=IZLy36)wKi|gp{<+Yj%NRa!;fK=?ZKWUT>`@Q!zg(s=6 zs^2sGcu9&zA_`F)Qxm&%K?gghoo_>OH)wntUq_c*S;Q2Hy|Qw$)#ciB-y6xEz%@c~ z>#M4s)0d=i2iQPwKJF*LGcrT<@8>e>|Eh6|uuP6$%vAYKVqwsoYv$&u0_{KZoCC&x zK1}*1u5$;`+8@f-S<(+au2RT5cB}`5A(!L?lXa&dDdON zvdxoY?a9|7!o|*8e&g;j4oCZGBr}15(-R|go`p9$Bevj}r&E6KL+rN&ht&^-t!qqg zDQg~mHcww0;lG`$8ErW_Bz!-Pj!p&VqH_41!CWnWyRx44^n=CTABoO$rW~nA>Zm<6 zr}!-9K3u#SxGgNVF;wG3`>U&ms*gV0Gcr1xM$Vbunv>sOT3EQdZ6{N9Zhou= z6;3U#Lk`A{e}&BH;b=+in>#J&3h~0Gb*su@6#E#78&rY?_xDg(U{+<_he|E@A1TO< z*ODVP6q)J$b^S56x@F&8_pQ#i;ng}-rMNu^3}Z5~^TUuT3L6`S+igXYCrY5y#?IVf z+hjAE=>c2qzEEj zhXn>)dH7C=m$Lste#!AmrcNJq~YStS>3zm)!ERf6^%B9=SE7)30-g$sYq5Gu4 z8@FP+r`k}~e_?@rLr+ge#-PTfBwtTdmDAK?sV|PgbHrjO&G?@MZ$G2#ycRjJYDR}X z&TTa$u0taH)J$V7L?b7jNR5ToI5szz+iq9%^Z@}ULE)|U3UY+UJ&J4}D`1-XoPTbs z($7U)cOA&HxL5Kd8YTiTfz%iM#-oCYcrB*%t^T3>hbi`u*%jMI3*`2W(?%#ckR{RSU zwTT(%_DoJ+&XpHXuzwtGZ2aEbY+3JBIMlF6o#g(CaWh#@z|k^C7wOYeuj!_N;ga3_ zs=3XVh4=%ziHTnenlhOMLHi(s^$2v`nSwF}aT zp%Qbd&RG&jaM)x*uB&(>nL^UxDLLWFR-_n--UbR*|RwE5rZw?SGvb zgcZ?`gSDi*==lEb&ktwrCvsR~qa;pn%@S4d-K%e*eU~O7yQ))#!)qC=DF0dnpoPug z=*e+VYsinsyJ;Tp;qkz$?q0nnNFh22?;aZBeoJ}Qrek30adK3emG#ijY*s}gnTzfk z#^rwB${AYdO* zRdvT;svHFu>F0j=k_bOxst^N%w%pe2=S<367PlJ`uulWfy?*@tadv+7CJqljjD=i4 zSAN~9>?b+9#VMP`+bzlBqhzGIf=?d?CQ=-(d{e|F9l5nU+e+c+>Rdu}la`XX1G7h) ztw{GxCwVcf4%Vo-zx{8lj&NNaQ48;rTmBwtw>r{)8MVb@y?k#UlZ<7 zbX>(o>cb^uoPX`lXzP!)9e)vY-(7K4(In+w%6kENLLh+$XX z-kT!!Pj0~!?u{osYo2b6!6fdh(dZH4wtw4JZTxxlLWMo_>*Wh(?7CBTg21dWEiWjX=Dx2}Ga{eW#-F z*YVKqF%F{MvZNuKnc;+ywa}@pwCdSzqV8L?4xCwE;(08dS-HZQQ>3oD@duHxTg}uu zuvDo~?A5vp9~}w6no1$z#n@dNe>BKmr(44{?orhl%Owh@fxmyz?pn`LPX-!aTB;ZP z-BC)4vfp8OfpRs?aczuzlQmcRv-Ed8LpuH zlWW9Fs3eeZvfcc!*#CW5Jjgm|LBdq`f}k^F{;2usCsQ@#y6^dW?#7;Pxb0i-VYCxNuP12uWdZmThXz5D&DfVB6q4+ zzh}!iUFcx)Bx;p5k`~=%qj}!?O&HtJ_M&~m!NI&)A)lqTC;>qgz`^b1?;HKOl1Oii zMQ2_-`d_<;?u9J{;=V&~@f;iVY1E_L&4ciJjlLldC`71t$TS{qV$F1qHud+rw1ty< z9$ELbzw_gIJNuc9ck<8^0J+G)4H^z>(w>ct>*xZV9&Oh?|B030k@lM{EY$V5)tBb* ze*9o>WLlg^tD2MTN-9non+-8dWWSMMP+8Grzs5Dt#n2+#e!AwF-?CTjvJ)Ic;JCY* z8_`mH<(i0#onHFdc-L{O=)0;aK_a`j<8Y=||7EB;m`uZekk(}t^Y33c)mrz~l2}u= zJ<`vn>n)vmysgL4BA8vbszMAez=4t$ipT9dM zO+iYw+MBtbn3@}3b_99X$&5Yijr#l;P6gH%Xn&Rn4tT3q_a1tOcas>V9|3m)oDvaH zV8Qmb&*LO_8N_F_t8Yy1jfdUOzFh%4jJI+Tg-tW(pYxn1RjT8-i29WTjl$N{@TWV@ z5Y#Sai{YP4ImWd`*xX->>Yh4_?@pb3($`=TPMM8VxxG#k>Y9i38vpb4$k)p@gW-%`zr^;sd0E>;wDa>1y<-Ux7uTUL<@+6%_oXWJY+^q% zi@uMxQBK%5;X;7)aG~yQ{phQ$h_Qdtrv;`|`Wj+3gd!1svg$GMJSh#$ir16`P5i-u9<=+>^v^cCNjFfY*(meWkbYR%7?|8V!M$Vg;^gV27^Uuaz z-Yx`_c}jODC68s(@5B*w|LNE)Rt2xci}VPFC}K*-49)Y zfu4Tc6{_b}NX2bWi=U}XHnqAM70YJ{doe(~RCR15wZtfZVF#PDcf$MecQqp-#B;Uk zLbo3$Wz=rAD-K=~*80CciBF<6z5XoTb^)8~Tu-<{d#ELd8?G4yYxG6VSzBLk9%V4G z6Rc`c&tL6jS!xOKw*S%pbNrN3+HZAqm_nfVZoXS?imO^iA@D^MBGq_-p=4yKX^pF+ zf}wVQ6PuAnwwlQW7XL&7k41pLzwH@AjZO5V|2>CsN7_EJj+w(W5}*07bo)MWT#(c`+1CP*(3sqYPseSP(nq5B4spVBwg0_y7Gb8_5W zT)e7@9oNVuFZs4MH)Et=Bm$=)>|!V8X3_h$8BoOJJ>f$^d|B4`fxCjB!$-bnx8+& zM-i!0_{4-IoNVpo(n@JIrYHXm#U$L~E1BcNY#5`GZ?>TP#|}lAXwx zozup>>#X#`^gKtydOZi(McdrB{eQz3bvw)3G<$1$?^#HPF#gLB(^8kM#kJMPkB{2B z%zha0m3yehcF`-c{M3C?!lmTNy<|Nq-ow2$>V6m3GGQAdqCQ5u^mR&A`_&QRKu8J* zSYCWR(TS5Zk(gEVP2wxOZ3Jxf+OSm_%44ODf*4(w^J?t;&M(W|S);=Skw)2~Kr{$& z7?je=>IM?-az)rt2+2T|rzpXBOudGKtuTl4$03FXKYw&$jf8h=m3TSO6Xqn3nTDD8p%NTVMQq(-LC9^~Z+!A48Y z7&BLnp$CMv^}9rY5?T)Hk;65Wk5e1dpOMj*beT;P;{@&)>6S8I?ID#QrK40nh4c>@ z$>rdu!^d}y<75TahNL*d1#eQf1Xp#ajYxe$EQwp#(xS+_|@%mUP6flBn@(lH&&3=>Qx#(}j#N)~T= z%G&9;9GidWxS}GuVmVa&yxKrL&xpzroqYLDPJa-cN?uR&90Vek^UOD~{oof@S9_Y9 zyYhRty3}PS+t$|BXg9SUe8WPa*J-ly(bvAVaFQSLk%)MSDL+^{4sdv(eB@7keGdpl z@8wtT2uK8lL_E^l0?TWitkVOpw*AO=wR@>k=kaiP@Eq{IEi49Tz!jJceCS@8Fd(NB z$uqYa;R^^F16l&afeEkiGdRffMQUX{gP(P6Qi^wTcev&{^@S2&?~x|=ZPFGCz+iM#j4>Cn7-zs4OisNvpwvyzsf(9$9V?V(C)PG0A7B z;w0Xr-B&#wYS7xhQdqgwh(V_5a=5F%U?m?{RXJp+Wifdr0TRGMmiB?@IcldytO4x! zTX)5DJx4p(wRw`m`*ZdDo9diz`dbGPO3wBqyp{WN>JtWypyOZivBaRLGc-uK^^p#L zvahqq!6G=e)_GDwz=${f;2-%Uwsc*l4t0e%_z2QKfhSTs?Dd%sHa}to`a2h(|oB%znB-Y}(K{WI&AGRy>&)cyAHZPo;uM9LTGh`9zI(mLzuhbCE8Zv?mt1tFL>x;6nINWX@YT_$+Jmy@cz zE8)R-ZB32LbU+ty@fk~0TTOxW>yAr(Paw%1s?$?!V@g(ssZA9DVw_$z?qA>tH)7bZ zd13XlKZ`Isufv|wje@M0$<5i0&UlJI`v7SYk{?X!9~8b%en~ubkZ3Sbdl-bzQ+HB1 zzRZzKO$^k>|6tkSgexc8YHGxd2+#L@hH+)x&brV$kZ$c&Pr5or2pLI%ej{@c^0TW? z5F7;rmC&D{LO@BhmRv6{uZ4w$^z`)2(-7>Nw*#?g3|4W2q9_oAIHOt|)0ge3S6H(l z#M}*ZJ##-Zu!}z8!b{S))Xyk$MB;RNB$b{{sNNKzUY#)=2mt5DlR-~+;f(*ts5qlD z5I9XTUh~0&$(uq#q_@!QL%BqDdKefOh(nN)XcW`d6B0<%Hv%sxz5=@F0?t0OcpTp4 z|9k<{l+IR9n}HiG4NbIeT+H0&$3Yrd>)woPNz+iWq%oQz<)X>0>>^25(` zFPaSwkZNjD2| z@!fDLVO{r<(vXmn%*-ud&R^JHxz>!qUL@Pjt^ulv-Cq+)U@b3NqF8f zB>*VPQJb!SeRPL2{uKhQ&394UiExP_hZ@Q^5fK`YT>Tip#5=}H zj1qQ>Z3R-=e=1>Oh_|y61huIGb--bG!7k&V!d5Gy)^$&#%E2lD4sJfGw_R_BsnhxI>o)=l zOfkZ{Y(?VXTsjH7kF*hmB(# zqsJA;@nFq97&?oJ%#L>I6uIR(Jxt>ZG-u`ED}-NxFM|^1h&>WiCs#^f3sD;eY6Ae}nS zQ;j1sFrPvWxo_}iI^o3Zl5z|Y#v*ZKUsd@W*hrmF=}g&~Q9pim@+a`$RN@T-v7QBQ z{7$Aw7}&z(2T)0vV6JfYxEo}5-ff=r66HZFT*H#QbUguJ~t?J za&N)d7!it#$i)+kc3+cMr%nq~e1QG&H=5+}s_= zTC;2i@>V7)oNuPOEsi(CL|60F^LHVETAz4XqE+Sqc8t-gG78Rg7W7@YhPs*GJyRR=nmwdCehL&Vv5@4sRFejab1cj#TeQM>N5X@S;@J zuhg{nf+i0&H5McOWCftouiq;%RoqreJSC_VF&RyVit7svDW2G;^Y__;1z>k&1;R4f z&ek^O`k*Au59N!|infSthnv!`Nv>B+A50Hu=sUT0GHE~P<8mM!hlz$tJl$K(CE`dW z2)*oe*ztO2keii!y~0xGy=5UT9a7^spib*M<33z5p4X!0(vKMCjBo-)w~UN#yigqZ zmDON9rZB23uWb%20!7ItY}L2;{=C3z8CU9m<`}y|_2s(Lz8pq%`(XLDSAOKZGlI|#X%E7*RjmPWIg9`Y+v_XGT;G%Zi+JI zL_s5n{QOFqD&kE|Q+MI(-F#&9z!IP-6%?+@f(PqDP6g z!o^;1XX)O`GI8C3@g3Jg+I#Qro`BCmGT`v%34grvRMUhnYU^k4a20cM|DI!HJ^ZXQ zswU&L(g(;H@){DsP2q!bk*Wz&Ip7>pz-=L5=d?9Zzc)*cVUiM^{fD?fSY-gfq;f^d zCnUrnC<)D@)vDs3J3p4kj@d9V=K;)0xM7ma?M;XSqn#-0XdH0=F>DFDQh$IZ!kUBN ziQwY~Uz={2_mby+>A;FsIZBT9{V$(E)5OlG;JPU_iz{mKNdFJ7g|P9RiBJE(c&)!! zF!V#v$k><#2(*OT3$;R7$&{`@`sUYa4!5)n_4XbBw=B)<38Dw}9CNC#|DIl*$o($U zr!R&LbB(lw84&&X9~ukunTrd!GM}O|>A3*X(d&P4fl%qwD=r}|8z}v|lZ`^!?1Nwg zbFoj#OX^9uYx2U@%PjxV{H*XX5?WwGZs*p;x7|u4ztyWoyP3oS#}ubhVw}wqAU8<< zE%!EDlpo5zlk-t5AC?+b(`+KR(tt6!t}E-+{EEfG{&Te*!^I>JPv{@~*RwnY>=S0e zL|Y59zPPk#K1#BsL^u5mIKW#7Mu>)nqj1}~j)L{|6OCnXt3~mEsC$=?TUgR3v zfsQCuweHW=LbY)iF0H6>F`cM@l`0c5pIi-lTZ~h_2FIg?uZf#FpEC|XWtJG#t*Nxy zSt45hn9mYbs;g^}Y(f>6(yWr80jkgx*nvjtk`BSP^3)F4OGzH>bK2$Mp&iGEj@Zq= zNfS;jtvcqKQdO5UzN<&O!?Gk2Mj-ZsE%5vX&Zhg}Smc`8DmIAPf(N{QS0^N9f&Ok- zTo_yqV&h@AjG&YIlzyNWtLM{gV)L&Pa(eFulKGYKmq|x4EN2HK5PIa-t}$COBH&Dt z#}FAA8Es9(@VA|AVVjD_t)U0cpX)XhfrANLH3ws}Jx4&)frN^Qx;0$uPHt3oqtnpP zzqK_CkN^60Z+x~;pTV6yM_h8I9Aauf+-^&K!~w3rUzlGhDzkd|l9LQ^pi{08_3Dk95!Xe~3LjpZr%X+9*D{#I8g`7JnrcsRkOv-)r(=@qWOG@t#}jWf?Az9Bm?&wJDqkUBnkT8S>b;(Q?VOx; zRAMeh*>6JNATV~`dh^pHT>gH4>e9CykJIDbTk%uP!V`KP-w#J@zhMo|kdK~cVRv-Q zY-^+BNWJ)CPp_C_9G8!90a0)v*ugKy8?$?y+ik-xY2IuQ*{SJY2=EKy&;))6qf zw>Do{KIr~)QIo+ZW^4pyw1NiV+XU_9bIeWqAC#RW-Ea2w-*dHD z?sq?**sN6~h#47~wK2`(<}z*ilwGkP_He<7Ra=giPgF{Tw`G|#ikA2P9cn;E1Nyc% z$u%tyFk#ZC31fU`I;!Zk0btR$4 zb?I%08h3X=F<&wC}CRBLCUqrDk?DI4Tb}^%XHYLPmvgQJ6)tL+#H{N1}$QN_+A- z&EkTCoq=QHe0c_h69r&LV4x|<<^$Z9vHkIaDT2>#5#C*E39!gXkQqzWfEXW7k*L(xta7%K= z*094vpm*laHiNJM|He%mU~?&=4GuJ|sh|N?*YbN0{&4Mv-%7dl@#>f`Z6^uC3$8l* zAF6w+D}_}llCG5%C0N^Ia2$hPtpDoM4VT?Z^RL7lkS{sG z%B>gKf0$ajUNHxl>?-;W`qj-mz{cqn2DBkxga6U}plAW1`zhFZb-mtFrm??i+Cy2C z^o6V9o&iB7EyBinH`t4I%Z=HB!0Sjy809IY%ty}G$NR&xv-5V=qr!sBlDI8!vjHk1O0~{|Y@-&(d>A-P%gd}f z?d%%p`=g_85Vau1riJc@LZh2>N`zNlhnn9sMr$@Oo@@9ILWEwJ_CY@9*RQ{-Fb2~~ z*W>hIX_pA(bBp_d90r~ZU{NtKR{h#P@6qqc^=Ml;Zn9l1S@~XMXp)s57RJQLpc@Io zo{}oFDTW$r=}#to4{VvVf5K0n+U77XkhJ<>R3}rN^|MaECHx)EHg1l)#$bE|agSa| zwdHWPrp#h^1neLh)xQuEWqwM0WF(y_YQ|$2r)0B2DxLv+g|3t1s(=eMHN)imAC&f3 z#+mLb5eXD$Rwr&gVb;W>>RW+{xu2hyqE!n54!vf8vB?H5-Tl?^x^nAj7dU-Rz_{af z?Jt;O%}4u%paxX;9!-pU9GXaydVp>>kWcX}Q_`Q;dVf>6U05RSvm@PUs_J>|tbqK1 z?!xb&%>z7q%kY}(6!m{1L&FHyqr|3X=#yHTk*6OXY53eh&o+jAK65mxPZu51eY zxiXmBHp}dz!NEx|d`N$3YfEkpx=!VgarI2Afz;#%Qv?>=78F>1ZoViYSdEp{`qH1xoQ3zmi1~kNHbHapo@e^;QBGfE3y)V1Mfp zsrtpGbbg))bs65G{s6AE??q{Hl5uPhCgW)%*NeRXRj?_PT?j`Mx!knG?!{A#Q;h0< zhVLy|prmxU0(gE1ypz2;C5sfEm9ZLO<%8S(^*&r>3E9jxnP($FP{GCKahx%j9#cO4~$xSYw1q6T#)?a9glo6{=DdAbU5Qu^_yp9$3d9F8193kUIa=qaG zHsep>@D1{f1Dm&&Z_vNgv-22Ai5xZ$_F)9YwWpS$jxz9SN)~C)^k|d54Se_FVuFx! z0i<3~uEVmlE_%Xu+4mB%Bkm|)6<>5CSRorVW-t_k9JP3yEbn)Wbj12}5Z)Mh<@Yf= z9yx-9%nqsmu&=wM6yY=C)~tMdu7mx>AAL(w>Ur=gFsUa5-DEjfqrfyTO{^31KuHin zw$YdLNua&8gnBuQob;GaU;!$4I4DVmG+)RAR`a=%1;^K>ZFU_jwYF^9Y^~Po2o)e8tOjmoKO)EEXVJ9O- zcVT$oqE_JWJktC_!gvnqq+IYuzZ@vom)+` zAQM}R5b`<|V6r9xZTRRZhF>Ak_08{WEpHt(`tIV_=q!Z(=p`mrc&rphk^_c!L(0`= zPxl7qrFELBUuNZ=ORyf6d_ZmS|BK#I=~D~9Jc=|FP$_&HCw8Dy^@@e%%j>N#P_uHYtN!cZn&PiOQ;csOZLP=g0u9(W(vq7255 zhiQ8VO_vP=@1MLMQG*81NXnEpQtUF)U%2<(bC8C;S{9{A>54912$W)&Gm3}wUsmp$;W;S(!rW)})%_K~>_P8Z4U;ZxX zw~Z+6f!;tunW>V`WDuznJy{+YzD)Behi6)d7g@oegVgnvfduFfbORlTxIM z%N^+d)p&_w=Ki?{=S7#^L=XC>TN` z8@i**TfwDQOfQi&{JW~6%#AIdN3|HM^Xn887(uy_^!0 z_p>RkP4>D=mpW;YV-!H94?<=D@AI|cy+j0kSD1g9fbi3&NFSMetulPpb7wGZV4D9| zUGG^P<=qR2I?9&xgMHz^^CS&rGjykqJ|j#YiHIVcT9eqEA7F>YYK5@++Qbf|H3LJh zFZ6|Gky)?Au=VJp7@OL1d-NSBXAYw7>`ELROqV|{V6OwYQQSdswzUN#ER2G|Mn(pS z1?*;pKmJpqYNxaX!ZQ8%WV?426yk;cOUMh;(~P6UDnP;mxx=wrGE(J;s0keL^E^3N z8YE++tkEDj17v4Km5k3fpjOHK+DRpUyZhJS)AWKaj{^eTJY zpb(b&v6R%rOPV!_WrardC*NGuUV<{EOElWilI{$}+%%@OCTc#vhMeX%PAlmt(AS~r z%(yBRMItg&DTnetnOqAd5-iYMW7fQ8n8 zjD%GrQLa~Ae#b<$;&iKPK;pKcTCIYk7;4ApC<7;_T=2p(gueuQxy5o+LfC=YI% zLX-!qnbxKyorwYuBq!_owNbEPp{7 z@hZvXM1UXM-6o_PXJXR9KVniCLQFz*1dK^|hED0G$yE+CKYu!a08SEvo0VBUnOi1X z(KnVd<+QBTBt@p(mI)nn@C&8;sQ=zc*1 zRgWsB)XCfF(x~xZ^t0NHi{<%SZ;S!XOCHNsp^bH^8|`tT2}maV!!JOPD$2918`y}iAiIt1`wx;9kIFG&Y% z%7hRHx)!r&7Po!+#Nn6`fS>#I{ezos0(^WXTyaN7Zngsf@L2{r`p!V&Zrs^*u~Yr- zksWGJuTrcRP%87Oy`2$E5Yt-l?JOwtOJ$u&)jqd@97e<>V<)baEGBDtNz^KyM z3~>=e6gRYwg%Ef40(~7S0c&iUZqqpv)Eb70gM$O&ke2%T=iZ_47(F4p3ZJrFQbGbP zG)PWfeq(Qs?UWH4H(B~CtIL<|ZM)*@_csJ!L;|RxBTvMGX?giFzb0S3G1ok}gTtD~ zMT|~|1Pxca0pF7*ygR>Hh}$H=&ewkBC7FjvsqgO}E=lBlv42d86C@$R%X{NS6MSFA z46dU{y$k)VgzqkXFUrgl;N@xejU^kU)07B3JOm@*P;@2YmI^P#7)qpdiw(=~eQ9>J z=+I#>z}t|+=OV%Zy?mPG?4AohxC!I3usmHKf0O{-Gfhqtvf_y7=xCF-3kxP9LJ_}T z^X{C4wud9BvWdu;Z;8=Y0h2W7BTO!0>@lG&i~*scbI)v=leQ`;> zYxq;*Irya-Jkh4dB87)Z5h0JbssnC;kj5q>>-?UybVF2B6hh?J(+aS=s9kY$s%XdV zDww~B2$;Jj&>9>V<>$=PSxC{16zAabgclg_+=T<**ed)c>W}us$lTZxSF)2qOMiim z$8S&AO>^Uhj};1y57upQXy`S<1shlgp`3IsPn+N-k?^ZmGx)PV;^E<``e1ucl+~N@ zK%cI`O(VCdQt0X4VxML`MY@3a4zwrRNi0T?k8ho-zlp2dY5L|_qnII;@x4Jq(>!vI z^4i6Bh)KM51%6(iOi$O`P+w0aATac+OD}*)%a-%;_xJblf##-DtEs9!OA4tl6Nk>> zfuHYo#Ke1%+XnkbuJDpqa5Y0VA-vf7D?0-RKR-VP2FBfa7)NGOc=EiQib`f4b;b=? zO{bMG4~0*m9hZ}nv1|vt5Yv)w4!y;{r9d^8cUcX7is7b650M(=+moQddinBY@S;so zUfR4=-zA^c4XuF}2k682N;g_F!+&2P4ZnX!1;6upMm=D{~ z=3*DQpY#Q!T?v@|`1lgU3I`hk^=#6WYtPsrR)Vn){QNm=Wyr|Lh_P%GOWx`tMf?LG z+t~A-o~K~3JNt);R?|n1ngdhd`|T7kCwWgp$+EH1!I@U3026Qo6EKTh9O~_T(Msm! ziwmAPhzE(_K@WI_j)vwnj5^*mZTU?CMR;5Y@wm7+V!o)FryG1xLF_~Pw-44efamQO z0l(I22He$l(uZ}E?gmwik1(u+UtYcC;!+8p_=X5(8|ZozOM;v%-nl%M14UX0dMF}~ ze)tMdz36i zy!vv~+)Utk9m_|Lq7l=IIGJEM%fZvQ7kd&a6S9z@cPFw^SEyz_Nth}pp2MOi)mHA4 zxqTalVi2A^`>R3_p$iE)IpXKH$9^qdI#g)j1!!Pw)m5KZe`wRm3G8;@F7A}io|v#n zwPDpRe+ZK_j955{SD=S8umSBK9>&Ai#}X+Q!^X6k4qc+5LlmK8QA&kJMH#I!LIbnc zVdP$lsVN7LpPZbWt)B4P(6|@qb`>z*5O0+e!4rL`(7X%?89Wk^<^(Lm^<{YDZDRO7 zN86`QDa({imlhWn@87?Fq!I|D_X$2FJqwcy!=B1T*Te{q!ljBMV~W31N|`AuM4Ik`f9i%G4)oF!bpGutL+; zf6ucsbQKMYoIEiy(h$~RD(SxRIq0f1EP{pWGOe4h_^DLF;n2argvGt70WUnC^%=(g z*IL*-h3`$~_+DWU?16h@ULe*PoCpVzuxOw1F;hKK5Ep+Aqj)yEO>m^Zpm{tkCWPPP z!m!I);qC41@j_$Ou-#r0z+b(gZMiaO@K%nqzjk+bSCd10Q~M*XXz4h2ws}NIn&#>9 zT@S(9LhKr%@1d(u&6uZ~nwEAz$}7=vCEYnqCdA2E2@amKyQeykDAZx8N)ag7a^v9O zG}LvY6p}iL;7DA-R*lOEg~p1-AtELGG)yLKa)A>DKvTiCq~2cw%i#G$QwIVAAqF%S zmjAVgsHi4c23&(ev1Ho?n1L+Vr?1r$VBr{if(Ye;O^1#F{t6qwy^oni*te140y?_6na1AA!eqA#TOXBY5)0nyFfF6$NwP38*4ExXESbiC&#YvQf{`Z_2m0b-86-Ozyyt z|M-b@2(NfzRN)$p4<730mvfNkD*Dk0p8&_6ngVx0lEU{$*TN;Qc?MT|fx0pAOF|O6<=rxx-N%;ZS zAn4RcUeR_sIDnX*3c@OUB@fGO~xf{yYduKu}15U@Z1ZfZh{7ue}WkA_i|RDfe@0*`y@EX@c1LL3t*H4^wsY@W^sn(?`do&BIt+|_XBPobL=5_} z$|y@BR)D3y2L^R;=BA??hc81RUrI`?{ZgMf+-?;X_M>dvviHQEO}2LO_01pP<{tQ+ zg^s1x55*k|8aYumEo4G@E-A@?%Bbr9>gJpb^D}1FXLBW{@*;}RLv#o%*f{S%_(V5VyJU>t@bHa&w6Z4 zQQEbEv#o%>(-aYc%~KpbLOj#L^qUc8tEHsN#Ct_G7W z(23j3O7gY~R;?y$vB8VODi-{k7RsxRvKt3#W19=X3$(a`i|@8nMC9w|)YR&c1ZfNL zmxuS}X@Rj|6N0_bLb)p3zJy=qMwdAU*O=XN zsNr8?tK|iQj`Nm`p&mHP_uxjRweOKlusunqC}lWXuO$*ze;Ls6C4UR|{!OaNGej&NGpgS9Rh+NN{6(RbV(_l0@4jqk|GG=Cn?<> z(#?H7aPPCvIlnW;{o~&K#~uvE-uk`ox7K>*GoLxSi1^!$%wze}5DvEls*SK7I)5Ajj>cSBt$g zg}pxt)nPT>JBGNK5$ED8x{k9TtX!2`S#SjS+Bf@IO-xFOiKNCs5Z!V=XPw!w2Bh)v zIdZ9Av09({2!1E2&mt@kR`{*a$3Z_EG$OzH)nGX{0K;R2@%}W740+NWd28{7bz!tk0%6rVd=J_Lv9lO#fO4~cR01(45V0lbXPrQAw4Igog8RC zeaq>#EU*oVkAuk)(xHr&?!w8_6c`cD#a=&5=-IcY|G3<2xoeA6lh_-D7^GQv3t9pgTYzD=)nd=;2EXpyL5&lMe+rDgX->1bEMA^N$NB9qfo3-4Ga^CLzXjP~ zV_M~GDkJV>r`cec>);mwb*atrFL}g-1@QgXWBp>@W!CwnMlG|L@6;rSIArf%7-@XCP{i{rOO>~N?81xl)_;t;R@-_;2A=?7+u_g>~Jv1ef>6J=3 z`HfilX`UhbN2#+4zZ6#2TeuWR3FJA4wI)8<$1KiXnN00l4G?miY8|oA`4r)fH2vx? zLy-h+|J%0>(X0U{0KRuz)VLA`S#U7oUn}*tPXj@!an23c z&hNsC!e{8KoUXrQ)1H+pmv`Ma;o)CK27>6rIXk7e9E1hbnD13i+rA;&U|nT0n}qGU zOTrcOn=4#jsG}Tjy_9p6JRvfu4&QG-aQPvH9AG2zX(cxaOnF|s>#1{#hIp;LgQ`oY zj(UpH8?XtkE2hgDwi<8NNvFE?u|9(+lQc!&vbE73jZ&R^*ZKLe1c$wP4L9N(0F%!mj4Ip3E`#)CepU1>Bb-)#KpuqZB@7%tO0W2dOGDF|@OQwV=|Y-@%#% zuSqX9cSx>Z{l4&a=5+lGNT|OHY?M^sduLx_dRk_zM+eZ1kZ)O-})SfFz3 zMf?+SxX|N*7hM3fD!a@EWNC=q1L~I7>gfO^=76Q=2y8yogX*c}E)W_5mD~iBm!K94 z)BE}1RV9~?m_*1S*e0 zL+{b76Cx%e1v>@5{pQxgh5j~>tAIu2ujel1zg<4_oth9IU#-{(TY2@fyOfplw|D1~ zm!jE%8qVwY>}?EU^?HrF&LJ$kJc z8OpH_Q}fqKLuOJG9{L~x0!XFuI9o-uJRvITniUTDj86x+K?KWgv@DqKXO_CTQM`M1 zLU&YrxYZZiTn72Eb}L$IA#Td6!Zy!@%mj1p|5ZH*K3SPI-E?`IIR*cUm>ChrQk3>=8N1J$;o#6b;l>} zcH{VA{ca0t$+%IxcSTnoIA z?qEpMcv18n)n+!G3%e+uq&uRzD0JNY+I`&p$8T$+uc4)inCPgtu8H7%xO~JcGb)GY zrC7jdk`R6yMDn{iIk?l*q|CxAze+78nvRWDOWgsPqWx^VaLBAKi`XGR(YwMT8-poS z%5^gCgT0>rcyVo9e0V1ef>u$Isfj05r>E$A71LJf(Ha;ti$B z8c5ZgKTic~QG)ek?|WIEcKnwRTo}hneeU|2^V6s}@e%U9(RPoiw)@4QaE5Nyd~Cjr zl6>QEr!!(S)yQ7Y&(DA+>&~z5w-SYFTvvwB6P<5eiuLvm@bLJ=rb&ETPwX1^c<)a{ zO6Y43u+tUWR8X1VTy+5la{p!Qbv{R%c`0g%9QE+EVf)3VFL7bF@7S*Q=5E~k+*O!5 zVn4df+Vd9nS@HJ|rX`~hlK=IgBB$ukT-cKp7bj&@9xQ4uQk=(oVruO3F_rN(2N)2TmuG)TU{Nju%=!*%l|wT*ldS*MCDPL>WwV z>@p?o*6OnBNO4`pn)2=fsH_94!>a69yN%s?B>wsU2>pD1QM?cCWQQN$#-Svy(sMm` z5%}6Bvn6Z&N^@6>E~z?%Qj^S}$9roIm#MeJU|~!W)zrpV!IZ>KPqI z!s*RAwjS5+U%a#Xn4S+^Y*fy;d;itj$nb^8nZEqhmBBv3k)hGid_$Oi~fLzRhH;>T={l8Pd)sJG|k9JFeQJ@k^E%hd=eGNsj`3Io^dDP(`ie-B(>%^bF6ayo6YU zkKbVr=d(zq;Zn9?VQs#78hsp~ZIV@y#+4s2@JC8M{ zs;+g=wcm5t^4j(xUb>Mw81!O+Ub*&kZhjt|6@lo)Q_mZon_=iA1h-GoesL|Fs{ z^XRW%7$#kvoi}bSia%W$C=PFhL~ldZ+eU%X_bG1nq_arrw|u%Yo;_4rmW;=C zAv7>B>*D2oU)&Wjdd%tJLW4!OW9!`9m*H~JRskK?7^7$4Tg9M7`F(tJ^(`03C%{w0 zY@Q}iOxF=v+SC#pQOEmO9miL(DNROnd9be3La!-T({Du|K^sK>##oc{m;!YMEv+dDe#Lg?kZX55(>Wp|i@6oxkvB<5DYPD8#cC0G}LS5iBh|DJl z)zrQmoPq6j`&lsA-EB$*h09M5<}>1eB1lY^OATY=_DrHOaXqkuU;^>Nwo9_V1}f_+puP4y!EaXildw0N1=l|t)gkak9U95Bmdb+=BcK-AF zFX76#|9MUbC8Rm3Ihy2|6n`!MdU-kb8Sl#ebke|qIN2EhAUyy8(9>|8`a7-n>`wwr z2JChm@*+OxIioZ^PN(cvhN2S0kbzSu-t@-Fsx{rW5o!e9=^L$Q!hH*?tw6w}c50IL z;S_andpvcq0-lN56CS5Q=_3|$6Sk_Fj#2t`zq5^^L`CP4|6ETGL9y>Nb=UNmc%#`r zFqK@@nbwz!rJ%iMPgU1Y<|OqHA?G&#tA|hc#Nfyqj<_FXFWr8I!+iza^6|ftO33bf zt;T3s9GrNAKUKa5`~K9`}LZ;A0@$PD0#r&@ssitPHi@ zYn_%Ac?V>b_okQGSUs^ctT_3YhP$2DDR5(TQaD)G%dpeOsgT6so)JxlpdjVj@Gn7> z2l5>;J&8^$l^{V{WE!nczGM|uva`^m-Se@gKSg3vLD)r@m31MAX92{g(}?t;jKy}? zvEN*U9(*s-?Ml&&5vPDmMa7~gTFAWeTM=*>1hF*{v?Sz&gv`$eKH2I(rn31^|3*{F zwK+k7rS>(g)R(*$CnihAAVh{kAPBP5s=ao1e^}21_8HUnmCV(Rqq4*KTUh$2DaNZK z3ZV`^Qg91MLii9rek22OyW)5Cw&Z6QKdVq|g(KbLN7z2pylYvE4wEfuD!DOYJN8Tc z`v0o`0Eo)5VDn7F#Bqp71YI&oqdXG6H};k+?x$$cH*(*cmu zamUWywsf$B37urVot-4$MOQvKH{Ha<*Fm@ALzP2`PEk*1uS?Suf}gI~VNu|>Je-{A z_zD=SFHhV0a9708c7O20Pke{LDFnsg-t01aoz^6jFCrpJ5d({ev$E^IOe-ec_-4y& zlnu{`=I65xGNnJ?UJO&nTgfe}yDbZMOjRKAuDpd{mKKX$N`W0j>-oBMozv|h7x3=Y z<>$+ZipCTQI_gsiDlz<7z`o-H1|Gc%SR;&#{O`*5?iTXdbvfd};-xgf+26H!eTipH z_@r{Xay9`IXXUt=!~}0tY)VAO!2C%PPlQe3)ue`T-)pH1@=JAw?OI(K0LVX zn_@Y+pBzdrXLRLeheEtYP?KqX&D#hroHi<1^z{0S<)JUzp1F?V+{Cn4!z@a3FUQl=1a3Pnz>9Xxyy7nC1M7X_&$L?nLXVKsoIl1WABP0 ze!-VYcK4pg26J83EGucbMwIFS6|>(FtT(|L)mZCRS-QS0Tl@s5!UvLm#ljg6iZ6dHhj#2gr_ z@|heKypZQ8oe34fsb_2@@$vy1`uZN$70RKC!-{?{mn4N=i<8Lf#gAfqyfz6MP(SWZ zeT^htd|ncu1`IAI0dStpI)zE;{a9lFq%Iw8Oawd*EtZWWxzShi@D5~x{HJte9@^dW;Lhsjs(QaUPcl0fqC@6ep zd~o(s9)_kp*Cgl9LiALD5UrSlgDP}dN$$%y&dh0ioh-)`tVZZJ*3cqVBfIU2Y2mWsA~;Xb?r0|;B#7xH=sS0jKd?|wT$qislQB(r3vkv zEalGoB6iu?0QVTEu}xH7jICxeF(jJWGB0nI(LNfCKpet>Imy;^^|R-X^Z>$6wIH${ zHm&{-IahWJA3ju_7nw5Y%~6~`?L$OOJ_yK?^#mAFz5K=HN$j)uy0M-uATETXnj(v& zOVj%TaYmnG$UK`rgO)4Rk0*2Ya?EcDhRI-RQ`QC4&&qf3?kV z5?L=8g|!rQ$sfl|%kqK=O~>T}*Su%F6#A&LJNsM1s(DkQHPxF4-D~-J$P;hlnTgH| zRKHgfcB}Hup05u9?6fp_T~}1AkY0M(Jy+VB8@muT)5>n;e-XfC1WB-BN!JnSxzCrc z2mO9M@ZDMc2d~Mo^ZoJ)LCfEJzuhd%1-SJhX2T!^L;h0mi<4t4nvO!hI+!{F^?MOM z4P16H>DbyHMy-?4*^Z#R$c{e1%xVzB#l(2Wwn*SMuT|Q~8*D$oP{;eG=e3>&5C=_T zVqjt*R)+R2>}y)p8sqvC*%J(zog9xaK49zEQqK6veMI@gkL}ravpnsp8=pe1aatsW z>}FlL>c!QU6@iGm#>^#qds-2S$um*Ri0K5uEMh)ty;ppX*dwZ%+`9;~Rlnd;{<=7V zgrE^y#5X(AsYD6sZUjfhBrnxco!lSI)=+!P^*zq*)zi@)ni^HC4PE{wbHBMK+aJwC z-(134E`C1G;8vX`Ar%7|gBJ+ob7+CiN$$VokozOpD-u!Nk42g@F}`1Sav;7h&Pj`# zrf4*i`gPTI(a5AkBl~#|GYo|VUakFT*mT&q@w`M|hOL7hJtBe1yCaC4`sm4}Xm5ti zp-R?=5Aq5ETAxeF6K!U8^4&M?Lc;58R}tegGuUf>zFQqq!wGj(hpX z(Bm_7?DbStrR@?ciej?jSry>le)sO-D}sM5Y>Nzi*4nY9fmN83D5&SJ-}~x>V$Z6Z zld@F%22p*X;cePp$Vu(U>T-^sICp2vC%KU?o=(Tua=QgDmLAt88+OM1t~mLvCfcCq z6`~FECyc$=DB>+ZWc7K}uKnj6HsELwn-%FMian2udF%6~@x7S4_7|-53Ey+l!96Wx z$lccIuroZui!s{#B%NM3dOszJRGhW0d1WU7DeYMfi@*sxm zwHt}vg7RhaNqTZry=PT=n%B+6#|exMAxXFo@2*4JGFWI}YPfSptLxEuIA|!o?ayUD z8J$)d?T|@GV4tn1Ulc#cY0+WIIINkOc*&qoOmWy(*IV|y=gN0^3yU3A&6(qA_MRqv zpD@~^Y(P*K$KKxhTv%d$q5=>U!fXBG7m-Qx&{|=h_y}Lki39TvaeGeG{A_(tY_++1S|NiVrL@uGaSU_OD+}R)#8DJ+Vqn z`>2FntF8J#IImo8HY^v-Hh+cu>Q(eRkgXVnfj{`)hMhft~bAFlCL?j-9P- zGaDd{MoN$`Qc{+`81U$r|Cy0WTyh!x;$5);@sB**e#w0=fH%vokYx z%fGh9;TAh80Si03cuUiqtt!@BsfhRT->QT5ZA!s2pbp~sm;tpt4jI-S2;bCmiqfcO?zMV zcqj}Lf%c6WXg{&h&@3!1(cvb#^>tPc0-cHTiQ~_eA3+(bi7gGaB-UM|G|`_NyyW^1kVcsTU*z*J3$nfFDwe zk%|%j;rOawE*2mEq7T;Z=4QfJeuRLKYe|Jw*IZfI1J^ynjOt9NaEpEU)_YcYtz(Oe z;LQG@B*Z9`pas+2*#P!hY4H>wu{k-D;bw_@j*GnxFmIf&>$}sTx5hO7BBfBh??tF6eM%Rt?bqZWKIbXo8Mal`sJFsJWTnGUxDgWK) zlmu-xYr7UlT{)tn+MH3$ELtc~TN^D|k!|D?X6woyKmj?Tkn6F-}-5I4`80*p>D0(OEb4#=IIdeXV z({B>nWHmiY_~SO`9`ysMgJWvQk^+V2`In=2a4srcA)pvKTFj3o zvpq!uywk~vL@sTOct{E_V#W%?1ZVyhKyNQ}_bw|761ekct~ZzV9?4Tb$(ygHobG7+ z-e|kYUT@GE;Bosszb)D(Iv1{84NPsctB9YMv=1p2dHWgn<6MnP`$SgOpI@`-=Z7fxxEvsoRV?GZE+yKS6i6)|kqiRQDs=?Z}iBg-7dTf2%m`{PwqRxUg)M60WCnN!5A1lRVTc zdithYfGf*X_1WenT0CRRO?icj5%8wu@t)n~=ptWt0sMzmy?`S64mEDQV2KIWfR;^< z_*5<1tD{nLl~O^(JLLX-HKHL6#^#H{=0 zz86(zHu?xx*_yHw7<{P>k1l^Q^G&f!zTfM51{b?ui_FH_^2P;K@7%jFzu(RGdnqPd zCSl@ph?8!_ZTQ|Ws;;RCdU2q-DhRAha8BMqSJ1RFoCW>S^J5CJBIu2;$aw2k6yyR) z-1bJh@~w~N)447x+lA`D0}-~4<~8}$tvdb=kxhSp49U2SQ|@ zH@QRxTpd>FMk)#~r}hI~h5gUB1sl}VP9#D+=4311tp|VZY=!Y$km5ADPmR1aDn^_( zR}FvXmudb`<%YN9;?pT7sgM=gmW9>ojcu5_$tUWBNTJ3KmL2876kk6Vgq&65)N64Q z>Qn+1 zOoH*#TKP;KJ$%0KR1o`NnQp?>rh@a{0CkD!YDv?`tp3`5g>z@;7y;uY{`AVYS6I!V zwTHf!u@OT{f{z)1(fF_KE@8Uepjo2@Hj}6wt=H77TVVe~Wt(%7zU^>;QV7>l#5_(t z5gLMN4G@>s2bkZH;|Htc?NE8}0?7?UW<-MN}lYDppZsG)8hF(|*C7`M5f zZ^m>BZ2lM=#CH*GkB@s1Lb0cHx`m!WU_EN2{uR^K1%=ZA3mi2zrcqqedT5roBA7x3 zbV=6)+o-`t7r^B9)X;F5)h&+Cx+PTV5nC5i2fgdgFn=pE?|Z9UZ-f>uyoO|Q!l9o& zH)fh|%(UE?Zn-|5z>Ov8kN^kx+Lo=m5hZ5>Zt!|`ei4@jlb^)}Hw@~_(Jp5L5O6kM z_93>YLKL1H@3er%^5x(*&t8nQu{!(<1wH7+1G;x{0(mg)g09JY_!CneS5vlfZE$#x zNehH1TV846JlyRsTuthDBW*28^TmAR8!q}h#JRsz?o0K_-eui|RxS0Lkc)t15QfNm zydfCbLqPV%TEUl5qMH+GGc+3!O!Wm-m8Ej`DYEyhl^=48WE`!3OA%DC{A(3_$=CQC zA+@)sgZ6;1Ro&N!P}&;n+g&LZgu<2FXZgj@nkvu#(j{(;3ecl9FpGC|W7&O(|rlw+;kA7bnfZgQ02?}_Zgpy z{sV-KYct*ya(YM~OLkQJS&8MVXq`X@O5768IIo11{{PPLo#t_at4($Lg6ZdxpZs=`tAqg-mwZ?H6rPQU=e@0Ox8 z(7n^k!fviNkIjBXaDkAZprWe$E)3n55)yEHIXgR9dCcXbNXW19k=~*lfD6vtACx4Y zL9oxAm?&dFYw1t0=Mqcdl* z;rX8c#4;^8M$VqDg}vXa_r-T@GhfEFvx()C_d#8p>fa@5qvF6EI?%T8nDY}y`(p;Q2ClIPA43I)t{oL)SaJ)=K#DmZ zRDXV~w-{_BV8oB)f!)a?U4^}Iy+hvQmz0%x_*`0EdXZE&jnERR@;r3fPP zS1%eEzh5+AJ0f8I8)hWvr&mhetj&1fH1)x98=nL3qU%wq2nG!!9j9eZ>p-%2_S>{d zu8<2RwQg>2TupF7MpGmVUb%gRP6#gdBwh7L@wPj^)*j~m3b5GR+oKkLN`jOsOe0-Gu(X0nllH99L{Z~hD1tY~8xw1` zdUczt1Fnd1ydW4K2c{H=N>&p)DXADaTa#mfDu|6X(gVBO>qQc9sp39})zGf1C4adB zy#osjd?ZLkK8q}8;t(Sz33sy8x&vrvG45&op`QgI+J+gfEKhm+?_UKy>ki^dxv$(a zn)is595gIkTq_IX@j2rv80KZ^{AMA46yPiq+wzXcbYb3OAQ3JpxS|mCKX3vSuZylO z$(%NtX1lZ>qr1~_vs_F_?Dc-$@$sPkv6ZNaSQW0;I}=IrZp zxLN{3M-~1R2bLE_>D&A6F^l^uM^`j99fsQYxI;+kqZq7YT8 zKLZW$%@xrh{|B4t4V*#) zvKyM_DhR85eGHZmG z8BIwS;WR!65$J#c>ycBrD=+A^zfMVe%VM) z+O*C-iKQP+A@ZBXkj)YPk)?_#Rmhq4Luegoa~y>0$i^(2CZ+v>5E%l}NErxn$9n(RjGl)Be_kpUo;RFhWbC+!`A=zD zcrMS+h=L)xRC|0?nNKR}_$=VkDL``4cH0zLI`eLfiE96~(13>X{+CAeqxV2xY?eRb zEjMgB%>UH1Y~=AMk*CwY)G9P0{&%EurkeRbH8x0|?;n4`rN3y$f2z2UR9JFWdL^{c zKnDbrwvMJbE&o~>Z*;0XcGNaCy=iX#1tJSc)sAECprg)kg`Q!HpPaJhYn=WH_R0=t zirE%dq%`JK+Qa;I=J)T^^i>nMItwn@-5ja$lr|sc&lmOl#ACMPpg)ec30T6g|CbLg zuHNS-rh`+_x^`{L05C;KG36bkOIrVCWx^N6e@bt(QZh}jib*r>fE0?9tMyBJ`;V_* z?LcVSaG`I0rk9N|GaIyb7v3P&$Lf;-oBOE_85F}oy?*O^;;4UJEH{1f(|;#7;^H;U zM&bf*0lCiSdYJm%M&fUpCdwk{qwJC zmy|B=Kq>}H5PY)AxIs}fHBk~++IRV8nLcTX%8bF-#n|ppS%Nfi=Lvg6quGE%7BqTIfu-g1i3}E zX>lrF|B(%;ZAV;oG4}>T zLKYPnLq}uzcT6p!vK8YNgAWEUR0J74j-Hu89rh(11`y(h3VblqR+mkAm)xkCo`g zNX?}{YTCA{zqZQE|Y zLG}H<_q;?mUeIFf=X%vY*qQwi3~XqfO!WGd*jaBrr~zaVOfhdhMzij1VcK^CL<|#_ zp8D=8_y$JP*LhOgqSa=+NvhQH#Nw>^piqAQViPb(NRmi>a(Sl(`OH+W8r?6tG(|xjxHt!k z4$vjS4TT^9zSjvd-A76cjZAXZd_c;uz)c;zbV9CNzi3xI1d2bPn5@k9sY66J{?~te zQ4SZc!4)pw83$wEoC-|k9sYbrk`8j#dkqB{ni?wmj@TI`cq=m<&VeuB?(H7qtxx&+ zn49m4zGWO>e-yxAw=2~0=AE^IZI6+XNUHY*3M&P75Kx`!WU@2Ot}67cIEZN;qyQ#j@dPDqBe;C`~YdDtDWCZDnRd8F!ZUEMDN`B zi_>EwY6azrseMS`@H*|sr&odg7JT@sac68m2$xjhnH2K%r4+cWk(K`x^{x1>TM8fT zFQ(2@-@6czlvAjNDdtWMPA> z2B``HaqEF4W{XYK6QU|cxs2-^0s^h|$=<1{%TcV>>5l2?x==D}@m4Yttrp+@|TS_=kGeEna8Tel|_n1k^L(ksYltDi-0Wal;>{Af2Ra_ifv<$WpLt`s`7x0$twg(JX;_<#)h$qEQ zlq_^-mPnJxWc=T62b3A~l9A6kUwqUk#h?5~M`v(!I=8ZMgXtDES0 z$Vs02b|JERnb7pdZ}L|W$dM|NP#q$=J@n}P`s3#*&W0v!;i;1YZPkCjn1&>`i(73J zvsK1Ve)&6}Az2VtxgLnEbERn8m&TY`* zJ2fTTjcF!^b`L(8OkQM3NlyPI1Ae)J2x3DCMqs#SYU$B`EqxmmHLuHY12tSWpeUukKTMy` zN51CmeP?}ED-+if*KuGP(-9nT$g5zr1m(WSE~rCN>(?;Zn;8v}07_=HLQ*-J8GNMg zoE6c37QYCint}D{!ikJnB;%dEeH|sm$~&@z>+iZNS8b;lYoTeI0&x3Cqzw}o4;j)=~`h;|r{nILY@I*9{H>_702gh_9#_NRy{yJgx! z*PRttQ`795s_WleGa}y_R^a9Jhu^kax;w30VaO7d`X5qs+2Ro_D-MpX!LMJ552wPJ zjOsdMzu(eAQ(gKxP{EmX|5p~v&@JM2#s9Da{7-T6|7+m1hXhWSr~8so`f_9#=Nb1- z7`3X(oOag|z(LUW>sQ<0;O{0sB2<;!jKd5Awf@(UHz#cZ5rfu&6F(^pubo23Crb=S zcLQ<=n5hHN-^=5Ax(G!if>IFqZv-`gy}h4RcbGBO=;Oojq@eUAjGpgK!vw+O8rQ;F zHkrIbM6B)|ut9x9rYTVg1#yK8gG?j@V5PpwRnlon3Tg*bF&ADLKIb@gy=6)ypV8fXMD0B z`2RL?i{ryy{n+zW85tM#1BhBtr zdF`FnuJnL#xTn@rJYZ~WWkRWtAF#(Gv>#dW4k=w4e{(Vtw9SL7*mbAn8v^{|)`2AP z|A#w?-XTh-{ra1{_&95QOGiBnWP6j;-L&?`VsYXi^I^+fd)JaPT*aNQ^)*|)m|qOd z#u^5HK`M^D`MQ@s5nrCLfS++lyCgPvN0tVo*-rdl{1H+PX1!=Z(jI4^>rM3`Sf}vM zU4t7_>JF`b=V@cca+z4bDezs`{7csExQ~=>P{TPe^E_y4xmFz6lZ~)1p3?OtN{kiT zfqR9#Gg0L-ViKM4)@m#B)6S_(q9}$gK^+Xs-F* z`VyY*u)FQxp54$(+41U|&5MTJdnPyxH(8W2aNY|Gv)s6$>?}#-wIM-TVZZuBS-HTX z^v-kTDhs_>y7+N^(20kl0*g{qB=oH_!Ly$hNB0zc(S$8^XZ3J%W8;(J316#9U!R;9 z0Uau*?F)g*>>49THbt(>h1Z@*KIx#1ERq;s zETV@=;R@Nc+N10ruD`cFyDPw&7xO+NdmwNIMRDd;5tp0L2hE{`irvFq;R+tASdKQ3 z*~-?E7ioHh>eL+L&+=xZSuBOcVv)KN_#ktT+^Nv_?0`c=Fhzk^M%Pu8y}B z3}ecSf2iGmk9LNpyo;`qEeFcUcM4R@z{L~O2xpj=U7rOLLsnM!cm&K!_-%E1L0!dr zZ-CUn=m9!n=zD%Kc!H$plzKBueDP9pV7*OYzvddP6ZQoBq>OfopL}S}YVY>my$+Zwf))_@tk?1A}n!?>GeTlegXB6)K;h|rCpFc2oF_Nbeij8eHH$|4* zAP~jGzw#SvSn96#PG6RyNm%c_1?3C@Md%zAX+AUIwkIIBKU&H+y{k=X_%8;M02U?3=CmJS zad>kqN+?Iu)kq(%=sGu5!8i^Yi=L0~jm%pJ&&CiL0tvxHhNq)%q}}t|##b7|AH{?c zmBJVQTQI3Qd&U1=?2sPS|Bno*NnH6X|7z%wUQ%!X5&z2pg#27>Ix*n;;o$-Sp^@Z>bJcy5G;YG;tdZGs| zHC4mw`rfjy5VXpb<_TjQc|2k)z*L?70QCO6pf|FoeSWs>S)c!!8gi*gu5|Y_H_Lm4 z&j0jra^TY^M6b;6E^LI0Ji&K&F|vwEfVUgWZiD5Rp_1?6K#Ej#M7j}%OPEZ$u2KJA zEk6sp@GUEjr~E}7?>H~SR#q}W@-W;SBGm~)UKG?9+slhgvPxxjr@D%}-I+gvuNrlb zc{Z8XEh9$~_uvAGxWl7i(6U2LywqeQ)Fk?N;@+Oth8qE?cLwA#X+C%N%gr& z=7)a)d1h0@t#gDD+5Ejqu-^W6tFPDirU^C^UEbeCXzKNOZLSc{HqiMus4_3({p`vj z%iZiA*xKro!{_#*|I_%tRFd7egn0wq7L%mz=~pZV2qx#JJtx8?9ssh32~bpUn;^!H zj~Wu)MuJyP)*4ZtHvY2&>BpU$SOW_X`}H=+^T+!?`h9plERI{ZK0GfW1J64@>A9ry zq?toCRn(IIC`<5&NMQrgSKUSdr^$aR=oS8u@mz5%LxP7%rKLm^^v2Jgg-32BuSLpM z(ZxqrA>{`*{PbZqfx2qq%O(8J=0EGOqQah#Kr$c>)IlU{fv@`|l<}f8N}v0qRBsm= zv_}Mq8ljM8jR2!?$Fx^^gun)`Q`?_#W7dbsR9QoopA}|haE&-IXO?8p^GqCU5ef3M)WSd+MIQ+j0~va#i5w8DUj ziK(YfQ?0X(X_ZBsr@c6my;lUQsx5M0fpYt_8J8=}py#%mDlrL}$y{G2R)!|#BOK7a z7?F8Y~lyhK9GMqt?t zrDTZTnO-ZoWLM$KA9rH%lC2%ssWs*5Y)7i!QxhPvAxfwfmzvpiYWef~)(77_FVoyKBcUrbJe&<~8*stirH zu^77K$B&SF9;_lTPD5l1-={aB$W~+y@{C25d0`~JqRMIx^OI=6V?LrMs0)#No%TOk zO9cHa2UEg68@<1q|CSe7cj$gTes&GN1zdQLVHQ20sn7dY-H}#X0NxC_0&&E36aE^h zD`Cj)9oY9Yg8fxBH^yY!h*aV)rk(fZM8sbpB;p7iPPVqh~lA$W?n#Yyzm1aN-_j~ f6Q2F-#k_Xn_AN^WJYwI@!9Ow*^7rz@o_PE}>KV3_ literal 215487 zcmeFZby!sG_CE|rO9_I2lpr7=-3@|(bPwHKgTTK?b4D~z0Pg zR`X%r(+o%R%@lZ%#dvBQlT36tlM}~J&mQy!>#q=Lb`*T!p7+Ax`&LZzB8(gz85~8O zJP_0bIxOgrKr{9qir+ZY^V-0DwhxZs;oXxBj(Xx-T#fWY2M(1~v7DP0K+%0jp-%A5 z9}cI_D3!8{*eLaNS3GV?0V*)q3ywlX^Q|E|oWttXpnx-aI2En$^p}y9<5!Dll`r|@ zy8P;2u6{^L(!?21dBr7v^Gd$IwM&*bs?R7l+}M%{_tou@10qq0+oL(}L!F6PaCi6U zr-)>Fj9{EC4CpsuK?bStS1vix8PAE4D{(ttxRHc36E4Z%BZ)`NVplkRHyna{(v~q~ zc#SBEVI9IIzB87dJ)KM)d-cwPBR1hBA!lgJUz*RdkH-Y;B7y6K@*Bv=QQbQ2BdDYu zb1`n-emEUTfn*~J5utG>;@T&!tY2{kMCYSp$cQ+s9^VL0@jDGlya~l|1P5K|R*f>h zvkE9Q+YI0Mq*hb^ui0OZWv8<8G<~O(@CrjD zTFJhccD4)j`KxAlIy&`xFY8j74o`aysEsVYGA~f(+V~KuVMR&Vjt9%%kNXH-mcpMA z&BTwR&6>R6rLX=tnQ$AzyUz&qZJw&^o6i__RyxdI_oDcSb|UevdFy@AW9kjKDPPmt znIL&B<9_;@Y-gFSGpU~MAh2n<{b&b1h4UboKjNBoqep`J2G=VXUR*e_V z=jcJ@av|m@cJza*Z2gCAnt3GAiiD?*1nlck<^)gDrLw}kM>g?MeT;??UuC|$xsEVP zKy1G4v9TBHoyEHRq5I0Gm(+ZDw~eIkQ!8x1KDZz8?a`C%jcV> zG)z|w3L{4pfj_Y~Er4gtLiZ}08#_)X>2UN>`W{U|LSFgdIY{UIeYTq2%#ff4F5|5LQx#tcVgSY#90x96lTGk ztHJfJTBKNT{W_^aq|kpziuWRz5Gnh|Qf~Az<)B}a@`j|oXL^;^tDA$eBe_VCp@fl} z)n7nk6)Z17s-(by8u89Ni_U^8If@{wcx=dm+8w9#{YVyIG{u7Z2AA{)98DN23+W(< zW9RoumbdUS-G5C}mJl*@&{uY7Jh_8FD(!6GZvVpj$T!?Mv~q{hmi>_{J%afMU}fXV z`#S-!y?jmZisB(cgvtVE5Ow%3k#{7oKCuKTioc=SqfVtr4Pq#YI!c#%%@!;nj#AIH z7Gl|X-Ko}T+evJMR~a)cLqZuXW%Zi<3j@ox;aAQl2vatQ*7ie zsAxZ5uOm1RUBg{-G=$xS3%t#yFs4|0i$~KDokUwLVHPDDFvyuClw=r6*%iDh9g>x! z6tB#sf~7L7LZ-Ob-`~I6&(|j(v(d*Cz3|pU{36RHYLB)EcPe&QE=?3)37~SRlv3bQ z2(;u#el-*jFEWr@nx{54JVrJq)IYZIb{%1Z$02Nke%)%Lab2%(p!a33NB_u|kp$)# zVHzJfZxK<6cExsWzuXF`ukTiJe%O9`^}aDH&M46+Zx6?=i{u6WD6<7dCb{|Uo-MA>G0wrVxPoK#LC2C)73Fx7riN*F6t~8R4Y{E%^e?V zBMb}|kw7-aTzj)duy%?#gqDt1kEbrrBkbpr=mOPUO2vXC&ue&bhWZp_seY(4cMR(QLEzRaoRfUnVpB`Xdc zd>va7MG}4z*Ai0_*x{Dl2i-H>aoyaq!8DOHJ2Z2$e6mU^{1d7Z=o8jv1xd|BBQ`0T zTd#k-&i`=tAuh%)MP*2E=yb4n$m1;`K|28w0f?ZS2C5*R_}$I{x(N!#JxbZSNTRGjV+Z?7sJtwb$FB}t`5}q)P$y=f$0KIs@850RawFj&_#=Rk=CLL*Oiuk%Txd0!TeC*}~Cfpdd1P3k$9&Lq$G6Y-Q z{D%E=pSlycGtJkcYR1+SxK%E${^;_Oxl7p7m)1;fIkWOJ6}4<{GOZjSM(2E*@ciOo z^-%^CtrK0bec_O>!LPo|;L0!ym@S#FI?-m$zj6pM{h-;Gpth%$;8S}8IxVLvjset_ zSL#=LF@9w9*)IhhKra&L<2Ms7%CI%{oBSHSx^^^0RCDXmS2NC4hE#p1DfDnW+Pq=B z(FWUHE2nFDSN|x^GAr%|$7u`Otl26vF*A+GIddOUOFZ3)ynuU#gWa7lsrr;xC##p8OF&XgzFE(~@2$3`u)w)s5Tpmvu8bNS;CX+U^Qgfzw={)%KT&mgA*+oc{ne1-!^^0^HFEM;U(jQ*6avMTB~dO z;g1IO5it7;U1lylhZd)ksa((5^+;q7SlS-?9gPt*-9xpiIt$sd#<7V8d@6!{u!+fKMu7`#F z{66;z0tR%KM?UT!yUZEP8!TC`K%=>f7mJz~E{894PZh65voDhlgM^>^sNU8;#;oOo zM=CQiFh{Q6-Beu{_dx=IqDy4qCXwN&8t>xQ-}tr%($GFRG9!npadma}z2pf^J$s;j zChl$?OL3&2;Vu~yEC_ci02i!>Ai^S$Z4)#EXGHHA7PX{A23K221kC;tV`I!1@%~dC z;g6o^=(=RM&%|(7^dv+?i(G6cAney3FMRWCcA6F5io13%(Y0v%6}u0#kDM?o6Il&4 zBbmy;5(PASDNRQ>I0EXQzwjTFUmwB2!Dm>iYB*`g$?_QkZJ7*BfJUZFuD15D(Qt4A zu6(ddTT>@P3RhbjJ4ZfOLCU{J@WHNs-e#tx_|eBW~(w>|kl{WC^sR__?m35fJ1gNJ;r~qksMUgHBUd%YW}==lD;y zU<@+uhy&JKMH(lL6|&ppLHOhZ#}M zYa6#XYSu!l0dNSY6u$rcAx?oqDoR%Mr$;~UeS?FS&_hJT5rKpMua962UpV7VClm2M zJcEr#2><@%k6TjURKme`2k-O-|2H{5_e3OgL;2%|A{0ijRi8~nKl^WDeiDeva)R|| zMnpPct5W4rQTWR>YUph>wl(&lJH+EdE(+IRAT* zIRAT*|I^6-Y2^P*>;Fva|I0^qzWdFsyhs;ORh|3

zN1r_AizQ76G*Jr=L8RJc@x zZcqQ8{#)Wdy{T4<$o`HkV{3E`&QJH0IfN?y9@~=L%T|We6wz4QefA9hPj1W44CW@M z2Q!}s{ppp7Xyd}3#;0?6z5kP!%}j!MbuRWdU9W!Q>7TB8G#(a7e9O(3)BmFjwlISQ zAww9_AOGmtYp7vQZFeju0KZ2Jeqh?=lIRZ4v|%vBNh=%Ky7$ul-l%&7KJofNURmrbquNfc~JN;_2E_(>5Ea`Xe zK3(St%RG(KugKpKqpUQhP!F5q)9!Q z_Qz`Xoy65!(524$3z!frSP{YvY*?fG1Ah;hK&Xjhj{IPu^3)7FyLqYaQm0d6;apz4 zOpE2Wa+rV{d^L!nP6@Y2a+M&wmRzzS5fLA2`<3zpZzHGgLu9P-4+JMVE_yWG z`sbcX)^dIlnDICev{$!!d>8>$&4Q?F2dH=B zST9OyT{kkZoYfi3wjL9%g40sf=y^4Y98`kTvg(GHk==)1&X*H=eKU?b$gpndS3K~4 zR3HA!a2LWD9+z)(%RTN1|H!E;L;LBpp)YhAiBn~6ipfmUtdpxK-5(@^P_ z#WVBoJ0m=%XDwp~Bjwshd;qEE6{dvOzHpV7-71d>VVe{z-XRnWS zCA9&O&-i%<&URPd=cPfWN5-b)0clGQJF_hNHlD4XE0abWBdMhW?ii5Z53P_!QWVvt zMV{!*Q>qP^9U9JtWhke?3RA!7xG$hBJjdfUck6uLPi)Hi$Z1HkalwOu-J?n!s8@QD z(BqyzB3*gkl59?Z7v~ zg8WX85`ZryN`T(vv$-qxc{TAXl~`eIG09v1z!sxWPIiw}@7gZBi`XJ*PnY|s$Qi>a z2SM(AV$8JqPR{;GVLx7`-VqgvAYS*T8k+4$sMGs{faEXwB=(0+ZAnXgi+BzkH*T&c zDVYcL(71i_ii>%+RwTDmS$=W|+2Q1-)J3s2^!JjICq&&)>r_LwSA7< z@>u4u`1R{$VoM<)J_&_yn;XpJx~7xEO;P<~Hbv$L3Z`4N2e!6msCEJ)v`I~HhUx@D86%KiH%junc_K3b=vUYa;^H_c*m z%*%KV$3FGT;3gBV$67{urorRI6g3O~W=XKMyIIkNz-2wn+w*ziQvbB_;@K_5C!j+Xao$siRgd=ws$y}!)T!I-Ff#&bsshY9Z>eN7{;HRm5l>aEG%sGuB{g+J zKXV#>kH;4(&dyig84Hpq^qD?~QVwmE<{6?yHftqq5$U>Q5D0U~3NBcq)8si#4NV+E zRMOuh5*2Kd-hpj>$?Q=|Lr>6a84T?9-~}_9`qX^D0mL&svXK!r>4E22!>THP5^y%J z*dSj>pY#Xl*Ew$?l~aM}u`kj|)X(-6Y>fOHU7*{H`R4BCF+yq~l|g4gA?fDaIw?_u z6GQhC`ygE7h>?Ba$24?7(Qbb?cVnL`rEq8dyePJm`uVQ_@KW*MnMp3_LyURrHr5X5 z{>}KRG^GdGu-DB(T6$*L)UYP;6!VasxwLyA*~1zekcIsa08A0FI6Y&?)ef}tu?Tcd z*DAk6-(qm_r(LFJOygGon6>VvksWq%qQEqjIlveZho=sf*^iWR*Z%Ix;Stc%5adA+ z?AGiM?lYC-M>{gV4|~;8r=RGG4rD@_&pV?bYIiHuH`{G4`-Ovxoo3me$L}8}AE*`? zykCBP4ZX39S>Q%L?_ctqh+uHOi#l0waX4(~Rx|57zuL9C8?#^F%>yWYQ`O~~8pWK!T=KF&kI3`|rQH6y!k7Mw<>3IzWV$Eua1C zVTxz2-S)VYVBW;kFZsLsLdB69-Iy^;K9(4H!(;hls?Ne6*%}|HEHRurm%Vkd_h$U$h46UKE!J*F+M{y2#1e7z3i=M$9kSe{Ln#aQ*4w$F zAc=6cCU(enx!GhUlwD`3sU_%^=fr&;N&G0Lr2exG+Rd&ayQxQ^`J|bYzwcApD3a6k z7en`cS$b^w?-ylWp?F-9VKn09igx0+^kXxY}eCnSB6ig+)P%v?Yy|4d|=1P#YPKyp;|cR=ee z^v>j8+bMOL8{ zmFwRx4yr9?vy&rAB16%bv_9>ZIz)+|F*lSsU*#Y3M|KuA&T>Cgi8<8!*6JgH4P$Oi zojI0j#eCfF6wDkcE}dL~_#L$dT`rs-!;_N9R>@)3b>(mC3JY0X)0Ybgev1c>&~tL2 zv)YHFwfU{Zg4%Vv*sUJQZVbBF+gwcdr6uKTLD0(U38#@n4E@Z?=<9xG+lk}|a?490 zx~&&31^QWaNHlrRNz~XbQ&BjWDe8GN8lo^Dp9h+DWSW_$@Du7Lo~{8WISw~pwVae> zmn$^tvNhq!%++rCNQ2%tF)oU17~`Sb+>CX)BUsxmYq~v|;AENUq|E@2Na&Wt&^`$W z{`j#nG@|xl*S3r{KPVoY=q$dw9>%<@k&7=Xhh-Z?q`S*vZAwGajW}oa_P%VjByH6Ekw^Oxq=wD@h4Tu}vSrzUM-tBOlv>31*t1UsW+s1$1aT-oX9|I_ zzHjndi&pC0bXYARv%EJ$S)2*r>_a3Ji@#y#KjM15l>ahgtVYM$>eRsNFq&VMqYvWS zVMc6wl)sw&cwEL>faZ91U2XiFkg}MKvq`ux{mBy0sP*eb9-ZT0Zwn^#i=sMk6Hs3L zf88DuzHjf%b=E1V;$Pfk>I+IQn>-UV_M%3dLsz@J}_iEjb zhCV5uuh+-c$GbzGvgo)Yw_4YME)W*m9zF)usYO5`XwBEfZOf~ZlACX~B3FnfCoaD? zfAYYFS#?I=Coo$!f?#vv@ShGA4q*kcB+ZF-gli(7VQF%63VRkl>jr#z8mpw=g0*nl z7-I`)*T-_JN?fA1^{|b*yj#UutoVAVb>I?+jPxS6s4mUH7smi@1b?YDoXY1s{p5rHng(w0k9UkA9&b`MX8 zlkPJm^tsR0lDlJ_m3v?>AG3t-^E-~}Sz6T4~JXfU3Z@~K`(*s0tr zpH+a*cwi~Hg@UEzh5-Al?wE7L!Lbl{>rc-%#Car7j2#)(c zoud+Gp)=ofE&T#Z=f`i>{T13A)Uryai;Xh(#Mj*Rj~CkSxw;BR_9tpe>?87~_jR(z z63WqRO)p69Pt*Z8HB0NgH*sJ_dt5II>XmZwWM)rGo%e8lj*M-n-Hwd%Ucc%!EUv_p z8nsm@1+*iK6!1R=Vu1apMs^_wa4}H%Mlx@YTCx4Z@{of@t*I-SxH;nc$xKneHa z?O?*NM{Fi=V}468g>zr)lMR_oo-%hc84$lLpk5qwtg{=xH>cRm&cn_*?8tpoS9WU# z*wZf?Mw8M$t5cB0VVC0_u^VeDK2$Ml(}jf8Hhfqa=H~PeS6nVFbN_DI>7IuBy%ZR# zl1!80Z0BuORfqf-Fi)E?I+oCL74bQuLjU2D!_Q1!f}#lQIV%g?dGm|GvK6PGr|&cmw3*&c}o@jK#O6o-clBJ}<#&NO9CBr*~ixmK= zRT>>0z`6LmxOrSZ{X7<3pY$1doW(&L$=f(?Pce${j$oxZ8V224AYpvq=WzMDF0K#{kRxJ zd@F~9-1#E^2-!^h#AN>exN)WJw=E}<-&nHvijZHFrKbHdch@RkKBH`ECt1r;@8#%h zLBX5%J&8c4*ws}de0;UytG_1TEqO%$4%C))P+_6Vi~dQ!-}vWHTvkS3@t zA8Ab}IuWlG;#XxdKeyzcw!k+w3JZ-0Q?HZZd()ts+HzMLX_bMSyXe&~`WKh`>x!YZQrietpNS^sZ@cPxkuT?aT+<)*K|WvBcT6pV)PTb$MMj>l zRE6fqBDY)!KX*7Sdr!nfx#WpV;_UnIOS-S+mY#n>oBif)_dz636!%v;gKrW+J zs5ZZ@w*R88OCp0uueffhXzGQe0+ih6@dx5_YkWLtGD2D^$qQVTng<$yrlxI_RSB!5 zvD|FA_dccWB&!xg??tZjzV4xjc1_L*483wd`gwFCs7R(9GL&938Y3FNwp#y(ApbAy zP5#iv?r<#L;IzKPd6QKlfhAdMHP{%ozl!@D56?DFuxHkq@djX7I;5edW(+nHu=Q3* z@->N#B>7mh=@c#>o5D$?R@@zF;uL!@@u+(mkFKXtj{h>OdCJrb3p|<<2yI$=S@`UJ zq8Xyy<(I7-*=a)kEwnqmM!_!K~jgOPOC|=`UYkXaiV?dQtY1yrTaH>y1hYPAyXnQ%zGXQ*F@XZQ&cR zf<&Z^hW!}5#Rf2L#xhH9URM)Xxpiu`Q|5Bk)@Hr8yn1aTSzN@=)N(wuP%oW*iv=m? zBC+z+bAVwFNYri5cb@Kk94Gn}SG8b77~ZuYeR!)2?(NFDT!e(+$>+LQ0#Tmw=hgvs z--k4snEuljlEC(0Sf)6I6`l%5k>4>GZ+VdXy@uWVVFO9);( zM)_Sxbu%S++DW`?bO}a-aRpWDpHa*F+HWq6X zO*VU$=(a$3eq|qKcjyv$JvF5K^3%^C=eYr*v5Y5u4cfo81s;*f)o*t8jYs}=Xy`-{ zS4z#~WGWZ*twajlFpZW4mp!WtL-IMkF2)D5n1prbgL2+)Tt1a~vKd_2_|_##QJges zAIR}u8v93#ZQj+Snql^=^(YJ^``b?8A5>dk<0a#5c26QbRr7R>nMu0QB^9jDVjw3X zrJ16?FRL(()Pa(X&&CrVVOko5eP=mO%7`>tw)&_kx`Mo&@AX>))>YKc1N+!F6|38zYqT*a6;^~4Zr z?{vMzy)mGWsqu~00(0Cuvo^lV9TyjZzNye5@iAC{e^JY_c2%agP-BdsWHw0&lipDmr&7s|d+%GLUT4y_2voEKT8 z>~(T18kb)1ZBE~dUj7BBNu$~0Tv4lDS3A`#AT=AGk8o5viIaX{X!4lwG=fuQL~L$d zS}(im%Sg@Tgb(yD%S2tkP1ml6CU)-Rln8%zVRcr&Q?INGceZql@)zCvkMY(nW38%2 z;GXa>1?8KB#uPav&oXsz=(yO;dPdOTw%U_1COI#r!%{msQ0>T6f7KVSo2!gmwkLr7 zk@pKNIRm$#QgghNwu>(6But>JkM!kp>q~DuT$_X}nbvu2Qr#}3JKpX7@&bj{wsU;R zc^276uO9C6=EVuM+JJd`b@?zg&Bm6ET;}T=bDkPot;%kCIE97V~lEG5slLyC}QzSTeG0X~uRk z7A)>b*8MsVnOXx;s~L9}s-^iD*MS%@h|G+?frV$_2oXkMj4TIPv^^vv}LGUAJS;N|xfb;e$utfcp4#hNq5adA@v;Vm3no4|PdCh!}O z@1qHH#r<#^$nmDD{JCUh-s>m`I_!AaE}3u{pkYY!%D6y7W}B4lcX8RxphOX90#B4dE}UZ-^P`bGd$9KP@6U63P|Gi_=-O7^|XXetU5iZ zP%{PvdBZVxw)XCs=?#)qewnK}w*Jl6ZmalILTosqYL!pt~v)E@?NTRN-A#=BS1 z?#ToAk>gbqp?)_SMtG7l{Kdt|G-?Ngk~4n|Sl_UGzbLG#$}4l<5n+Z=*rS6wBh{!X zW7nWG@dJ_CYbGqtWeYntL0I$s%R^3hxh2xuUJSjn$G2%bbg%89&H5GMNqx|`!d1T8 zI-|{iA}KHR^7XS*GlqpmiL~+y>_vBA12&iCEGR|ws@F(R_;%M_f?b;7poNyA4N7Mz zveZ^lyydRjxaJr+#&}qw*CwMXf+KKIKtH|4q`PJn(pQHF^AiBwz&Ecg>V9&}$m*Qq(tP%(TWwE6Ddu!O#ugzfD)Ze6VC4)ZwMxC)&Aw>`LSmZCWLVVFRHZHkUPbnGj0%TaFiiK>=q60nOEQa4``;yNF@FWfb&BH!!XT6m19^K?Yz zhvpT?v*?HKGa!-Hw|lwjmUVhtjaKQY9zC!z9s-oH*Gsc$-$2K|Out5vAtRL}u`Shf zV|aXb>a^CO-2mu2k<2H+$L!Sj@gOGbd~C7Sz1%*&>YcP!)+5l(BK@-oaar8q_mY!- zId|as`sf@uZtz&^u`lIkH6lHkm_%S9C(A3&xdl^!5uIqCXG+%b;k!dvNK#-!8v}y&^(2a=urtGLo<+p%btK z>|=4`(O+}hR;~4!)M*ZpR`~ekqPug3g5p9dOtdjSMVs^);kUfYFAr6tNkE%DXCb9# zI;D1UTJ*ig1Ofa0%%gFHX$_ZCWeX=b4^{__>!I(sX*{{z;$QoCO{9`~k7$ONryt%o z2`B-mfB%ZvgjM(hamYx;-QotX_)PWTE&liO8ljtY5MHN;#{C}MIO{IAQKH@BgIqG< z5`?``MA$rIq=HJHG6> zTn|>k9tQ1Bn&8~+6>g(MDGl_dC!x^(oP;rvQ+-A=yY{BzmNP432Uue1QsX6m7!cv=HyR! z`^_395qfv6uS~U{a^B>kwUCqInI2LuEXLY;l{RX1(QZ)cl1+~K-+dzHH3(N;3)-HW zAb?fQsENO%<)%ntsJ03jg8iKWB_4~40tlp?_NI34+S<|_UND#|j#5Tg0=CVO)&jK7 zLN3V4&>A;=`1H7Scl6~;l2_YhOE4s@EkArd$CZrQvx_e+`O>l1 zZR-{1P}qXUQFIztO09muCqzVlHB;va<)Fz+7O^1xKvlm--2Mgxb@?Q*z$bzI=ozo4 zDXdU;E~BVvS?Fx*B`M?GECoTaL0vEE<rk*%in3E^UD0xcH_KNR<}>Tx<9poyZHv?;(QxG?vs={$J9aB~mht zYUudE4~@=w7xRwy$e-qa*!bcmKFp_rrYzVac!6fy2mR{zNHTyKeSr4hLB}WI$xGli ze*2^yJ0HvT>9k8Lfm0V~)^WSGf1KX-Y>^S%LPeXC-mWC(;=iZ2>lxT;X>RV*#jiFO z$50~(KHoL&ng4X-orl??H{qFY7`1DW#BZyAzOC`7m16i5vq7Wq5{!?mE2o~yEp4$- zG+BmuxE=Qbozr|LFSF)6Ezq4~?zFI6>)@3yETazp?;cK(bp+PRvEAd`usxuWQOW9> zj%fRKqD5C%^0VLzZmr7AdEwse&{tXzSw2T*a4eqrNq1KgTy}#^gnD>bn3A&ccXv}K zRRwlTZty(zU1xzxLK_1;s?HPU?J}=M^Zi3kBa`&_?=^BB(z@1&fijR-YlzU<)6zjq zy%-jq5VOmbu{EcS@F8^4YC@*wrP^t6>f1D}AP2j}#Zg`z#bT__QzrcwzCG8SMHBy4A5KNjo6l`)cZEd>K6o}qFa zEm=K_m4%&yU!hq)KBN*6gWFidYQr#Vj-*=WEPS0BA*IUA>3Ib^^75Ln7<^+1Dt95J zO?PGGk|aIS{0mapxyTa(WH`)1dD6>1mP0hG{UbJg_GPd4l?TtD1#KXbTtu&P;lLEi zd&xNb-LBRJb1>OiMiaDf>V|PbraHmGIJ)NJ8ZjhduxrP*ko3ft8<#yhBNds)GGPM5xE0K@cO_~*5A`zCWQ)mTHH(grYMq<}G z-rl;iwz9llzO)QUs+v!P%ho()bA{U)G@avED~f(KQ5yDm0?E8VhK4dv38T%(jCKap zw_SHTTNYs*zw$eek9ZR;;Q~f97-wbo+Z-dRMO1Cm(&-8vIZ~fQ=5UVg%`3i*>AQ#ghKki-_!Vf?0?Bh@ zFUBsk!jEZ|ErvdoaV`KOd6>kR*m7+q1tC(qEqB^oI79}IZRP4ph{=MIX#ifl#Hc+pb zr5<&t=};@ztt?QyRA@{X8@cSP-ny&!RZ6^Tm3Aw&b~+^3Zw(*cCxXwpQE8z`prAAo zrVUcU3!b+cLwXzv{831U$!|${Oc27)J#klY5e{iCz;f*q6$uX-VO%8WQd{$nkq2l* zrVxN&a~hV^;vQ`X(LE<;!Q^$6t$G{!Cwy`X@iRs0BsqKJ@VjUSGl8-VZG_urisE3% zd0ZftErvJj9IC~VjXIwCA3EQ^$1oi|8-B3No*SX#odSyp2jCuWfMnzyMh(J)X+QXVFvR@zE^9fB7V)ewYRt`K)DU zlCHTm%f_+eg$6yizC{?&KJ4KH0^~1ho|jZPLJ2E3nS}bnUFS7a_W(1_nD_1E=ZhmP zrLxt9q19QkbKn*zAc$cHas#^9U=^+O-RamI#%py~PitAw^LeoTzR5&fY!|8o?)<3i zoz9%Wn+!u~_T5b)^A;xow4q?@v$TOH2imj^NOi>{4L2!HHq2fw>Vff_*RmyaD|OUE zkRS7gyBhb*f?kKu52b!&MWmQ`p~$5^AGbS1f_fdLPx{zDPEnl)4Ptm8n&*Y8Js0qw zV!oZ6ikTeIwO8Klx+t4|=sWePmJje@m0mC!s6GE=&Utn)ifQE8Rr_UY&6-6LwZ_da z@WCT@NDTg$t{RvwaMX!}qp@{&L6SwXq2*@anjICh=1yWfj+*WVQvO{QD4W(?<6n^? zPPNq1oWm1EZ0+x%++1AU=|)~3-M{nc*+k-{($sIy642<(8Q+GheiV<4jE5ezAVs zXKVfQocmtd+|W4NydvK5DUxt#u#rVK$ z80qb1jeWQ=eUM;PzC$S~YUE!@kMn)#BAsH5@zYAuRS3T_1c_?7xXdn+yeRxT<^- z?&T2^EWCNBR+y%G)v<-$!l!|hF^|uaH5z`?M9s~Ub~xW@w2(m zsP)qLx{~f#t$_Vi{WS;N>oGzWv0SPxW&U@^7n9&4H#QCipRX6B+POi%qX_j=g*n?! z-J61=_6pI?612;mW-5lWv(U;1%~%7jv!lmO=a*Rk`lZPmbB7=CYajSQ?aXr8>61fV zxB>~^TeHbDOOe2y`=3Wdz1*jLy!uq-ymxi+fe*P3)$H$-=U%W$LJRBEt+!N+2hSEq zUw@=)!F1hgS{Q6hg6|t--^bN(mbNlL@A?$kD0}Ysq1CEH{y;YmNhJs+c8|YL5tjXd zjwat?qKDoF?$yK)Zw+j^JWtr;MxQ)%@BNy@mS&qbB78CU&dbR)EMArz*KECL(tHpD zzm=0=k9}~Eto+;qQoNls2H(ZZIL|2A7MCZS;kyc}==fFB{QP2-d8rfnuWh7$r>@?4N3-|gEfc>`%5iR!l*wcY)q%n#zYm&ZgW z3@qN6*LCFUhjqX@#A$!ai}+Z$FWWi}-G?+->((a^-q!SdSD-0-X`XIql@Pfb4{kFs zQ~X%Ea*fEDG{J(PG$yuJ{8#pm<(gF)L_+Q3j_jRZGK)!Aw?`#YQoPUo-(|25?EI3D zqN|P((CS}kEZ**ei-Q|EYq1M{Ii0Q^rCnqRd4;-7u3pzwVf%2#heD=i3-7x>*WBgH zK7D4<1k(fNL30J);~$=7XXyU|-C=!oI0iNg%x#557E@q}8LA6d&5rYB{baHu1hSiS z?pX@7v5C#f9x5jyBEVO(_77We4zpVzs3C))^>1N~da%Oj*;!tC`%3!jyZ`ulRjLfU zLMF?rF)i`RS5N7{sRNrzFa7}&!Na;aaNF9^eglpEW#c&{V6{@?8mX|~!k&NCQsH5& zJmL9gi7(c127Dds(bnIe%=chx7aStv`5@)L(Y{7r!u^$QagF&m|F7^B;7T zYGf)i57%oejk!P@7UJ^ASB;#AjupatZU>VomcQz zm4nsWO4_2+=H!;@plz)Awu&F8L3$1)rYM9mTz5(z1iPU@*4W=>%q4qZ)r<}F&TsR1 zV{E@gLNLaXRVXC9T4S>3;m4=+rCE?5y*JgIo>*RrCfwC72tE-&%#koI%26=l6}O7E z$LiV7hV_5vM?5kJk)aN1JXSf=h`IUH5KWo)nhhlKfJTm(gFzqGQl+H6HK*=3)Piau zi(iJ$l^qvSY4dXEx?DO^D32&asT>Z*Q4il+C!bwEUd_usD$73p@Z+Gsoy~N(YlKQO z=MqiWtKCrl>`cZf0Ql04pP$&{{YHSuvMd5MKbXOM-IW?dSU9X(2H2ACz~^LBC_g~g zVXkn3n8nxyEAwBEcVVVxzi^2~Rx>P(;1O4Pa(cG<(wdXby@1b|ZNr(UFlYN%t14G@ zcpUqzO~i4bXv9+`CdlGJrb~1KF+*!3lG~ak(xtqe(B0?y^~il2-9)4yl!Icn#&TRs zO=E_ntG{x1$UPD&En6{p`jKo@0a*(o=dsAM-eBcjd{)%_u!eJQ6}F+AP0D<)L?x@0 zk+P$Iha;EVDxX_MG*6ROJOo&5?qe#ZaQU+Eu+b#YJ{A~nY|3pa=g`2Uc~{@G7#$j> zm!pf-Fb;@R_Pe>D-N2>l9QH7#Y{^GL9 zA4muU%-Ku+{zfZ4&bVpOb&DO^_P}%DlPLhPF&lDQGX`iuBiB?)hwH!|u`PGGCi@yE!DS?u z+O{o@1& z*}{UB*FQD#9SlPZOtwe*{b*#0BA{>p?b8`d)gwbAzZV1a9wMxwO2*&1)Yv?XKSt9# zTW@YtmpRQ`?oh?p1;iap54hX-Lml*-TfWVTJqchSE1BY7Qr*8Tc5*m0GQC~!-Yc!W zINzljp@--$Jp~?|%RF;;%}eSwZv@6|C(Ebim3+wFM?ZPI!*)Z4JD9s^ZIPA}`Pj-I zsd>EO?2>sV> zSASreN?*)NeK13BBziw{j8Y->@ZsBR&tABGxUfTTGo?-D9EESh9h<^S% z`)#z#)2G-QbNNK{o)=8#3Sl1?WCupYT0KTd%-^tAYGv%-j^gV~*xPzLlNlv4z+@kQBBQ+fKTt|~5ADe0+O93nJx-|KFU3_vp z>oJ8i`g^m9PAcr78s{!D>Z}27x$X}|A*jQbkfuBy^QG&IU4l71D)R{LYyw(n{w2m) zDIHNtQAtY6L4O7@c?FY^j=#0sfbSG8)tjD)`j8QUf)w?k686MLRE5Gaq;lv-clEiMK=XZ*XZZ zrt0T0N_&~X-Pn;97r{T2=nQS5ezfHztW?W;r5sI!#S;p4vtVh~su_LSMR- zt?Ox!urkAHmUjt%=*41Tx`*oBnmv+PhZ z<}*Q9)a-v2=wYxYd^bC8G>o)g%}J)7Uq$wQQH{@~xkH|_;>N+IZqg3`~-1Mn}sgbZ~2Ngc|v5og~J9;s`uVrq%Fs zor2*1`(FT|TzjLl<&ED=`rOxFUT6gk-$T9Hy9QUZ>@Pw6cUsuz_a_N)?%Qf0vhRvk za1xGjc=NQwFoF4Xqr)PA62hJT5FP>&*MsJqbWgvJvtw6e!qfnItYyvOeTLsA#Kubb zh}%npRUL3GNl5B3bkJXB*)Hax|6Jq1P4MX*^knSI$d7L{8z-`IoG$TYIt6=i>R&Jx z3`&WTzI;Wa`SJg;_f}DHZB5%~5(o*wfY{9RdUo?ljOya1RjN-QC^Y z-QC@tKFzzo_uI+-_kV8B%^71|tkp2qn6qZhs;A~tRZCgETpj(;PVeDTN~;nD8SB7K zqdPu-_24QuL`#9ZF5fh9fU+VuRNsTqGQ8JvqBRNX<^{`M7xze%G0DFE18fXm!ph!) z7c@PG0WBO>ooBP=<~BO`G|1aMH;NV`fva&qRV9tEorP|_Z9dnX_zcxVp1FqS{a=F` zGxHL%xE?Kj9ZsHh44L$t+GEt(N-hAaI|1TX0=0{AMc=QSr0^Sfoip1PYkTsEcOJe4 z%V##!YsVHQGEIY20D1X+o|}Bwk$X$7JO)t*rMs5WaSYcVU-2cnX6!#K=|plno5;*o zkx+FNi6K7;n&JsMvJk)g6VsR~BBDLjt)IlQnFhnzR132rs7Dzra*2ue z4-dVe@W~8ll9BsWE5fK+C#pc5u-3IJgKpWx&{GwFetE_ch@To91yRQ1!;Hq!Ud|0=uDxv%aXO?q%Y1(NJ;|!0IIm$U z@(xMk*EaWoqaOI`0tlEjs<(2zt+q15EeeLY-<9zbFSuDhl#Vyq5y7NSC>ZP!x@evi z@=uSyy*tVY(t;{_vLzI0;%x~V|Dp8Ho(s62n;Z^r&4F|LCOtg$(|%z}ASiqz&<|2t z@!7Kl5h;Dk---s=9w*$S?DPYENMjaG{+t7;)YK>axGZcN=Uj^TN-dI5TP=b>(G97^ zh+3ZIry!qj;VVq2%a@4U=a}PkuF)5JgA_Aw7JTwlgHcQ_88D$H7>c^&u|S z!}!;z528Y4T_t>)#zEQVF$SXbhQ_bo!CH-GZRO@?bb2$6{uONIHNRpP(pbwV^DOSh zV)fL_MtO+tuyppX8hC(1ku8H2)<@W~up16{M~6ikIN+ysl)~`M1twAadT;mpqz$!S z$jHdp1sF@4n`qOgabXt<2K9;u&&E}E!(P>9P)>~~Xw`DE(lOHWO<+6Zk#^lw@7qM= z?HfkYNNo`CWYLl{CC*4n<;og;s>ziyviy`IE^Un>m!D-LDx8tPPfe{-vd9i>jCaai z#(H6(@Q%jGSA%~gyR6rF5P`DUVX!CXKNYZlnIHEuMku?#k0%H7v~vX4p4h>~eBe6t zz{A8ry!>A~V7Oz^K+(AuKTfRIzXcV7CQmunfJ8LYf9=?j?Db?)Qc%40|172XAGAIU zc&du^&iaV=50mqkt%PPoLPNW4&lHt^p!>fb%i*ArLBR_3$iFwzP|b##UaZ@%hFE{t ziT}E{g7;4uwyHuxMt|fWv8h8-Y;#xqKK*rc+{}gb4&OGoWys1l@GEa$Ge*e2Nuk+` z?k$MeKDhC>Sq@LWd|LE9*mI&M+n@Xr{;3A}eL)KK068>cdGlvF{_l$Nzqo%k89HqC z>){=ie;xL~Q)F91M*Ul^&s%Fv^U3N{U2pbe@QzT>B$bap(GXl`;6tG`Xz-)Ch#w! zgl1?zb*jO0y|y9vTmFCFxo18JGxy!iZ_@bRC4Otz29@R9aa$HNSO35I_}d+u0`%2# zFMIw~*97sNiqyS{_%;50PB~A@L?h<*5T(d;~ zA0MU20F_*%fMDz&qXP zmF0^?u0rBcgHHrT1L}5-%)eG{3YcW8olVV)OXQCRph%6%=3UHK+n6-L))7rfHK@gG z8m`TQ%BvTXD-!1Kx>5+hV{gs~88m9diSUga+)AvL?81lYqrf*+u^4ImYC}m^OLu`> zg3BMErqzL%SNQf16*0ibrgG9CJ<`<6k_gP>xjCGgqY~mD83k|G4moZ- zH7|GiB(`&AMA%4g@j~3PioJ4+iI1DMjlT{uh%GN+&0V8%q~v*2rh~;DMFZC z2PTtzv{C_(_KrK?hycd6y-J2^g4Q;;1s{7a23z1w?PSClpdjup^psclTkzCoLtObv z4hVQNsSU7fW7^>OSi>@or; z`J6_^=1^-`_hkZUR8yB4EbT};W8_>@TtHL1%Sq<)v02ZyGsT>5Lk5}Zdvr1yEVVQRjRwQM zS1mLnQ^A19LrA}}SVFB<>N$qM8XULEhQj`Ay3u9Z&tDswx~ll+pNP_5>SLr`+@I-V z?YiR~esTKpbCWwr>XV%G&~cB27kjZ5lGEe+4Ic5U9Y~>S+D%QKdYXHg{!Y{(TRr6Q zDB-hUNTQntJxzu4 z=v&)*r}P@mdX zyFsQG3WJkux_XMrP1}HqH^t`x84!<~!2;Xfy_B{2YwNyPrZ@-r9j>E?iuYG}=anI}N>&Omc1UfiCcSm$uh)myiPJBMdhf)1yjVl;gooUQ%1PqK)-0w zT*Nk{t-JV2iBOt{f_^c7gOvh+kcU*2ZS9ldv|QstAtRLFZ0fLf;#e5okFP<*<}_kU zDzbFF$T_7wVqVb;rWX+{p>SlssUg3Paojb$E}9SkjU|U(rKLO=cb{FEO9x#ZIf$NR zEtpPn5oB2=E~iGe-(S6uR*$}F0@gzyKaT{)FlfP>-!&$6t3@Pl8zv7pzYN8eKOVt! znMyUE4LPXoaXkEf!0gWY8oz)yM_6qUS~wA&o5P=xUac&JcbY`8j9s7$Re|iBk*40> zimFqD2dA^932LrStcAF_0do~RLOq9b!7fh8W1Jg4pESzZq}%5Aray^FejOt_MSjIP z_9ZK59QNp;`Nf;lGx<TBY zm{C>3kk;6*Ng$C>bV%=eYJ-;v?S+~CTZSu>5Vn0mF?lyA(7F)-xK?=ELFP_ zt9b}EbAa%Dr@wnRN_}b|FzDL#Dy4o#6~5 zYDz;cOe%MNzNl`pKmro0|JlNTwtEZ@1ZWH>s$zk_i27AlXAO%tOaOZz`U_nvBHj+I zCbk=IKuaZRj)}`UcEO7ab&GmRH<^Yl2hs=o6YR>IROu>B?L4|6#lAG!|5hYE$e zB7|%Uzprn~iwz2~>eUCZVa5%2JZ0ohoQ(HTHWST-8km@BvMf;Nz z^Lsj3C8Mg2`Spsp7p^q?qeGi!_T>LRCfA!$29 zo@w-PP{XO8;C(kso_6fUYlW=29+ZB7$Kh612@N;9MA~h}j2?OBmF%D#cvxKe>!jpM z%}Vlqbt5^~L;s0bmpx4Vfi~ET3*6Ks`coBJ(67f*!~EL}N?PUt-np5p-ny-zDC$z^ zDlfP&O_Z;V?4;S89oTP2UO&IiCSlI8XumXXZAMnW63u9YEV7J0EdZ2EO4S1U-2Eg!q}4i%W8Hyzz&jymv!DTUIB+~ zhr`9ynH4eF9uLHzaY}aq`G}M62xtMm07LeiSW0pLHf>cAcWudEz{7Q4l0$^JXBL1bqwhzWWS^&Ua2;xsZt3!nGsk@d#}q& zir+8;aCp0iG;eeyLjbJ#pks|hN1ghO+66cuIYe(!1gz09OH}N)jr1$lwcPFtN>TY5GuK7htXDbyM5<32wepxqj#_8SuRg#;hm( zVT=puysVFpgvo7+o5=o>YhRY)GMdt}I>DkeR7T~ajtR`I1GTR2DeM#BLIxk4@ z)!IJC2v{sf&q|EWW@q0oBGhz|G8r{#WwP&}>33m!nbDE7+|Vl5-8U$t=<2ul%;eDN zO^L$Xe6T-Wcjn?=qOt@TF^-^=X>tq@k9 zvJ>!BIw%D35sZEe)(_ktKPqbR^3#-XBMfY?+u^i8d-weBYa8%_-wK0U+3ziV*ViJy zmEuX_O*Bg}c}efp{_RH@?{|9Qco_vGY27s3s(0)45PL?c0tbO9+wUso%S5Yh5-od- zTe4+HQ89tD2ds8Kgb@vr*2+eUI^srg*M+0Z?+ZKTVsv0f68VbEKWtvIF(x5#hE@og zdvDn#F^!r^Nj9n>2F{jk7B)~#uxc)CIH(+c8c&L}HXr-xjwA3Mq5NyZ=0vg{&O2Le zM;@A{c90K3XwAhtaROo-9$W5T`PcAvTc6UE{T}b@sc+9p%4$3M(*>n_nVlY}@3(3B zb}lQE7-d34>o8+k2eLUhOc)k!?pkKl=D57HTh&eZPNi4l3u{aJtj1rmYR9I4s+NC!qm^#T!J9Axu1uYcWPCL~$Z7|7gE z>4|G}Z~(JQr*c^Q^HbAmD94)-pM8CNHzCBMv^I^ z&tcsQ)o7ORd8ptiS>CIb$WHNevM;>!6It~*O-pG&KUYKuf8|cytFF#2-O9;w&Ien3 zlNR4}py~M=fB*2;^-d=Ybjp!)?O`T){d(x50Tq>HN~GF9&Awg;wHL(N>$|cq(vDql zEmfk|Xx=D14(&x_HUX$}@QzzYtTjCISw@IehVEZ^jz*`c5hUY+Z7BwBVC!LU#~=VsSL$Rd!xO;u}Px zkg0qIq;dmI2BWd7PWA0DMG|C2722+>yrrLOW2FX>PA(`CKkt@clwXx$$SoRK_&Cqw`U8ltq+DVhn0R2FF0D8S8 zZN-vzxm0XdBED^t?w8v6Dy2dv+1Xx+V&DcU9T3;-C}~!~+wbz|6)X0T4Tv)+u@L`G zDUk%@p@8eE+}K$@yTIg}z;~1*p#iq1acm{c`KJ|9h(Olott3Xh{mw#-SD`UG2WK>P z1av361G#&KL-qBAV8@EW(jEIR)%Z!S&%kD!{u0;&ps2ehBSX`Io!AFPdx>{D!^FyX zj|kHIoWdUb6}IZ%mx$oYEvQAnA6vP?e{&3>f)ENODyr8Z&ITk5eGdWBO&ae0yLs33 zsc6JjMJr7o5ry57i1Mx4#~8Yx71@sfJNRc~7JScyKEN%9;f6DPUw%f#t?JadSoMZW z`avVm(4RvIev(*Sg?xnIw$(cG5mu>s7}P2oV6kqQYSUVb{V@>=|LZfEZ)Xc2sYu$^ zUovH(a>W2reJ)#SksP4ksZr`ydA^JCigtQ{e-h;x*RzQcRsnR@E)Km2-~v1jKdQ8! zHWN6gwf;5rNkHgo#!$Oy2;LQ=(;8NT5y$5O^$@9=vtkM@8H;Bp;V2FxY)D)_SZQVV z*aMOmgR^x+HjYI{b{2041X`xGYHqNPze%Foo6PowX5nh3fthAHL_7#ICSS=ZnzCTj z20C`|u$0*NEOz(tsPe*X6t+<~!Ob!kQA|Pns2E|66)`--LXestj)LU+^cE^1dQ>Z6 zwHtLCmL)IYsbIHTx?O$)Ku<<+Sws+i7>y904zBGhA_9S%?{k=To)M)~VHkF1I@LYn zlOPK_;`zI@vdLuIH}n^_D7-6 zK&7?7Hg|oXkj$L^=M>%0Y{%-&A^{S6bz|KNhe+%O^LeS8ZWqXUZsZN}m~~iT!#dHf zcEZ@418ArozE+Di@TP|2`&oUgD%iflbkGuV1EGM7d1bg|iMpJ0||k+e1D7 zwgl|C@6Z%pa1}@u$!fnQwH8h(_n@2R7FKKe`}JN&($j;_U}YNeGHLpxMH&&%PlLuh*R{mPNX4K-SV>-TJMaA03Pq66o%8Z?e$G$G!^0V z2vO(Id|TS!NO{G!M(&lrZ){ZS6eu(-wt6oH`VLQaPo$Mfu8;G32`j($7Wokqm`>=z z-ZdaYzh@z=@hTvYFCR(wYCA)B=5pT$3-q0ja&8CabzFR*@%;IF!o+yg&6EZ#P`FO9 z^2yf-9)TwAn=fZwr+n!=9CNphIS=erj|7A`S70Ahnm4uIAoji8^AS{2&!|uaWXzPE zT)g2rHJg6K|89bw!Lv~e`ejf_8D$5^b~2|41)bOOhY!IBtTq~rS$ z`lcJ9TgX|2GK`+iT{3SXs_xc9EKbb7RPhWB6zd6u2Q0&@hK7z0WY4km6*O)jPkX?c z!9J&D+3Mng*{56dja{%_xh$Z%dloKQ_(eA{y}|l*)8%<-1FDdI64~$o)a&i*FE5M} zAO$YK#xDGhpF;)h(Y7UFbUpE%N+%{$H5VtQ3Ri0H4NflPJnLb7yHb+ybC8h`zi*Tn zCVZ&C(a{MK>*}?fEq~SMxk8NWe7VS@d}fh}>Tv0J0;@LCjV?LW#sPm$_d=hs^T7bY z5~3U>dH}+U(*0$%mF>W&iFVY%j_-P?625LImJIVWu4naxbmB0&D4O`lLBBa=H`rN; zWLBiW0|FrlEA|sv#IXj9IK%kj9sBDubSIld3P4FTtP_U2>ODC*9K1La)`?EJKX#f` z{SxtFfW6^jz+Av-=ss$BmZ+4wC$T#NnIMcVc58!su9_uRFA_dM9mPMiz6|z5+GgtE zsq4P8vAbyTFH14yUxE9no@@-4GZROB=m_l%Lx#R*yt<~4ih ze{5`Q&5J>CMDipu;?G7S@uRvc0ch>G3ffo2>yN?zJnibp1zw3W&Otp{(f}F z6LEv<#Pd!h_`_HKzG(!HD4}ch|FK{Muh6r77BrV07FIoO3?*71ay|(u%RBPWDJ)!tn2-%>JZ0pA#S8h$8D%en_ zx_N%l(DJ$gW58`yBrou&a|_`PIZM*KANmCFbqo{A zP+@fNFUzU5hW>-;6M?9cf|3(4@M_(0ZG9!H7-7T@0+#HABrKgz^6$h^n*1UCw;04r zjR=qmJFE|LykC!AB<_XZ^?hv5iu!sf$GFlxyR+z}D%1Ng^G59ZhZkhS2e8hCePag= zr9yvdkvjwV^4eP3ZquSgy~N#)LN9?LzT?f6uUaEY9DjFPIBV;?k2z0>0imidaOSWh z$hu@2Y)o*Nv`)NKtvwY{&KC0d@S=TEYdLs4tzeX!$CR}+=`cC$bD*0525E9FVwuvK z_#%wq%y*Tb{%Ym)^**M!h@6fjS)Jl9B@7h#o)W88DWEne$Sn^OG2R+x&A(=LP1I=-mu#&54)S_SlNY@F&z1^KIAGQFkUSb!h)F zEzQr(iq2v{2AZ+gr&rN|Yb1}lp>>v)m!;&>HDK0LD|X$xOkoQ5G-Xalq~M4+|61mm zecsxy_>b+*f0MIpFe?SE|3d7KwWR@*&_Af$`a!bZh_z0;(QDHQ%wEw_#r0w=!^kr3UA zHi3@1A~XJ)4=|EJ{b0;o(ZgHH(84JZ#t-l9-W=j@u;dTiJkpV6-M>~NiVf*fn5rdd z&%jPL>&sWfYqq%{aOL0%K{hdyX}Ofc6-!)ql&>W;Kt60afNxURD3e?Iu#<+)JQ-Lm zJfN}A?B9S_fvI_kM;Dqla*N(@KE;{z1pyKo8Vq8j5syyW;oA5~GAHaIjx&nKD zdxv_<6zgaWW{2@nfSL`yAA%vbJx9cnoQQv}&vW$WYNqs;3A_O;dHBo>Trca=kcHaJ zTHV|PCGol6w80^_r&6ymQ+4kZ*i%SJQ65A_R@>CPu^nv}_|DWR!o4tpj||_bePS}} zyOrJPg`kxpf*L{jeR{wb(H=J>K4VaTV1fY!2+}CP;70Pj9IcwDJBcsQkqK>jWADTh zj>nBg`&f)F3P*2CxHO;~B-C{M_DbY7rp^dFD-&=k5t*G`g7D+r4 zl&QQUb_yp)~u-pqe?IH^yot`Q}WMX$JOc1n!tv6`$Urq>!WQYAqz`VHY;5ZoU0ZUzBpk zt!%mSQ=#z;8Me>7gX*BFwWkS7FGI^$lN|ep_L?^bSj!mOMLJ%01&S1!ULX6~Kvc~K zfBojc++bCul2@EyXvq9UZzceaS{;}mVD8>-d-JxN6fbUpjzfMq&tAM~Zc2CgP7ZHK zL7uDoGO@kx{12~c4gNKePHn5+=k=5=9QQE#txFsPSsk03kK?P;i%Yszf^;Gw_Px}l zq~7hzK6%K=0QqY)D2~ zbjUf7{rY|~e*uP4MfN_pjwvMYpP@7tfD|gRKtZ>jgclWP$?L+`u^Kj=N~;_yvMZLv5iFa-B#p2N#rZj)>g5?G^nxL~iucy1*)O$ex! z@w;AEy~5(w^9KjGQ06l@g5ZD3E4G?6nuMGeJQxX^ZDP&rmEbUI&KUICPt|x^uY*7$ zOS=p-ySG$LFumrjTI)PV=xCHnj#>MLHwDLjb1yDvW$n;<NOvRDtNVDg)Uu(Z5l+5iU5?PDEsev8Pn4o*ty=lv$@~J!pre z5<9%#!HQ~B$ePtqi1#JF1dFx7R5s$Plm`w1!eVPU^XEL9v%R%_y7Nmzy6|+C^r$la zmNdDhy?F_peD?3fs~%hJUl!~yv*t-_EN7kbY1xJBGoYVY0D(H^y7{BrL88D#gI@Cw z9#tJfOFlf_`_|M}5|PU%b(^H8--!>2^7i&qkNnh{`k`kWPp9IKRh#jDVmmeo!5Zt5 zUbC(#JFe0@DPW;5c3M-1=!>*#9gD9_-mqTXmfM0qUc$cXUd@}NHjSu!;u^LMA9K3G z3^-~61K>ke(gH*+8&-tkAzw-LL9gRaM zf;o<}rp}7(%?q6)uHN&W_1Rp9+~;V=&!2zx&~C@$pl3cBh1~H4$=uQrfb=z*wobp@p&Ik|CC1qhCzHYdBca`j*yYjku{-sx_vzt zeJ~;D&?wx}^0^hii^RenFzQP8j>YA`pUiETXhi)Unow!KnwR@Qo$C(mR}MlEOay&s ztoINDk+7844YWM&{Hd8nq?Ir0(HpE@ z@M~=t_!{Z7WjxM@w0(()|JR<*c5as-{5NL7Q_mMZd0m+TRCVc<3)ZLRt1UPl9pMmo zj+b~0K8YI7Du<5qE`$fIxGJ3h-phM2~9_b6qZHzbJIf5YCOTJ2YDM z>R>h>kSlq;meAathF^%ElaGXT|Jh=%=T0 zcQWspHZk9T!i^wpV%tkApj+lF`7*I*+g2IaWs~>ynk?PFPP0)5w|_AN!XVMCzBVXM zyXb6`lu3+hO$lr?AN^u35HN7-+JY9*?TVYH5FDi9X0KQCN?L*=HVz#-1e~j<%dCND zf8f}!9#O}01a?AVuXh|bVxrAcoD!KikUC_o`uxDOs<^@F=;!?AL`B7ao|G!F@_pJ# zJWg+twTa28@&3Tw*k#E)SB}e4$+Hdxqv&)~XNh)0GIKC)ijr=LLx`kiaPSdbyn%yP ztYv!dqdI8G&_HI}=H6I>#cn>sv4|plWq}@{T#%30!Qx=(ShdzpD>o(GrHRP9`WMsD zs|V2PjJG4&_EU^Fy`&g_M*e%4>W=lAY9zHUH=n9ZWo3&tEEQ_fI)+4{P2o6}WATFu zqw26C@30=$tD(Ot&0gnT{I#tQOA;XS$LbPu*I>l8R0dt#JHBsOyP8r?Iq``N$9|{> zT(>zNqbx@ZN$lqrwoV!Dj#e210cS1ivlK%sfPp$nV$V^e_?bRzVxzQqKF8J6c~j~Z z)3@H3lpz68ikm+bSWAkWU@CG08bu&P_GndVPe=dZOvNr+TvT#oal8@zr9mwhyi@; z?k?wE36j7uOWK)D(yuG8x;WW4zP_d^$c9aV94QR#CWarSKNzt(hB5T1e#61mKu2l` zd9+Ro8{pHvwgu?*3Q&>Jip<;LcO!|fNioQ`zHL%s1XicrbMY1!S|X zCDTJ_m-({Rgy_SAJa%u`iV&5nL4qX)0K~qWRfloJyM@kA3YVkGO}pmOcC8%$fL&mN zFT1(p<5@uxqLcuOJ(`rWWQQAh&eDOyb0>OIm>-tg;U!&B@^Q~z2oPBy>9B_83yz&} z09VQqdq{ehY^GcVJy6U1KxC7nL;{X({?PjY`+4+DYb+<7`7E5V#8lxk@5OaTc=wm? zgaY&n7ktb^0Y+%sj87*!jI;xeKmUmAY2nqoY?Lh8=H$M8W z9h$Sz{(}?Tl3a{E$zttfh8rCQUq+}@E3k3rqPkrgo^^c&!>b|eHi&^RZnO`_V!C^j z*XyC*8i{K%Ao@jdk3mWnd&Vl-$Ts2d$qp{+2Q^Mn-6yA=57cko$h^4r70naA>kc~@ zK7K73%PJjQ0qKkux;)frV@1dDBLkjR`u3hoRY_oa?nGUOTVAbuUURHXm&;ciVHM%NZvqm1m>%uMvbmA$kx zKtzM3gPR9KV*!VLZHaAVPA%J;W;7g=}4ck@V;}o@QLK-`K#P;}sBU;r1a#QRb{rGq_9>u+I zQb+1`#Od2H7dK5F_?Cznt90(W>~X>lD8;R_i+|Njk*Jele(>?W6~@@|JTrmwqWvS# zbUKc=K9hF?Z>#O!>FW`j0S#&5N@F~IHr=lycvW!{a&|--CAW44riG<}L7fjHIzsY+ z>^GE_laKs_od5T8Q)jM-FlQC^Sosr#uRHrU$#HEN=Jti!z3H-dksyrh@!{wk@&-5 zYDhJ|;(x73^0BX^(?o|e-_}<}1Ro7EJcX0B797zc7Bebhl-EsF>K{DG&vgV@kdUKY z9I^$x8;E=)E__E2m5&t&0HVprq%H94iYm8%x#HrdeNe5ZR^!*?y)k2EG9HSpyG)fI za&U=S)2pGB0V@tRNJ+ry+{4m)R9wU=3H{P`8~55c$i7EAB47~Qob;r!{qc2wd`G!- zm2x_v3PsVc@UEV^_OPT(O0BlmBfu!SKw>uU*s)~N=8|(>hs9e}M5@JZK#q;)N(0~F z%%wn^_Yg9*Lchx~RCJtHR9{}yDe4t;6<}rK1f{Dr+P57)Hyw`#cpuVPmD_l^88NwN zgL|PLb`n{fl3t}xU}Po08OV!tNdPM$AvuOV?V|4Io! z8}?K1qRYXF_N#xW6QpLbYRM}d`mQPCWBi89y`|e*hf5nMQ7z;6AEH_`NiLUhe+bHTOYL2Wr(MA0p6rg9 zAW8lY(OtU-8jaD-WI)@df3l7Av>ldz+C~o4ze#BFEfSs-iEk6Mtm(8F!fCay8}Um?!sRs@D?8rR zE3E%lnz`{mG_!F5*sxep$>T@*(wedn`S(ikc+P7Yoy-h8tIdz?P3?dd8J5*4;xh~Q z@BXO$#4VqKH?*Z%`3r8?`f-lfJ~}3KE!$Z$hh$}(OW@X(m`pwYreDiH^xYX%;5^9I zpp3n8q-0BGsjiEOW#@s{Y3Uo^%sr1GK09E~^_l&A%}Y`7f>r8V3vOQ!#dkwl*K?Z< z&c;)Wlx_2bWwxm3Xd@iON*TOv-Kkilrxw1cVL0pMQn1hWH74X%1_V7 zm!4&RptI*_&){CZTnRgpY}cy+pX^l8evxs(Oj433`FIGtkMd1jws-3xyeIz8YMz z<5&(wdWXFJ>YXL41To6BZE3TlanU7ZsCX5ASj;?gOwSlw=5q>3kGugY-^)BxUCmd? zRIaw{x0X+wja2GUEZ1z;@`#PdY;ZH)+1$hGE?A#2F84%l9!;}Fl(UYU-+tr*KJm_u zY9f%YEQnfs@OCyTM`ii52him3=_J}IUAaTve3?nRqJ2&ET(#BHv*RmHpmqw(TjsBB4wSc0Ai{j_ zt39Hs6ky(tBTKL8iChDg$&s6-GR4FduFQDHIH(P)b2w{C%g5Zv)M*Icu( z_38xg6CNt?zr6q?7d3oQt_1WQ2x8Mw6N+KEvKCusxoSaM*#mR&VxQrW5jUvm$CKwnjcPxU2fGFqnscv$bEGDbnk$F{!=SNav6A z_9%0NCei7jAKWvM@(*T9Ok?@Thzv#?qqH*d;o<7&UKt@G~2sS{;Ao~B*}rLBj|Ur85!exT2E z1ogjHy|{fa!VRW83nnq2Lz{}1%K1^whN0#9+?tQnpQA(N+rxtf+%D6~)(tH3xVR00 zaivKkWugnK^oxfew-9{YP>4jc&mRYmV#$oC!=(IL=A4U%MnGthmH#e4J*Sd1ZyViN zyKJQh8$vOXL4d>Z^{vOoVMobI8?!twHhR_rE1VB(4xGrwwM{@so4>9jrKN52myc4x zAJSoAEqz-?Nk(!Lr0H4KbV5@dcm_Uu0?ps2kyaV=aEYti<=_trj$*;0AVa@!8wY$p zX5i!}nIUyz`tve{__gu(sL)!~h$w~DT+!@GSe@hIme(kwT?V6D{XyIxrA z=lUOiREiW5M(UAdT~g~JAhZnoGKISjq@`_cju0{s?$(j0-QHpas#QzNhX`GE(9Q1| zNgA7G+0phgs3q(X;(M2b4G`s2B=EZx_w3|eN)fHE^xzIunIAC4nr_*;7?*HR!v$cX zh;Y5RpXl*f)`l}z%*ZRPIvO&*S=5x78X{RLC}wxAQb*(_o)BuHOkgS_ENB%ieDQ@a zHqGgrrNYsIjj0kB_vIgKU-B0EHX=+Ke_xTw{6Q+5C3s| zS&R#f@9n2Cisj7ZcN*y%RR_BLxaAoB4{rm&p0x{>X5MUfG3v0=!yf$UW+Dr}RLm~u z?VGXqg5B0g6yf?sy;+KX*cLZ357muSOTd{4Z{BknBqwy>$&`T#Mc>9U?39;`mZC5@ zuD`*MkecQ3IX01Ioa;oRBX;K(h4O~{Rq4Awpx!fXuU94Px5(n$`bC1#*YBZ1(v`ES z<9&6vvq1GI2wkJAacI=D6VCH+(uovz_X1w50!GOS9A}-N?%v*$?tgID#y@0K1sDkp zXlvWnB#8h^31Z0rQ5MJ#5=$IGw3a9V1n0n6WV41fY85e!R1Hi6BW(7jo-T8M=Q(XUk zd4~Rv3EPmnFD|!CN1kPw{pZNpJ@FIt2%67YgPWViiODYF-NqjP^mi6InFu$1mH?~*Cx>kEJld;i$%l0J0^HVFUKV&$(^m-ghQDcWilp@n6Jv_Tqly17P+A#P` zVy(-)DH(%Iq%~!5dT;aH zLE_#vW*-t`|ASs?t(i4DVbhB43A@{9TM-Gh5y4Lmtme%E_o>oJNTUO$0Wtjfi>Cm_ zLwNP=KlDdcA{i^Gu@XUr$0{@o^c+}#DMY*eee0zEeg}tpB}+^N{OqRVus5I#W%PoFO88~%gvZ|Y zV4Bayp=u@m2utSuMTpLxUt$$FZwQ;%L>k$y{tl)5aS2WJ)TwZF3Ey`mdntz>$g+WE(Dvt>a2>hgN?gWBlwJnwtgHh$ zWzA@IJJSoU->&{Tk^>>09(4wT#FQ%0&2>_YHDE8(mx8{WRaXb=1Nc}>ae)X!89{Pg zm)C7YDfvD@rG=Nd)*msaX4y*h!CJHFenFp-4W7nj0If6svr>W2Td?h751M+sDjr0D zotJyuq@cBi5Qn5S+bGi)!JQ$sM zH7I#Dl-f@tYA*4)(SZ@sn^yfL46TGINOCfi<4 z2K8%k8|nk%wd$G~piNL3;Rbf&Tdd|#R1Q*-aW3|`oiwqLdP)1t&guiALek|`%3{zl zH;E1nyB~JiX@i7TxM$=N_%-S-@=mJ2?6FJn4{zOwIJNI<%oYC+dv6t1SGF|lCWM3# z+}#Nf++BkQcXxMpm*DR1?(XjH?(Xi+zv%A0chmbj|MxuS+@3qQU@g{|bF5KSZ@o3Q zZ?ns3g#^;<-ny7hl^H@3-YsoI65vkwA}uYK`D7T}RJsv>{IT#)27IhYR`hQM+#Ok- zF0yGEmD*18V{jb{HV{T@=MNI>(%~G0>A(O0o*J7gG%L*?NJg~|3%0*vTGrywXbONw zxYoltBzW{6axUQ9zR}(SST(_OQ{^coZ&4mazM`!j918{NF9ly%vn5YH3y%YJ3~{V| zXXGKfLA?fHJ20AVqhtR_h0Ls*at6b^rybn1H(f~}P-MjMJsboxiec3&cmCw0PS^F`Sa1}RAr(@j>>C~1b^M5eCB;jsnEP;I59 z_xR4`9GR#Rf6NG!_SQ_W*;W#r@!hc-#@P$1oL|!ZUr2ZD^zi?VbY+rR20}JZ!b5Re z`)9t($HsY+q=TF$i(1Z zoe#0wY-K$k8A)_0Qv3yK>6Q60_(RqBP14e9`L*J+qQAQ^9m26PUpJ1NMj;a9<2PJ3dt<%7Ek9K5Oc--FfPcVqk z?%08)in&!13&hkiwoW7`+C{xA6sA-`f&Pi~o6fvAB@F2NBGX({lw_1SQRf4XIA9(YTrTr2f0?tCMywAKqZ)OXktSr3aewhoV}#F`0UE%JlxEZM$5O+maQfMetjYlW=iHdaU#fE0&Y+&DH ziO>*NuCVH53Ej5nQ@`+`uj|(4a@_ zaoA#t#3FKpG!E45JTwW|iuh^|Gb;>>;u`h&_!XKqe8oR6Hg zM72IW5IPENK945`oR8lFy11GW_KHruq>NbH)T*e?d4XI!04f=X~X+QsiE zbuC@jntSLX4VpL+1OJ8*;v~l!a$HFVvGF5o2|kbgrgE;SMPQJWs~-(YL(*F_0jz5- z?z4R@kx0{nb+aPP_OvR~{`^_YuR0X3W(7!*Wour^))O*~lUqtH={Q62a^T-uq8DOk zO}cA|WVPZ0Hr{1^>vlX_>RQN|xIVbFtl(U9Sc59I%(b71N`7@N<(bRKiT?>Ioe+&Q zE%9yi(hs5Y(}iL46&}lPTKp|{HLyE+MSDwY>Vo101Ueg)5V47Ifw|T@&({`GaoS0X za$36v{XwcE>qjdzKb<7QuO~$oJ-%^a^kvHU=8wJ~+@Ij^#}426O%G$k;NEk) zk?-OZFzNroq=#M~)HvjyoTsc+Tt1cbkMB9w8%flgjf;f{DLpx72bU_A{y_kAQ`4yI z^EaS>u`dUYlE2Kcp%%gpZFRhM{{9yGWw}J}jZ{i1)o^^&QW2SwzME=1Ych?aovxM} z$=c|_->#}MT^mwu`6`G8wbl%Ww0$DfJqHUwq{%)pcuE^dK8Qc)u*yoNg)8YJ?N%#_ zc;m8^$buDqukpXukN0h-P(F1BQDY+tg7GC@aO!&x#?`Nv&z~G3Ta#?C&2(6-!{MRY zT}kWFP-kt=~J>0!P+A0#5K;PY9Tb*fXHuC4^A_-kxb@-J&;Ms977qi2?72`Kj zn)U}Nz5P|I{PjdsAtQQgZS=Gee5(e|jn_vu@5h`35d#+t%VAhXxk{$qt);xcA)B1q+I>MbTtXXQ zT5`BQLF5Jb!x8l3{j5u2lvKBWf3p!ELT9_hAO5&g774J*GC@*9jOm zxe483rw`3-wj2-%@F6={LQp;*Til)>I~N!a@h5iCDHiJ`t>?Ee?-L#pT<}x@5evYX zYm7}@oa@?@cFPe(Eg)Q8iGhKQ<0G+n5NwbsM1gbFTba_{6A2*9zc0t897^&Sb&JcKFunZ31|>1*LUPD$rSzRaJytf z8!EXGmIywlinv^Cp?w5^qK&4zRE){Uhv%ys#|O@u=WWY)$^D`a?0cW|Urz%|Jj`JC zp5HS6XQMupcWs=Uxv+I1hnmCe58!`P{|a>=2Ok9HpxGNyqR2 zlG0y$HAjISt6xTi%y2A0D)LM=K?8}+qQ=p)7(pv;-@+7{le4{uj|A_J{G4QVjv`%$ z(QKRn^&b?PnCVYnOn%e3luHvHSq^vzpeWMtY9*8qoNE9KEbo0hp4vgT>gvl2d8G2l zu577^FvxiG>}W`jNieuwNlrs;R$-UW0Dw|vBjHsj94Hqfxr0hkt_(7QU+%=UlV_Hd z1Rdr@esH{FZuqj$BR$4QIvsrORAHfPp&6Aq=tNE1X?4(C$GymqeBq+6X>ao2V(=3r zP%w=Fc1#TQs;As)=w15A38cdLzuLSKWB`Tul~V?QnU3&alo^5?rr;s$Q6*CYy01XP z>vV>S;}|tQs47`QNd|o&39jxAGF7QE6zi|)|E)e?%v6!+B0YuP&0=|Fd5~l-7HxVz zQEQ9qntqwmz9+(Bap3Q7*laST-w+yi+3oyFL`~SgAX>COP|W4)YFu1GC_S zxBwwF7h0(rf~E<11wL9As_;))_r(#J9-2$FcebVDKWgy_ACH^AtZ6xsR`^AjU(Z1E z0)O{iaqQrtN@j-Vp}zak_@RDKg^ItMh$FPXDs}}gzde;Wh{>xjRiO*gH+_xH%YSxcCLz5a_ z4=_ZH8v4gyh3z*&r}cPL+N0tu-vp^fXWVIJgw^JCJKT{h#gE5IB-~M>AKH((1JHL@ zB<{xL9Kj|VQLzvjaC;6Aj-#cv2v^Cz@Et2y&8kKnpp>3kHj&=qAB+yv*BbP52BoI) z%G9V{YJPz8X$af@zmd;>E4jai0ZMK{NRiVn!HDXv5V%$l`Ob|gU$au9F7=L0op!bQ zR9?7W0P67#3QGsB&(!F-!v5?A#A3kas-c@k9Hrc5q8se)RUnCo);hBxrQ;QI0-|sP z3IrRK!QKS_(%hu*_OJUY|4x|C~QuGtAMcM; zTM6Oe`_{X}MA+vcKJfKZs#e(1+ia$``}~GHo9ReicWs6O)Pkd?Ane!koJ!MSpYLC=gzehIq#2`~{}rcS;>#>K(P!r3mZMcX)6J>|7!5KrVpVeu{ivupdqNu3o~NR(nXp17woI?EduH1Cg>0^GJX-q=)Hl@=hH z7CnmK*D4`;H?HoJ*=iX@N4Oyvtk}1LJvgq<5}C9AvSVg^f0>N-66jPm+IJ2c#Y+*`N%>}Hn zh(ni7T(B$nZDMn?@aDd~C4NNkHObGXzEmx_b>6w|$7xfNUbUJWJoaS+cpyY|osK?P zJ0`~m_+k^7fR~+NkWs*4Mqy9jh-fn9HqNp)ej?EU-|m@W+$@@@zk!Su$d;$orb=m@1H$r{`Ip z9l=J$QtRE-B0^qXOTZ`zF%0hQ#<3DS*-w=C+8;3E zsXzfO`tEP0y7ffz9DH&JUH1gB8s z*|%s1-r|@xnQGGvGEPEDNjPo8BmCQlHJPDB)DX#V7JeA+|CJ8h+XAqa_AHPX6 zjB9G3wX_a*9)>j8#5xjQPUgzh~&k$TH;7T{0x73PqxvON#i(anxt5d znFt7dgF8feU^wpGrRI)D4f>d>kdwDt_m1c6qKZ~;n$WZIQgV3ZnT^~uI_vGnd_9ODI! z`arhc-mXar-cvUA(GQuDvkA`SyCSVRTxUjg3F2y>+C^da;gE$&i8`Px7d-J6g(-nw z;QD5yI*ZkFi{BPR_V4v{@5!^KR${5SG)N?BfI_-m{Whpsm$$eh(>Alj{7oyPZo9y& zZ8kZ8_Z*xCIYNINZS{-)@Aj(;IB34X-JT|3r=%eZv0+gmw!F!&2ju=a4^u_Sclxie zdV+C}b*Ij_+y`5A)%ndNKZ+`DHS8>-3I&?-T`M`}qhqDdAN4dU!FwYe_`_>W{FRbZ z1O0I|p)k!i%iu514I+)-K zNwF!e^fzER@~cu-F5z&lb5=sB;0;u=aADP-rYeIGJsQWQ0JL;DVxaTW{?L80uoz3d z&Ag3YCcdpud`OBJTCEf*3vq-VD|~JIAyj>@-`BYRu`Oc1?!ly%GN7B?R-taqS@GIH zlt?dz%UprBl+B;b2D(M=O+bR9PzvDkfv6kbnS&#Yc6S-P2DRgG6?jN6u`kE;sw#vC z$-!g&0Q2npNlA-4)JZuPM9(CtVmtqh4%)&TxreW2Cxw1|R+UMMsG5kP&|4Qz-?)rFVRs`7u|8ehpmCY5c1-tK#mBg8Va7BiCKHjs1BbHieOdYmXxxI)Fj zV%jKSrRBd)_--`K2|#fO1oXJ?I#*YC(`dkh9)em+%C+pqbBQVyCCp!>re)ebV*>L?Yd!X&jHZ6w~ zDQ-goZa2Q4s~#1xaG4Dm&lM5^awRtZt6=BF5%Q~GCM(2u8_q&*fIh0cmGyJ4ULIUoO zDk7&FVH@6rixmiw3-teS zT^CrZ&qv#;mTLy&EPUvVGNfB`28i%}Cvcl|Gf~sNAybR&v%8LLWb`wzr+sU}o5K~6!TOQ}w?VesFvRM+NjSl| z^dJHajFZ4`)>uey0WH+vaj24AVMlFZ|_)h8&;!s&Okoq3Hnp(Oo~{l4=9(g>(K3ttudRT&K5Q3?DcYYbI(ts5sta;Q+WlRuqhr7 z6gNL13Nd~~iCJO*vufc0>lZ8PxGrEgbM{=x`)aZO+2qW8Vw-t=dH?d%o608f8_CVU zxy`i#!2LA8RNZ2>U8J@y%LMqI(iD8~dKl(5-HU4wA4OAm<7GmgVv;CN#pS)EUXDlItl%qKmd%8{o+(`=36kdcsd>mP)vd6~9>TFyDa;d5cY8mDwF4-a$2> zZ4!`n9bcfZQA4s@D1|909=o7N@0Qz4TLMFk>+EQCg(2hrp+|a!F>vwUqp(I+pugY% zY)0LdnN{cgQ&Zqa@{XQnJz-VP>A7fH46oM4dGYFu*2fh(j_O^gobpDm<|^n14B}8A)p)+;Jj#n1c zdlL@YD_v_RzsU@XL#ziKEcM4>*)31@jFZuh8E?sw*goDR7L{v@)GY9>;!yZ~>bQ&n zYIJPNNu(6y8b!wlA-?Dwlg_n`oUiy_Lgk1}$`XJ5SEW#8T7$_*6EzSQbU`JsG9#Ic zGVvZtEN+nDu7T!VUJEkF*1Gn2E^F!&+e=m8x{#4mvr#pE9nj}9GbmE)5}k9i@=<4` z%w}LgNAv9a0W)bj>TOeLy|!#5i}oMe=X&33dJIf9RDT;K)}B75-E1Gu_bC`t^aEbJ+y3o3>rg9ON%Q7ACqf!|4Gt1fSHE%RB^6~Zcol`c# zZb55L<>%M7urT$afOvm12!Oi|eVtcVM0bhGk&a29scLn4In}URE8oOVfldfI+(_Yu zwb6Up`A1w-)K4?+irLSN$n0ghr@6pF!Zw-N6>SrR(YuU?#oJQYhbQA{<1bhT>j*tM zj8-x;O>d#06m94ewORSYLcVBubT=J*9%cW6$=`GE&_d7q#6~`N^Payt=S}|{a87j7 zExMzaDi(hN8Wwx3$9l6pe@*wQ&-~cmKqpO!@iNK{(d@^kDyL&`t9LWsth$%qg-PO@ zjib11{Wl~OKFp;fS_uyUHapT@K1Hq&liNHeZ{M^V=FeJ8(H~{5o6^lL;fobko!N$*-`8 zn>8wTG#I49Dr=iuJ5`_~Apc}#D&!9ki1T+4_-wp;nnbVCB9ONH=5?7`!{fgTj$8g; zaKOS7ZDV6*%iVd&=1WUjY&s(bL)4q~hicX>vp81ozk|Sf=vlOH5|Uv% z(g?@H`f{Oms!N*4NN@}$J@?;uPZ$jgAOmpBJytNNRUOo57`@lR8F`D9B)$FlG11%C-!5fs?X2PPD^kf5VV3skvcS_WD%u}gX$I6 zFZ&G^R5&PDDT7ua^$%oQCRU$g6dEc8=&EQLUbRNqOsL7pIY)BM@*51vPkV249#G+N zaMnZhPi7kbE=}?_YWm#G}83pB#!qo9Q+Un9fnQnb6!bV@kfXzh+$ z8(eJGEh$XLmvnP5GI{v!|UjMX)_cA{wT0E+wZEx-7H$@?yDNuz)*3kat?+*&Q; zXSd~t`03?LdA+k9NA1k$Ogg)MmJcv8*Urh#<(u#<>!u*27XRoi29#j8L+#tXn=S_L zVg^~RSm=RvE)mY)vB=O!ZkzQOveYBn{(_+MiePLkYolhpN{`YWlf-mzF z=aw5EiFtak8S3kv`nuFq1)svE*OYub;J->nH@4JTrip8P0u<< z3Pr(cAz3G+))=^Sqku+cj+qq(i4#_Ep1ZmIyJ^H&DkM+?d%Hm(9$s&3BIUS}XB60> z4#S4#!?hCq_@K>t1S^YEFR1lV2aZm8h1kGej%n0x%?9L@C9IOncz!We{#izVtT_Xt zSOc9JZLr$^MiE~$IPZIXq!xFXGrjpmdw!WzBINF_RVhmyIFfJ3EDLZr(QUw=8Y=BN zV+FAFbzcm0n~{It}X0e&#t}xch_?7fe=&d z#Z3Zp`EETW^|_0P&U{{=;c<9g&?maZe0o5#v5>6+p_|rL7Xkuf1OsUU3<$Km?3#tfnPE^2B=H<-?10 z>Hx@A1K1x;BM^h=w>`$b#!}gJYE>@J{&-U(i%fQlxB(*PE<0ozX6%dW402+;hlD*I zoH9SfRdaEsQ|0>R^=dq<^GmDTGRd+fP92MmzifmTN9!qd*rMnY0*a!@K_=A!=5f-g zm(hpgmt?Da^#I@nk+!E+w`19#T<`N%j~4DUz7r+q+A3tV*@bQLPK&Q#;5-1bc-PVE z67fs+$PeOzA7ENe8&UCt3ov~CqH!ZHr4PTE9z|gKqv7Kx!r|OO2vbxt_#XvmF%Rf zQK8qT&K?wEDLvzzYB(fvwOy4$^~xm;RZBDYZvCNal`^K6CcNbFaD=3naw+g84Rvt4 z=~Fp1PO+*c;?V5yKP-i52Mveg>+vz-g-AEMhEx1~v66xsPmys>KP~HN!&yNO%CQAw zjw_8aD?dL9s-ympc+@M8w9cC`tvaSXYId>nSYeCODWJN?BkHh+Vq!ktXGh-l#%;4N z+%^)oo-#Z~Me{;aruTo;=b3T69cL8s=Qb5rZ=ARG?HP}3Av|5ZUU;-SZ}?>IdI4Wv zR?^GSwJ;q)u%6!ds8pf)z`6%__T(fQ+eQLvFY1mMlv1fB_U>ZuMFFGoYRDI7@D3J^ z^PgtJ$pX{5YgZlu6!{*X>oxZFC__tmL#b zB(2TK@PZ|?1@Z}U0J@ZP^STN$!TfV=_nyVe#?lV^(mZ!e zhusE={W$oo*5n9eI596Iu)9_n-tMNRp*pX*OJsx{LP$sGww;LB0^X+~-dCiVDKEDW zHttcMaBk#woPAt&$J19mWm*r9UUxl>`i+L7(R?HIlsxS$p1BQ{V}}wEF0Ed*67kcZ z06o3EO1J>>Ls$U>|82e-S&LOKBl{U{kx zBEIha@%^G@%T_e3f$_odNW4Uh%rh?=fw*!JBe+Iq3`hbgID^S+K-I+x1A`_k!3 zMEY@MNTLK#Wo`cf?Pi`_6`g(9|ksXa~Z(7*u7hsvFach?!dl!q_=buL$& zJYV<);*gCDf2rln4o)+MP9nS@Q>JlfYJOpE`f_`T^m!%rF5}Eo-s^x%)jixU&~rQi zait#g_e1ca5$FrHE9~{vP?VWMWr_tuY;yZbvQwGvv@LuBHLjY)n6Hzyaz$Ig+vdbzhxdx7)RuaGfV-iuee_|SV;?l8?DYdd*p;^Z@d*|7!C!~va{ z9yl9n;}-$&9DxVf1JWw{-G)(#2UY9^r4i%K7u-|9vWHDeq(@}7#wrf_{9r{u44boV z?E7;t2y+dL%d)oIRokKW>gR{Ksgxtm+BA?%KU{@-Eh)`1ixU@x54<+h7vT;d1|XY! z9U87Plmh952C>VJq<`3-nP({mgf*Vo9F5^kC=O2P^j7FWr{1B%o+SCIopP8Jf`<6_ zGP}UYhwhJ_aQYX|#N|Vy42GwekwyAd`{P-EF4S8Zd@&;-AYk>4n##UAHtm(@%>1(9 z;na&txE3)xi^XnTr-8L%IS-Qd&8)SmZ^rGyTVH7)e%qCt?iRWWU?*(DCfxP`n$)Y zUJNa};FDT0z>2)?-+E-%HMQPfstJ6OC_-2~bn$r$Y8CY?9-KiUomAq)iBV(_t zI=e{sAz{U3H;s_mz)C1$M4zA$JZHUqfxttTfO!1i+(=s8e_V{C>?y%F z79Cm0Lb=-~IPWHk3CgL6l#h%smb)8%{f-$>zJL^Z9@-;eeAQ z0MfXZtuuz6AxJhh{9F&6s9@qkSL!q5u``<8l5U*d2|pyF5#Ot!S8ME!eTSgw48*is6vPfvX=(zAQWFuR|G|3;M_z||_ z9_XaPOUA_*UKZSB-;iq$8C<{&28$70`+AC(C(Abl{B_$E6(rqdeuOR{G?$C5f6T0o zHQ`<9yK41x(RY3F(BfA>+rl|jI~lsF3mt|t7BN{o&U8T>I2e6!2xvy2YIvEGcGq4l zKa(hBVo`o-?^&|RJ*LqLrvnbfhpY~isXtp^d1kd=cN($qY{K)1fvXF$3XB2M6nb|d z0Y!eUG$(UP%;(Z|Mv@mKwFjjizY59M2Pde#1Jv4-G92;7MxhWat48sAGr%a6-35W# zXlcJ>$mt_vVlV)?H2mi3uTu^Xj3b^ghNa}C8&dH)=bojV?;aM^S6aNvau5)!SXQI~ zz1y0$2T^mu+hO;LMyoitE}`vT4Z2HjkQ}NnUA9xb^II%urN;n^rc*z048p3y^uxe? z22*BPryY?Am>5PCWU^lyPN+^%RD0=J#a1Q7*NQcRR`VNGw-Ke6qz&w69ZF<`xLguY zdRW);vv>#`c5CC&K6QY6CMYSp>Feykcc|Yl4Va*2(DI0k7{NOU?>x^S`eKDdEL6gp zg+Ig-kVqA|;=HiqR^ETjQ3*U~C*1wB8mi(I6tA{Eoc7E7>8MZb5z;b7ZD{zdSMKAQ zZbwbVS$e1OV+&sGR|;YC>*#)$s&zw|9mA7M6U`jWE&WuP`==F_iIyt;wu zVQy(s%tSIZw3!xxB#*j}B@#2e4)>R9{kKUi;HrXazrK!np8wh_e?OGL`X>-Er;xUQ z9}zhB7$GaTgocJ@@*c@}MmJ$P5hBTfp}E9MT?uRj3aUr=uKOIV~6DO-qY;ro~XKH|~S2Zcd0 zex%^%jR{1&LlGl~DvKtfrZTyEj0h$AD27(K`DA89<9u|uKGUqr;mstGa}hR)tpz}zT$EXpV49)`K)J@ zh`*#JE%?Uj`BP6ZIrKf>?9yn90bp(=>#?f5wn>lA7P6Cx)Zy)EAd;mm-tKVyO^uJT zrXuRa=nJA$MsgGt*9_l~x<}^?u#&_8G z!?i)NjoPtyMO7ik*6Zvwmo8N&a)K-T^r>l~E3YPx~U6)=Rc>uh6ox zmrmG;rV-pQjk)D%Qk+Mb2G`g?t5W{3NBMyW{<(#CI79E2=FG=7b>8IBi2}o77E$bYW75)!4DMqB2-CERmc+J+XzkCL)P>p6D_D7^pj| z_Wh8fw0Ko*2Xj22esOp6_Y%UX*Csk~s4;g}pLMbM{R?^%<%y;1V_j$nFk92*1$%+G zRN{_so3YMsBL16Emxr=IELkYMgOp~mb3`TAed{0^~))iHdZH>+1Z zhKRkZA)9cvp?%|XQA8>bnG3Un??ynFv$`NMJUAR<$?yf(qCbU4^_gIoA*_19xkJMS zu>xmwRQsoM)PsaN@00c+Up|-ekUvJa-+q-=AFi?&O3MH=rZ;N@bXvHa26GFV{7SRu z;JZ=#u#JOr+4FSgQD`ZEfmT$T$ zBnO*<6Bz2Y+e?e9VpuGv8wcp#hSyozjQq07xHUTSB@`+MdXoVIFfOH$K>`tScYwtv z?$hb$=2_dC(Itujg8=gy&&|tvXo97L0>w+*KsRKaSJK5a{@6n$n4Fa@df+=|DzKIS zC;kF2GZvGwp;Yd6ds3I~1f`5slEG^?2?%fkoyi?dzQ+iR`~p0K{kVx9_H(#p#W%#bYfZjJt4!u@Clljb?zZ)vy0pj^i*+h>#ZtHtJbjJS~2hf>L`Qx;sGS=QyOa8C#4%yQHmzt`sM0lc}Jl~FUB-L4-_-ewQgH6$TUYr3CR+jOXBq1Ek^ z6`YB3VDob`;91ZB$LJsZU-?#=Fu-K3GH7YkC_S2*N`bslOqLx6&w zHhTT7bVusW;1)$bPA3+Q!Hs;zM8PBJ2tmHtIj0$@kxFap=Mga#yh^umV$mz{$m=iP z0@f=`U7|@|LA1$J+bYUUcEz@;&DRI0I6t*qh;iM!D?B$o3zkG9mErG$LBEWY=x82q zlk8d;l;{}I>jDryOtgaH7{-naPRN+#^qngWeE;~FQ8Lf zauEYYB=HnaXG?;@Nc(C=MDvL;f|CgJ&Q(`;h*+y zq<5RlM+fXs3F%rrR`#!iSb#?za?GBy{h*pn+pAHvTV18%P|HTzkBa}pEs$ma1Q85DR9x`0 zKijZgwZlOQq2Swez1sA$3766wAtk)hZ-=`< zyrYY>X8G4B@l5~+DO7QLo}mEX0w0~X~x<&q*3_7#nOjss4W2rSEg%^JrZk8pDcRRnqTa%;OMoMko7;X)E?FZ1`g@%i!!+@JSrB`Z#pW@K5ctB zKl68kSbz`U;JwHL#g$vV&EE*MB#=F3)(OkeQ)-2JVBINN@VXu)00pD-HP~BrVNIF0 zmIR(v-#ru}`_x6SX$o@4>;5<=aU)@pj@9xw20o~|^ZF$*xCL3{a~xi(!FByjd=5K_ zj67b8M77iEtc3Rd_SGtNQ9x~tzZ=?3ZM|M9$l#nQdoQM&8M8=iE&duWpzw8tD;)5? z|89h5%~^&{b@8^G2&qs)O)fC(gIiY6GX?P7LxwVZP|ky+vy7||K;~`qo5xWSD=Hck) zdZtaYKIU+b$1in?1v{l8{27hS!^=TRPA0Y#@Sp7;MhyJeTcDu8XLKAZplr|M^G9(e zT?@BMTFY6)9h5zx6o@x;L;0(?(M|xAclk8aCS#qUSF>enI_3rE(u$Spfj%%)R$^fh z{z{YB2oY?%Tng5`$k?DBQ^9vfyNi+480og9jVY?DXtjiiOsZvM{%3ZS!}8ndZQE_l4XHkkMyOzjNAWVk;SD6RndXRM^U1?6 z+nPWXkgcH&K3;hwt0BP#T18WpR2DCfwx79ZoW>m;((SL<;`MARL<|*g5T&Db)VYj- z6)D8J;sVM?b<3H)x^Nq3Bo5bAB9BiSiP%^xnKAoVtJKHE1%--j$;ZjMxF<0jd+6*G z4^G094Hv(*m8ww_A?4yd?tvr}9aJinIkvRqItU0q!6jTe)>;oTCy}iBUiPlGJ<0b@ zcje@)2Ua#ps2DC;VP7`G)%ai@dllERMJAMkE5wW8P??gSU}5=JY^ExNEg;rXMIV2@P{oXX#g zVU{Ciy7@8Vr*+VuX-(rcXtPyiU9|9kG7y!B9xEOC$3#7-bygIRybgU25tyvgT8q_@ytO=tpWs0N}P{QICViP+7)s2a&YFt?rH${O8tM`CYe>tqwWt2izhg2oyf=+BaF9e?S>Ypx8W!-wL;LC|{~%!6ZklWe-)vwh@Ae-W>Eq-5 zFEq7c)oTft=%Ag5{Vj_`gt;d&f8?VnM$4;Yd6ZpgqS~E|Q4@(6Ej3}w&0KNkf@O~W znRBdrwZ)4QYB}6d`?fkh7S!YC`}#zy#HfDFtIafp(9y0WoyD@-u^;E<`B7vr@@M(H z;}wV1_JJ9^zm|(zC)Af2IIIZx_7sH{v$)UKMq}qsY|$&`1Lp_a1>Nz%av%W9e)z*z>~t*{W!IGB?ow5dl0zs?^)_j7i;d-Wp-xzLl)W| zMR9kESF8T=iFI;#yWFAb80}38ta*g3Xx|rqa3hfeIJm0YJUe!%8&La)W`o!^bkHgc z52Le2`9(6H2*I{OV4x=AVwbOQuUH(%?438_B?Jh7fEBaF2-x)K3;O6N_dv(+O#Mku zP&in))s2WSy|*M7bsfq&lECAf?1<-IJFQ71P4S8BrI`{7$xv7TnHd;{i;F0~1z7El z5i;A9H*^mB)gKaSvIwz~w|xqa2st!Vj=)SL^|Clpoyrl_B~ry9EA~gW?2^~UDe0{1 zmiV+xY|LW97R5b`bIm~UBvek#mk1_{jg0e|@2jp`_lxj$j24)?IyvMGOtJG$<=D^@jv^!Dpr^*Y{y@kD5fGwCW~8NM?lnkYffcMY z`9FbHHL8ZNiS9$lwflZ4`~Z8l7o3@r7+O%M<>l3g>xtcVV&oK8vx8@c?;bVyfLyL7 zOK9GNzfIYLdvTTTV)SOt)xcz2J>|wI{Oo2W50fQ^)l81OXQV3y4lri%Ix^1bl}Gqx zg$JMGl@xVwwfom1N+fGn?rHf8=IYAquBj{C-C@OSnW2*uf6MZE znLFA{Wob6Cskmfd#^o9$hxYNfG!CzAEbjcyaiLtM!`f)QGA+RLGe*lV(Xk3SE7|*n zSUF8qU*=J0OxSm>YU(XB^i(%O$HX#-S}P8NRF7^@q18bWo^^gN(jPF|SNPwI_TW~r|pbaoCn*`mz2&`lYDwv42Nn66cHaeii zWSiDJiDSh2sMV-Ti#@7{R?SQQw$dBTY*553>aG+P;6Z-i;UA!oUlCbB?v=h{z?XLm zm+ck3*&$WJ+I+ypGan+`?hG8@JACNaszo*wfy1}ngoF2Am(Fy z%KhQhbtI{h$&~IOnUAo?3#)3+`FH_E;(%H2T6hfiMkEyQnHyXBb~C2&^QO*3{1p6R zGn!)!@%h<#f8pRpf0Y(U-&CxUZIclfa6+*J_ziIwj~`$u-BE;+;&HD`HzzDXNk!<| zJBkQ|6SnKg6q=IviO9Qr=Q%tmWJR#1hK4|~_cXK_iE^pAY%6lL4-yg;hufAmGSQY; zCT97z&7n04j#2lgOqK3e*%J&l%;7FuihrXTjWJtqh6Ky_&Ffnt+hFNz)sC z><0Ki!djmrCYv=RjGcy(TaLWIV>>>3zZVX00bO}_BDCyzci^CzL7%^fbcSirm|vC| zAkV#;df$z7RfzP0L!kizads#d=jlTm_<962ADQzR`g1ex+pX~ii=}Th2$(LX+)C{G z#qhTSyv@9K=2<#@pGt_fBX$Tg0fYTABUh&EuZ>&i=14rWoPh|_ZqxERB;+BJ16-R4 z+V!S1jhVA1$M_9ZoE9mDh&X#XcYQ#}UEtRC5GT77-zq51dDlOe=NPm12{}bDT$o-z=?H?IE_wfa?m4aoc7x{d zcXZSps4beu2FK71&Qg&uvL~2UDyT#)=~uS>;$(Nyo*=U*p%2-;Hm*fw*RC}eR*8ZD z`|Oa7^Kj|0+2AuQ1G#1Y#-t1XVA4Odu4*7>b-P%qjCOh!9}TgHfjV>K?{{1S;2Ji6 zIejw6DyCexW=EwLuF&m#oGI^lRxuy4Ck?KiI(B40L!-7Tg4o5isNyO&eNUtl--z_T zviww$FD0L_MM~uUv|Xp+(#!uM-JiQ0x23LV{B20E#HxZwHg|Gl{$#kg3#fQd*;(YRyk=wR{RE>?z!{xx?(VinJ zJFVw%;{QX}RRGnsEZgAj?iSqLf;$8V?h*(Ag1cLA5AGh^-QC@SySuypLvrtZ$-D1Y zouYPa4(yrUGt;tGcWbyE%=_ydHzGrszd(N2Jt5q*hbY%0T>2+oUg)#h-Wla}6{Y-W%kIVz#XFl&<26m}%qkTKaYT)8WlXkPj#5&*u&rwas5=PzG}eDyUtf5+}SV}KU%X) z7mv3K_gh36FX83xY02*q4w* z#;27-HoFn@QYT$+h_7LxVx)C=9W5~Qvg1QZT@r+Q#gr~*J@FTpQV?o-%u@4bCNFY) zQ1u%aU>f$n^I_a`X7)GviRRPxi>rpPa>IPck2YNI$=T(HM<+9{nGS2O%RmPUS-47S z@vYiYhT;3PF@3x@YxP~&CAN@;vaKLm>?mksHuuzXe17nwsEYH(U5mE)<|~+=^a|#q znJ3y1Eb*U}$I$ zzlLrq#ohU2rPZf#Gt7@RKOCVg4kX#`t~lMx9`9*i;+VT$oV7y5fIqw*YToqi&2V96`-f1dpEY#FATdl8+3o%Fm&kZ?m zGvW^1iH9+LBGS*=ni;5;iq$)smg0EX6RP2vdT^eXJsG9`dyTOGFL`^P?RvoVs-3mo zPOM1EsoO#6#KsaSK4LE;PvLmEyXSq&@*v|x*K%9~evkYnCxa2OS+MhTw+?A{k``97 zXKNy$epGkM&vZ~C>~T1Npn$qu(`7!j@H>_0eep=YXwc`icz-99+>fay7&K3(j9r+i zE+Jyx%|!IS2nY9g>>e8yi1Zf#V?)4|$eE3=8uSGSC8BwU^D?QfqapJh&HKo>tC73N z*m^9OLLGf(_CPg@n4entaF#1{SdNQ%eR5AwnmrU|e&ZVi*cuPG*$PZ# zel4sIuYn3=6b-x9B2HUz5u0C$S|{88NjP|}P0>b23-0|amF{Aq^LB)P@r_FB)kf2! z)9Iy)LK<7?+c9NOqxMyUjt5fik~07Wko}};A)gkn8?krB(eR_t z^~$!zu8fkm5=kv^Q7fvn^7wQn^(slOz>j9WRioPBb)XBEB|M<%q9H`bNDFso=n+ggA^^JOU{BlMl&rw-=?<#7SSE!?u!H(z zSUq!a%$#QtLd!47$w;pgA~4N*(6L_1K5$g>U{(g>Sf6`E?7%%{6QC)e?suP7YECkn zM(=kW=vD*@h#?(F`Lb*I)d!B)HlQ>z1~dW0I)TJRfLpys3H8Fdg4TrTJ@M{z$8Jm_Q$#O;wtlpMJ}EADeK<`x$7J z?JbTcCQa`Sp*v)?6Bt*gbCxjtXK1y0bSaJ`)IdwE2>nweO65QsK|}TDv&3fDDV!W} z+a~8jM>Z%ZEU*bPWL~0=v7yd(9dpY;}6clbE$=ziP+Hla>_JM zRg4DGNEy3$Xlvg$Sy?RXpOh;2cB-Gw;_Ah!^p5?IO5VA2Kdf?qZLB~K-t4UUTE)4v zS`*+wIXmubxhWEbvkfPB&J94zg&n3nTzux0r4!h|T_jh!j);1N_c(fqsqMh_wUdlA zCSyW2m@uqznnh8)(fyaBP9>&F8SbrfW2r`Udm(g)&vTL(4!2t%XYiwwlo_0Pb*$uD z_HR^;Lg0_9JhuqUdtss;)TJ~QwC$n-*2Uo0WJ_NpzFw$470&j=`)nof2~Yee&+My0 zQ)dR8X|VwF9&r^!%*3etXT4|^>9(ZN?Ei;bf|S8d6K zj2F!B`%VXNe3Y8?fZ&;cB^M)7EQd!tVemIG{bZ3;cuz4yRigp%p46hvnNY_;i_%}* zYrGj zxAV9LuK+iyj|qbs?}-k`uF6O8tg~k&%rK#E{3cMKAIpN?(3Dnffz96g)5h0!IlFS{ z5Wk_v_U6pgwN;9#E?V)hUJ;Zm;F^C2j?jEtb~|1^dUDvmagAeAavtn49}^59RWJJG z%aC2Nt_OA|E+$7phGB(gm$&KN1)9z@&SCoCnrzgIvvBOROjun4dOMMvq`s|1KWO%K zFz>)M}&WyRLjb$do_`P{x?N$?-R3{C7qe29JZ>MY+jCKiF(LrJjc=Xv=7w<48jpLS3w;i7&#^mcP1YC zN~wWS$04_5Zp6-PVP^aqWE^DL#I^^u2aHd1cogFncqP`LPJpgZ2d1PIcI%Lh3TFN} z=H}|mD-|ybL4i=CfsqcB?u`ppY-@5LXKl^sIH)8gsqzQ^?t)i{^F}eGH@-7z> z(?Zyh2A)X-IBYY{5FG9YP@rP#*AE08I@tCbm-#M>s`P9`6Vk0f`l9pLx#Tk471C+z zv*n{@&xU-Ruy>>rkz_q(@y+vo^dDcisM_F@&`)IyD!w3gCB|$EC8N~ zDGd`cy8iG8uwnt^#ClWxPse0mav4y$j|I5c48cclGk3 z=inO8ZwMiOE*T=eH!Je00@z(L+QvP*P_DKMgwEn-9Gl5Q&ByjU_!eZDG|+hnpnKiR zb6&^Enb5dgQ7dz(AFC=bxZnVYxt27h>vXg>%-X4>2bH8k zWteA-PTHBDG{SOScvqTBgI1z^W3!-YJ|;6sSeUl~*r3H#)ki79XEh**>9Vo#WfIB6 zP~Z6d3EOri;LD|xf2P&hass<9pCoI@!1RpNmue~nLxHY&O>y?Ar>^GoV$!Ts0F}-I zl6NFfwPzc_sCUB4YiDADsdnFAqbGAW45_Plrlh%=Sr`t2z4Aa!9gHb!8_%ZJL#<4O zI6h^Pzw>FBpq;IA%^6M{&+uA&3&0$s6dsZR|1gHY`Kp`>mjoEL-R@o5$24uguosUJgByWjPo3n^vq1ofM@iD57I9Mqt>4Ze8=a~3j2rmyOQ6kz$ zl;ddAT6Qjq#nh~zMoessp(dwmEbg#p&*za>=@VyS`NRMLp51q#x0>@#*OAn(yf&{9 zVb9Tr6l3-ylZ>z9BOTP7ynRk!B)+eNt&hO2tGgWlJqf5y;TZEKO{zI4s^ixjnqL1( z8+dM{3sB&NdjV1A|0knyAp^*0+!N+j|AD^#!NC3wHI6_67;qzOK9m1H)hOZ=V9_v^Zf8Tk3glsEamSbv@vP`e|S%@mQD|B-*27a%DL&+^poZ`AeQuPB}M z)l0%wH~q8c8=eopzP>(00%fiQz##CvH-*Dy5l^}dL?H*XvY#wRZ<~8Pr1^0W)4}v{ z__M`-JDvUtu8m0Oj;8WZP*F{2*Vosl*hKtdnN~#tPNQPbp6&mZ4xnyjTw6~lj#=>N z&`{M@!q3-M^1e-MsL{#3BlzUa(z}-OwRDVZc||FxAJeSq0?QMCWJPPGJ8&b5Q$O%v zNCKTa5ZIQMmeUwlBmQ(vH$+T+Ef*=QN<644Rv;cspckhvCKJ*B@NdV|fvc;lcNc2u z2L=YJN_dsYwC}}C;S(n z%PuE8()Esmw6&{A7A@@_&ld!F6~>b}tSb@Kuc8_2hx(8;(a&B-O(UzusRSritgIDm zvxUZ?BIjjMP+-~80F6;lU?recC_NpQ{eCK+&5(M)s-{Wvpzza}UIBHJex2waFXc4E z)BTQicz}UovA9Jil-XY8jUF&Q(a>KHP59B#EXw2y^6w;s*tM zOGghGAOp<8OvDpVBp`@p>o1M|21*mk%bM~1hu*9yMq`8eya_n=#dN%IUYl*$28R=O z()GEx*QLt!lQgw^bTA(^LyJKl@bzrS7dkn=&XcMViuI}*66#c}woO+K-7mvMoL$&Y z#HjQ*!agw9)jp;_6QwcHdX0>BHqt> zPPPWXmw*;54z1p$%@c}+YILa)`s0n^c>Eyyj72Y@iNIEtCjyZ0kddxFpjKzzt)O;t z{WP&5+kRZhlzb%0A*=z1({M3UQ@4g|M7RAfilFfaF18lFr21g?Mb3Co`3s8^L!+bK z&c)I?Ktt}(cZHwzg};YPmMFl5nR;N92U3?Y(L=z9id7xV{Z|JOOIFBTv5cuRBc6O$ z85wxRrL1t?0*s5FZIHFX07pXOVyr_LSfSB48PtAem`GY-5x<*$^Da0J5)!r_zFzSx zbCG`&@i8YUUb*(OLyf#Eld|HMiYd(DoB`lR7Ty+# ztxTzv&{hG{(zi`EMFZId&8X41bK!=f(qqxVM+P#<5WneYz(Ozq&XrB;IbLc+!o>}F zIB8vB!;4WdD3GcC_{zERDv<;*akcDrxKA6djK&SAzkE}11dSV-!o+rK#`T5o%){|B zf$o-jGDm{xK@7Odq`(((F%l2W3^4uHH!)>5)yMag5Bjw}eMv=8t7CkfUe1;cRNrMK zgm(!fDUi+$e6V3uxIw^tumUWe(UcYXOIr8p_4OVzUMGSW9l!Y?dWZ5K2h^AWr0IN> z#Ki%x-M*r*@T}}@UK77z&>vfCc= z7o4HQD?P_=w;HhM9>Ez)<2-fTf?qoj-|}L*VRx65XCPIto5(d+>Cz)_lD?%tUHaNc zMDsygUnng2r1HQxk~aS} zl%A~4xEiZQK&wQFi z^#PLx-N-x*NX?xtQf}-a_zdXJ?$5g@b1GphK7^a5>_7S#4{)-GMfxERc~blj=xjU7 zh-!&AKF|<__PZjty1iXc&D>Hsd3n>nL2R}aF%H6LGA{3W(`w$;=EGWJ9n-IR3FOXo z^-)+&N;*a<59UTuML^iR~|8+7Yzba}M2 zlP1KoDgUs;bhh#EVP_R6&I(aeBY`=Oy81EbEJ%C6sIsd1tU}T9fz}2=;0N3jB6Hh_ zl3g(kr}xGSueVeMZ=c+4dnY&%S5y9-+GjOoS7e>%M$ot~v^PAN7Hwsia~^}mNiSR@ z^!#5zzy_Tqpa2)@lmBb7D_Nh5?4}BDNh~G zYv^-?*xfM!xJGw&P;0HwXuRKqd!nevz${1GUvEw+jh)3asQ`C;P zP*j~h;Sh^rBWTEWkZ-ki>{@!GDgbT!jtJ*u7#S>^L$x7)p@<-4Bkeuy$&7JyHcJ(% zKO>{0g`dmuk8dn)3Jo_IPvFD0!Wh71R<59!&kY}*$jB66*v z+s0iWoqj?PUuU6gi%+*2SlHy`G10cl#tbAn!j3FmYsKjn|1qV z_{CQKmHs^udNefn1yTBAwkm0C5*@K{^jD)(q(Y%`ZIjEHN80H@#vSG@LsruDRDFW1 zrUqQQE6F4X)LS<&J{`Wz6b_nWEVmCN%3%d=p{gQ@TVD!FVoXTrrUQM|^;2+L?Ufi} z)9CCvxIrlqVC|@wmqpjbG-f`^PuXFzu?!U3WtLYD1Z$=0Bb$B7)(>1%oBocG6nwKW z{S2cSW8(~Rz^Z`n$Ta!l`&hsdVl?kMS{}DF98%o`YLc_$jmj=5;nEBIo$s9FyWxKta2a^iLi1zYR)paW($*J zAPaW+|Z&43~D5GAaZqcuh z(}K6T;`hJ2^_23xl`m=&DR)#Xg^8n*voF^~{kC&@OBKa_%a zE1-gch*Yq%=2(V z!G!7*Yo=bGH#q40c*F6jVmSu4D`l7p<4T)3;kOn#xd9fSe9S={`@CbR`+jfEi8hJX^2ic&@%Zq^@adLG|$R4{iaZW(1|5 z7nH0n&fMOx8;Y!{(#3|yP_$A=N}QeL^;pZ$;olGgCtdpPF4hhoOTP$Qi)LLCsm9%S z;XW*fXmKXVsQ{7^M%bo< zC4bXionX5H6e(HnvUiP4@#Bb_XT5!yZoIZK_LG>cd(l!254v=Nc7g+INI?bnQ@cLdWl zhQOH*3S#lY=LHzlqQl{tLo;GYm5(aK;xkgK=#|bA&1yv`w58yn5}Q%FflS2@rl_)E z>lSh{8iO7`3YGFRm5LW~$_J75fgee2$nEhsy(Q%m@BD9izp}IG+lgXV@IKuB|FgL*LgsHcC!dj3RDkYw9`md2P(X_vh^a3k_|^l=wRVZy<;$#J^oFp>+dqC4V!VImRNc$W$MrsJ&UHoqZ9mO#lB%*gu zzvdg0Qc_V~tkYHPEQsL*rs9*kkb5Jikoq}6^; z<{MjsYI=Eopol_I$Px|xBKK+cW2c|-E6q9XCr!HHHKfouVeSxFO$C;P&pIzlEKdE> zpExRfmXs&v1|OX_(GDcAi!`sLjigtMNqo}|i8fegPPDeWzym#Vv+Lc0B)3aD(8q6l zu(LxCr0cr1Pmc5*q&kj!XGn&My-f|uUYg@Z=xbwy##;?9TG-$^0TBOxmd;o^)UH^H z-C$QNjhIE@jhO^N&99IRKOht`QWmUb3g^z-vO87muS$76Ml4vEH-SNy+IttAofq9V zK^6$PL`{PX;(Xm3Vs*3bUn?#0{v`tw`HA-NMp~cYY}=~NW)`$-fr0sU?)5 z{44CGaWu&!5M)%=1?>>hrvLGZ0f8M&7~rjQ@2i*Rlb3-# z3Y~YCV?wm4U%wRI=e0GLZf%HQ2o*Ia3kc2RcldQA+xBOTm|^iP zLTl89d15OZ@?TrTDKPkgJIa(@VF1>0Cm%F#Y~HxRdgmE(K{wKc3aQ~3Edwk9{0nbp z;|+hANBUrwzf6O|0012%YVDHWlA` z5rLEW@VO#Ewyq*m9-yEP=W9Wq-9FId;YzM^b&eZ4LH=fAl1{-fW*StYXXH&0)G#Wp zDv4;nYz+Fc zVGuXyTX4KL(XgXYeZDOe)v@|felU|*wi;%Ct=R>L_g)^v#UP2`%3 zeb?U4tmX>yNVC7ZbbNbJN+%$7dAzUQbYk`%pH<<4akg@XXLn|Y6PE#uh>HyTW;iiS zq?ERM&3Y%Vzb&76_*NLTUZ7)|2n?a4d8D^&<{3eI!LBDGq27ouRlGvoWd4hvo~PM( zO$S>)C<2z(olIn0@#4m=L&Z7s`)j;#M5wRKOwZ)v?$>rjD?4@Y5J*-pp-D#byPiJ3 z>9;W~sAOI@Y>$_RmA~Q@ty5BpuZ%#Ue!X7-3;uLpdu}Ztu$fsoNKo*5y*^Ly%OL2U zP3Da=yE`yks)0C?F^mtS<6hn%AZOB3PPBbe1c6LNVd4-079uf<449R;xxC~9-Rk`+ z%36ZbT6jT&lB^zKwQyJ@UOEl>w`00;O!ooj6DdKAs0h!Gama+59=H*JI)_~XNl5H2 zWb5Y89dRBy;X|6eWU-C)j*b;i9Co+qN#7{Y)M|17VUA1EPk8RYwO6eAFWYe9@9mVQ z=deu@5Y@EJTNoQ`@Oxf%!*4e+`1lV!A>#p+Yb+mn{TOMUT2Uq!=)_S|;CubEw?kFf z(q|AF)+}BiyCMO}E7R>Q=pZ@3+n9 zqQ1iM406_4MWmW!ZkQS7!-rS_OD#{HX}F|vyA*YiZXxS_Y@Ro>`<;{Sq6RJCY-=j9 z#q9m(|9HZlpe0;h!%6HWJrFA|&o@X&yS-Bitwa{rCN{?$%Q?Z9uP<-Rc*V z)s;b&B#zz-XrSy{7$gz>G<*QlzO!pp!OI%B0f{w}MKR(#y`qwMTP%N`C&Mvn$PRsM zpx^|JyOQwQ>=@zEBhn_0XA6&Wx~y;=*+R4RIFs8;`x!-_WY4!QR=R`!rMkJCI_v!C zuQ3mX?Q7r7#mjKgJm$o46OKw67b^O!ZglMyp}+59Gf#clu&^v_N|dp&vM6eQ$sFpu zyR~`lVT~`BlZf{b(?$i$Qa$wzml2kkNAJRkb|?Ulr?b!HIoT;0;evCo?G(oCMWPha zL`?5d;CrhoCoqTx<=DTZwH+GVdSoRzd78>0VmESZ|1KvkGOwYb_h##4R!K&&J7lb3YcSYG@(2`!)SZ8Sjq)+G5FN7&DE`u^-)E@3mR6fR%uje8L*tnr zik@?_xoRs{q~7D1oOf=0)}4OP`a*ue-lxpU@8qwjmk3v<#XYU76;KL6e=o1dKM^lm3@<8-YvAS6Us zQ1EMSp}d>R^uk)Dy@8aDjm-a4`&J}0^{bZB z2?;ge@Jl*m05!$}&|Y1cwQsdOYKt?;`TXcB(rgNaLz13Qc`1jxPMC7JFX19Rse3jF zc+fra@857*kT%9-)uyyQ#xcdQTdnA-knTrg)aurAl^#XPZ15R|K9iC#I9&Bo%w9-+ zCxf>#E=KDj)4lT7uynjq6y}yuDujnbusX!RTeSt9LukI|7=RDAL`GfxVu$r{6`9qX zt3bA>^ZYIfx3^*mPGCQ&(6WIIE-U4-g)YLLcoUcFr^)db_yj;y(;*z3PTL`nC`#hq zNf(@iV6Cf*N779ys2%<+n~vuNC>}$NrUVmJ3%MJV-{a@Kj4Z(!N0h$Y5yM)YS7O{X zzM*uxJwbYSdn1;YS04}@X#udnPOJAPwm7OvO9_Y@?J&Ca*t-z!=`W$-y2~<<8OZt| z)&#t0mFXJZOA!Og!8~JUXY2Xr?qxnA%@=ati-^^9FqMFlijYziE7!O_XX*wEDt<2{ z9y2hF`|2Ex7Po4;Cz24%x4%CG2^mul8z5L06*iJxhzj5y1=#J77E=)l-(N+svP_Nw zs?SXBj0nMs8PE`Bs>rH2_(XM#Es3j?4w)9T)mNe+GiuHb;DQi$eA1E|E;-mA4kN*W zy1fmXGQS&*ih#cO$Cg#`Zfo-bkyBLMoXP-)#q^9KmvvSm^Zg04xR3yfb;LRN0N64h zX1;av^WdniQxxMF^lMKWE^_7#d0806YC!)D!TWlYnOgWI&w} z*c#vUF9+D0w>BhnQ`1K6+KO!$4uIP9m~NzR-oHX+NkQmGCFFyEy)geu7WiKUFxnbH z6FDz;m%J!KK}*1ac+PDs(}}pwr!eF7{|!;T-r>g}ZDY>RvfZdR{mmZv1rGlG^AsH5 z;WP_GF#Udl{km>|^#Xx_Hxq3Gn}zm=Ty)l6eEvfHNZ@VLDp#Z1hh&i~h9; zz;g4}z`rLt@97yHjt~=U))qqy&|h41fDv;aFI)W&fb_4STMh%_5{|>Qo_}`i{9PJe zVN$O+a-&1CQykd`Ux!pTT;7&&{mF7FA~|1a%Gd`7Xp?y!ECnl|YkX>xn~P1*--9CJ zZFoRY{h(;Oq%15yv{+x)g?Relt850%I58I0Afxd|qOv#F6zkPAOnE z)jtD)jKuD(T^ldaFwI_~d7)P%adyKA4B!GME<%PTGQ zZ!r92guVClSaaA~+L=#!t6NaSpPi3?iXf=?X|fleYLH5oNn>6_vT@KOeP52uZRj(f zkC+JIEE@1hnQ0~?6%V2NYs{fsm- z6ZiqBImdo1EP&$izrW5VL4LdlKq`QVi3t)i@;X`qs^F`aix=}IT-@PD%0|(v|HQ9tAMQ5wn!3}?@Ow}mld@znAMmkxKvh&ap$2N=)74I zXCos=@f+OuJT8HYyl0SSDS@mHlDc$vu%jW7)~u;b#DcwgbJM`&oFlc8$M4VDIVShL z$E)3+aGRIUX8rOlAw=&7lDAF8viCm&c=!z%9%0-;B5DQX7nF~-(NuAFhwrlD2CBh5 zrXKmix~U&frx=XX^0sJ1#l&!lCB58}G+0+< zTPr$5u=aM?4HwK5Z}gC~-LT>^8n53G{INBR6oApt(2Pt?zgw3}Qz`(OYV(T`@q_7$ z%~6h24nsxb&HK6QKSP+<&<-?rbxFiB+SC$RZ7w4#RVw!G9i3M) z>JRbU?p-Uu+Z6Lq0}3-UkbIy*?(#Xms?c zQ888Nf~JjKi488bSjONB-TqaW^?pG?I-WdT$s`RK(jv@CpaRc1pv%Y%RTinjxS@D$ z^5>rQ6dm>X0_;hTXOHUxv*Wd5&h!4^#-W!`_ zR)-w6<+XCz;ZzO_)=D0xzfewOvYhLvqNHpyp`_?B$Hh;eBKSa3ylVq_EIqm5bW1}a z2jX-!*U?FRa3LspXjr-Nc1=5|KYkGWTwuLSVtL^3Xvty5c^rRdc&NPKC$NT|F%6s) zN87#`O_IZ%exDdooXvm9ZZd<*DfzNrcrH{&C%%}sm>7uwjD7XYQoHphjif5s(;A-S zmumNn05oiNCI99rxk{rPBEwh_Ajz+NX6R_KkoG|*+3QnOwdvOVsMk4)c#s5hO|ToT zj%1^jWaEUHD)WMBGICN7NP$WE+48*&3sbmz$UO;G-n(Y>@@eRzxq2)ZNFbu;9H3{fiW+xD=t510$q;WPw+0J9SUfuA%*2wm{ zONu&eJLRwTrTc_>%&dk<65IM!BnmulE7faFT-Au>Iv?!la-)VjRFp3O>FWEJk40^U za~iB!1YNBoSUeozo0zp6y}XY?pf1nH@%tIH4+6gf-kJmjp-C%T2TPv9VICW2C zI#Bc95cFo*;tw6xdRTPyb0_HE|DbWUCoxxLdJE3ECy&SqLX9jYMMmH;suYqVax2zg z<#Oq!;1>Y1`DW;8Nv|mm3jvoaz@f&pcb=~$aGufW;gHPt$woe>CUNFp2318FV>*yMN=UcDhv4I zv{w)H)YDXqL>5W>6|3b2bTDgt;P$+zC0+foPy!7`KGKOe21D8{*@YfRYyJ3+YHLcT znfWEJTg8cd3MW@@X!uZjVS)d1P4;}gSHw79M5gAaEmyxKrQWH136xGmCPCN&>$utj zh8hpqCLB@`+Lv5L4*-Y=RV0bK>YQAlS`0+`MR#gKKUy!WBna4bNgCjD|T8wh_& z69Ra7d3m3Lg`oz-6dq6k4G?t(EdI5)0O%TOuO*M(_Drn!?{n3f?v6O%)P77|tCgc- z1BIZh{r9N7gNC|A(;azywBs=sN_M?)drKu>*x$t;mELW2T*xFnAOyF$=BuT(V3+Sn zMlmcFCu8jq_|55k92#5*n1cz`I%&L7X0@R^@hKInNW?EJ@3;;V8UdGdq!TuC1)A>lK&Eq!wy&>W@vGbV*1%tml z9bd4D3RRED*}7C%`|JV6=?H0^)u4B^S#a;#e~LaredKwp%_V|+Mi-)2X?tR7SYne z>j@`VG1s>yeEs!q-fJJMJZhol`GmGN@9J-?HsaUY*=OnD&tPKpgiH6t2bj>wdEP;f z`L5Nf+2AcWt#~^fgf0h5R_$`L0_hI<@#>Qw$f|5jqxWcTd4%g~uYaL&ye+*|*Y7f^ zYb7AommbfXR7p>B!6g$37fAcq+GBq4MvtV52WpC#eKc|ae zgDs_8tq-qL`lwbM5PD!p()3?@4!e*x_Z(TRmg@ zj2)l1$8UdX{vcMj z4aDuiKOc>EEEYtYx961c87RlP6rW73woSHjVYXg#F5=Me5QF!|_!BKV7M1~Tqtc)r zEYnSiQmx>ixIGDofPN3rG|T)UW|sSa*=m_w?70%NpT+~2Y*#{ae}MeMroP*NXwm3^ znDC+Ir=1qRPcd8ghc5%pi2AqQ2>QO|-tz~$d(`|eo2uIuiKSE_e7_rg|6I?fcxp6% zwKivjNQbzgZTT%N7)oQoDNsXO_k-uu>2_vsC(&a#V_vg^n%>XZXb5KX&OAD@z zY>Pb}u=%n6kN(q9g&8%4k-r-cHZTEgC3HV>mQjyJ*}SGEc=;(Q|=#-QGHW&&|~zjHPu1IQrb)13w~OUnC&iw^qCsQ2FQIRU3B; zKo^&mG92lZRa6|ND6O@Bp3zdnf)ZKk?K`EoMEzs&k$X}~d1bAEpT+oKFFX$5%BQrMeO-9vk+5vae2mHfGH zKWJ#c7$jBQG3(|ggT}m$*GrjLH*jfQ@|@y-F<=|s0U;oS)A5PPe0v>3qNJzB_aw=n zqkoU*pF6k!X#xVne=@3mffQpbz>;r`e-_W(J$~Kh$0u(_(*8BM^f^%FQtjf@_S*xU zmxejFIj`5RG++azw$F-Ee}R`D6J4kL)3JDc`YJf`hY?-HCXB+uLW^{CfX4*5%LNYT zU~V5`m;T@FG64cg33!!t0WDleiqUu;6~N*K6#9YC$H^!z<(?Id{Pl_NV^RrwgE!ip=-O{^=n(kX%?uPpMd|ws@u8NOPuP>Cv*K@9| zk55)QqnquYqkuh#UrQ^6tE!Qk9eg>Db+r!g8$5qNLtgF?^$#e29FnhoyO)fhr(d^B z#RtVGfRm{Od0H52-##Sp*LeQ5GQ`tOUe$xi|7@Q*1`j%eKHajwoj*hzfKl1UEMD~9+<2(`tG_kQ48ut44;~SuXWMyS3mV>9J zrnC$sf3X<>O()<&XhnO&{+azh7fUe!w?3T94qz1=0IUMQY8(R$Tu#c{>0crMLN)>h zvaqnIRx&d)Ls75%DO+1JVDqcUhHKOX2YYjK^L@`NJBS4b-7wLgG#DSxqz6npvd4=b zBIwbRuX219C7mR{ld>G0gTwui?KtUn6<`*L0&SI8W^+HI5dS?Xen^TD($5emz(3*E zV;N7KYTFx!H#`3@q<<~!-+s;r0OWJvIiuE?dcRBC)k`nZG0;q5asKwpnZ*2HfKC~z z?6Vc$rS$R6Y?;9Z_dq%QI0jnArZZ|KMxV=n&)dky6ItSS>uHTUef>QhTdtx06JLvO zM*l@=$5}1A-o?G?_hSlvgQy2iHq*J=Fl!o8Kc+)T7o?V_lXeraL7MKN-$M3>8zzVs_7M<*wNGwq@h^W~j_=@}p7*RQPhpw!`WkB82r zVpj$5cQvhSyf;N_dVEBjC5D=r$)D=IIiIHJs;vSCul#3${JJm`Zd+Km<@5pXVFP|& z4!8&4oEI~ue5qF#QYJ(vqN751m^yH0*yE|#=|M>?SOH2C)7+G0_ zEEYE?nG{N8yVLU{FE1j2F;1-B4G8W}|#dj{*tNh}_j1Py%1!o0_B_#S$@tYOgw)NaH?lQYqXVVxzqAG<~b)v;G z{Q>^`zH;Zo0B6ZU*pZ!731v%A$4V=?Xpf&hj|P z392XGZ?>aZ$g^`YvAw7ARFx+$+ZeAmlDf9C>DucQ4Li3;DDBD0ZuH-Ax7XD-7L2KJ zr&sN%b6~Xn2BYrkf$kr`+m~Zmas7I2OM#y2Ke~Qcz4nFNC<%2Woi6MV@y5i2Q=yX6 zpj+@b*h)sIk8YCB`H>GUZtUWgkDm5u6*EV7-f^h30sFaqqeNNSAduG6A zYznR8%zObb0OQ3rrq6UQEoz-XHLgQ2P)s{Hg6mKplS<()h2PS;Yt#Rt@9oG~&tj z8qjFceOu*<^eO(BZ1YcHRf|rfaY9`n1z#}h)Aoo|9=6Fvm6Hv)&P@QXk+tIqKiln%c7OZIemmYSW^O ze<*b`EMZk#y0$APVf?Yu&tMHo`a5{?OX2*bc6y1^myGAjS+dyBfvZ(YGbx_%9Ip_N z>3b3^ZEQNXZYt$$$|3DkO52-rvs%-#ZD5#Cz;BEMN|g`Si5qOG!}#U?_sIBxi-kS$ z0eLkQwB0{uraMlL3^3{3g7;zKKG6D!cw0++i@R@VP{x`c9L2^oSjmu*`J}u$)?!M& zMe{43{qIGzJM!9P5lgwXCtWnS}4mqz{;$f^~X$*Re6E>v0I4?dV|-;05nR; z^tfRJ!`1$WC`QRjX*CaGh>M9*mv}ae)eXBRnt4qL_&?>j^v$zHmoM^VlP&F(TuY_J(m@z26N?EtwXJzL#mw@iJsvqhD{C;@3lQBmn(2-w^xm+WM0rhd+g~%b75*cGc;Rj1y?qjT)j%r6YUgX8zzKCzu-6#C@2eD@I8(RiT z#LojT9-Sp1I;)CuB1s`4Kaq&vCIl#PsNjm9zo${o%L8I4**FGtuw{7Kaml#Lei)}( zHZ)zA_ibQsK8XDDh!DX^?%4?A!$o?5<>pc7Y!ffefkU#G!Qfa0#_KV?XbB9zlD23W zn&;{3sj`v^>3+49u%b%AC%&S}p>w8~Lkv}oQZYt*NwjHXZug1U{9c_8}yRzWQ4#GB7pnTTs=DM^AHuc3gmt-67^j z=m~4mK0aP=$0Tgma%Odv0En23+{#BWY8xS;oDeaX_a0NN@N+!2s!nEP9PxpYf>W8J zta{-adf7|%m4%sv!RpeIp4#X}$8$?1`sFx}zV~Bco=vi{HI3xip}1xI4k!-AQnFcL?5%yIXK~*I)sH zySqbhY24i{=+`;t-h1wQ@Ap;lN7F?Wd#|=0jAv79dhvGoX*qUDc};Cw`AkzKI$sxP+d8kr%2!|COQ-K@O;7tQRI*Tj zSHBJ!qR~U@luh*>M=b23{QF}|V3udkBP)hJy-4AeL@(F7yl$lVp=d545lrckqzbI; zi`)CaiGdHxm$QZ9;0JL6o_dgh8axyu^V*2!uM9awIK^EMc-FVnAq9OSW`6O;+F)#I z3^Qv2RS<8_V-5p}f4Ca&vpd*8YA6~`>n>-5gcarR9BK4RV`I91v?LLklw-uvTNwEU z83}Of2(M#8@KQ>6LDw|Yf()Q_h_X5C>47g*)PaC(onXs?S*E5b_Vz2jH#fj^Z~6r zinBh<=OaZC=Q#dgDR@BdC9;e5mE)T3#&T0h-Bl;yaA{mTd~fD&_yd|jSq_SN*>zg4 z_&e5>Hmcn9Sj)e>;)4CX$u>D1Xc`DOXPB*jwcYJSnF5|2yJZkU>78d0n09G}-QOBM`O2$t>(^!-R)sMU1tl zQG@pS0)H01&`;w};Cw(fmVR?1x4fx7jf*LC+`1gQ`&eWw6q#m)q}YtA6>G5E(l-G)C~j zvtAbn_!2Ud1HMNuJo-PBFtR4fN}Ga!!;cy#z8Yn@ z{Vo~3ql_Hwi4Xz~1{hQ;T0inYFh1KN111t9kf z%J-dfndY7VV5T+twdNrg$xv&3!~EL^J{j%05HMEZvHF9b?UFx^U&64IV5l5cpWw$| z#npdD*aeAPNPOdM7TYEDh}4oL`^DIH_>?lXi)l6$mX*Wb?hL2qxJ8z@FP7hncQTd* zqw6PSMJ02mS{3$%-U;d5K+lV%{peSks;TC7gU)7uFF!0ZJiwCC-fVuEyflP$i;*uP zrY|#S&+{>`e=%$^W2*QtStJDwNc&U7;2Jl&TIIZFG4`GFXlpSeN&*^DH(r7or?h-i zIXmLw%AK~rOJMIG*C~REiSE3UB*{#HW#x9Cr4K8pPaUS7ErnlL8BU9ny7|F(I7s?y z`3=#fd`aoQbu51+jt6_tUXRO=ZaW%6y^{k-RvYDFCQsm{A*_hwTSaM8ekSp8tj6Jh z5CH^^mVB1z5dU1Q7JLg;PFzHvN;jpF1Fv->CJk{Jn_I8L%_#&MNxvo4SqW$!T-TjmLvU;gZs4`ap`);h=d6B z&pux2F6(E~{%~M%ka=oG*{@lIdIbwZ5s4uyKe{hA-Br5T*nc>S(6{)Y%!*8t%&^+< zC4lUFfIwwx8WC0&Lfq?y6~0`MvxKG)%yY_F2~l zKnE%Qy@bQs!LiCh)h~Sko1l*=gg<;-{&5jQjG};kkP~kF=l(WIg-tb4RC|Brmi#(; z=zRp&h_r50IyRN|o|C}#;z8aTbzC`FweUCGFcD1O9_lO;x{Ua%kBgU=8gS2Nt}G`F z5EmM&EOb>$J7X$4i{q8MkI6=Z%L{SeqmXP0;Hs?lUHJJd{YvYaPm^rWl%5xjo= zrR<0ttMIQs#c9_6-cMx%A_R;-RgSAMoSCC`$#PM4O~Mm;ULJNYRxgAs|GgT2?*H$f zu3PjA|$T}Qs`>bv5=+lrmrMRLkfyLjJVJ7IU@hZf&!ee8_%<`HFZigRRwOc{Q(_HUV zuxa*5&p!K{(JjV;=QAj&SBjf{|2{lw-_@3aH*RSVfldtM5GN(REQzvLiW2Sc#iu=f z4Kg=h!pGKGo{auz3l5vS^bogv2}osxn16Z8{Euj3AqFW3r$+j2G^vf2_`D;|67gLE z6{=rKr1*0kGpH72ZYpE`yt8$^FFr@S&J^3e$bLS>uO0R7Nen}D8d{U_ zi9_?%y)OW5cBdHvZ<*IyM#=$x3h_0}hfyLO;Bz3%w!deT#8m2_wT&mWV4l@4LR0)3 zYiY zCV_ETxd*6579nXRYm^@?IvM^ zhY7G0V^YkRTXjK?1XvGuySM10ugz9z+KU-Cq>s-iu>FNh%0RDdl1zG9;FWkxQ4%4# z!^j;Q_+7I$&Xs)t2~pS)1mzR@b|I2j3d)t>*}Kf?(ld+7rG<6Vh|X4A5Jp`PW{9>TLv^4MfNd$%$9(5NZAF?z{-z3#fgYZD53LL%_!=S-#s zmyybsrsdq`Q#~0|MEE)e2p@S1osI>%ETYH-nb?>A&T{|WJy~e4i>?-euNC3;U%s-d zo7(gcgOQ9vDU|FNa&+sxn1%)}d~7n(YDzxzl;}$Kx!vsok^PEOdLH6u@=g0uy{iDe zO_a7KwSj5`qXhWui%(YJY;hg56I zdDi6jtyuTb)^<{qA}w63?R@3cl{+NTzp;!jf3SgP&JC`<3WUTh@P)PzLin&PohE0Z zgMn!a6L3@knsi~D$NS~ALBHRZrtqqx;`jE<^|j08+=~zq@|HrK(EAzhpzr|mkY}Li zH?XnytF8Y%kWU^n{DX|5x+U|`{$Zft%hM-C^K<7Vr(2z$whYoABJ8y03Tb3BKplsU zhB9ath>*{jzwj_X@-T>z6=TWBcK=+BAh%O1#eNWYJ(pA8I&&zUxFr6aL>N|Ie}ctLXwE!f@k&D@*jeN(lS^3uXV}|I?+4(O9so5Q?blSLhx0 zB=Fk3x*`e$o#_R`Zl{nM?dm5s_R8LhiBV7Kz)t5Z#{@lKkkf01C+TF0Mb$QZ+k~8F zOm4_O|45uQr|Ps_o(G-N)`|%~gZ;&xuuwUJ;zm7VL>e z8p{zEr@qMgeA;GHc||w;^ToFPkGD&jyi`a!^3<^Wt&&L^Rdj00;T?Rhj&ouKHmbTe z@3-2E4Y$THzrvocToR7v>6f9 zixb6V#k4yT#aE6s87^eZFpdo0@NVjUE{U3pCS_e+;7>rp!c`kGYCE$?QpNQ&Lf*K{ z1z!`ve<@+Cn5I@Y%;+kXPpa`3&%W_*0;bNY@n;>1ShYD+7)o z>C-WbqHR(+A!dlm0#b5_AwkN-Otw)@`?lS1mT@U5!Bq3ny`B*^3w7r6*?zC1lX1q3 zk=_Kqagj+>%^BYjrE(xn@@E7-Nj&4VCT-omVYjBdLJJ|@F>_k=cxV=CIig+S;KwuV1S4ieg8}gW3Mk}?ec8?@m{DJpVS0PV>*(5*V zC@A!QQj5qBxTgLI{fN|t`}viUENOa8@f)~cSEizRaX&=)MfI-R-^V5XyVkck5oLn{ zK%fgCfvOPI*mO)fGlW6q&Pcr}CNQ%I1Lp>_$?1}n)^vj7BFOeH>>z01)r@R_SAk|e zC2vC)m)06#x)S+IKz&EN8a2N&ktv6?E8$}ZqOhSzr(Ey{3=CZ~t$|I*$8~yuHYZg9 z^zo!4m@3q)b$bj8h>X|^@7kPl170HpjW5xP{pNmjPQ$^8GTRBB?;Yv2U(LAliQBxP z;C3$3+&$j~K|zTG=w5Lhmod?FH%AmsORP!v2+sEDPr+UZ0^sVkU=04BySW_lZqg7y zJi&lp_!Egk%(O%afdNr(8fLm->ieWb0NQiGIsex*Jfqi%_~I_M6M--eo=WtOJd2P^8vDuHT1P8*^v?lp7uWI`$)4 z?1WmyZjP~7TG-}t0GO+4JlaZK7NAaprC}TV@5>k#Dq5JZF#7{%Im?9$k5u<2ZP!A5 zMDp#e7gpm-B!XCBW*Z-sAm7XpTELJ1?Hjn^VxOOfk(3#?A)wIPSUEj7L?^pQXMGhm zq`VfQe@4SSuULn-AFuU4`5phNiGPVhAHdCu8|sJv z=_HSh_GO`<7m~Jy6Meh2)PKBedm%$UKY<2k>-iQ9b6DwAd{#AB+o#;FzO#!OSYsN;9( zT&y`wy_xz~o36rX?PUyHI3028rsJQ~Yv<ub}9 zm2P4!Idax2+3_9j#EF5WduKWys2_?I`}!|R(%)&qa+a{O9O2DeeUn!O+PZ#wu*~jm zQ;BY2;XqkALCTKuQ6i_bPT}8v3gGv-69wdr;R!++&1WsI;GobDV}qNhR)e`F?rl95 zdaQyYr)y5+CpvS|M;PN=%eD4^M`4BpPjh^))622HduHkpzPvK}H&o>iCPi!Cs!1qC z^8Uth(lyvFf&k9Z@iR9&i{cN*Ud+r*G0O(OQPE~6Sv$58&E(ZamLj{+Qux5aVU@wP3V1lBoe7Vw${*TjA~j2@83H4VnyHkPE>u0PwL&`q;t z&WHht+d?p%-YgKuRK>XGCJC1@*ygD_k4E$HgBLF0&YCwt_PAc@ zzjVAOx@Gl*7Vn$rN{AUWn)u$0RZwUSb(}}IXtY{*mD=DR(bkaTFu(Wj_F-uom7-=| z2bHQs-xbp($h1gu0TrIR_LM~C<|4LQRB$qn(PK0- zu~+@8n)aWk?CP|rkgG%7X�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

ye(Ax^l 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

V$t{dlA^NnnG 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 ?w_|YD4|14sbq98x5Nu3~nyq$kq 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
  • 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 B+@Syf diff --git a/dao/etc/dao.ucls b/dao/etc/dao.ucls index bf11f18b3..0706837fc 100644 --- a/dao/etc/dao.ucls +++ b/dao/etc/dao.ucls @@ -1,45 +1,71 @@ - - + + - - + + - - - - - - - - - + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + diff --git a/dao/pom.xml b/dao/pom.xml index 05ab2b22a..44c215f22 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -47,6 +47,7 @@ com.h2database h2 + compile de.bechte.junit diff --git a/dao/src/main/java/com/iluwatar/dao/App.java b/dao/src/main/java/com/iluwatar/dao/App.java index 146fddcb0..334c2b9bd 100644 --- a/dao/src/main/java/com/iluwatar/dao/App.java +++ b/dao/src/main/java/com/iluwatar/dao/App.java @@ -20,31 +20,39 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; import java.util.ArrayList; import java.util.List; +import java.util.stream.Stream; + +import javax.sql.DataSource; import org.apache.log4j.Logger; +import org.h2.jdbcx.JdbcDataSource; /** - * * Data Access Object (DAO) is an object that provides an abstract interface to some type of * database or other persistence mechanism. By mapping application calls to the persistence layer, * DAO provide some specific data operations without exposing details of the database. This * isolation supports the Single responsibility principle. It separates what data accesses the * application needs, in terms of domain-specific objects and data types (the public interface of * the DAO), from how these needs can be satisfied with a specific DBMS. - *

    - * With the DAO pattern, we can use various method calls to retrieve/add/delete/update data without - * directly interacting with the data. The below example demonstrates basic CRUD operations: select, - * add, update, and delete. + * + *

    With the DAO pattern, we can use various method calls to retrieve/add/delete/update data + * without directly interacting with the data source. The below example demonstrates basic CRUD + * operations: select, add, update, and delete. + * * */ public class App { - + private static final String DB_URL = "jdbc:h2:~/dao:customerdb"; private static Logger log = Logger.getLogger(App.class); - + /** * Program entry point. * @@ -52,17 +60,54 @@ public class App { * @throws Exception if any error occurs. */ public static void main(final String[] args) throws Exception { - final CustomerDao customerDao = new InMemoryCustomerDao(); + final CustomerDao inMemoryDao = new InMemoryCustomerDao(); + performOperationsUsing(inMemoryDao); + + final DataSource dataSource = createDataSource(); + createSchema(dataSource); + final CustomerDao dbDao = new DbCustomerDao(dataSource); + performOperationsUsing(dbDao); + deleteSchema(dataSource); + } + + private static void deleteSchema(DataSource dataSource) throws SQLException { + try (Connection connection = dataSource.getConnection(); + Statement statement = connection.createStatement()) { + statement.execute("DROP TABLE CUSTOMERS"); + } + } + + private static void createSchema(DataSource dataSource) throws SQLException { + try (Connection connection = dataSource.getConnection(); + Statement statement = connection.createStatement()) { + statement.execute("CREATE TABLE CUSTOMERS (ID NUMBER, FNAME VARCHAR(100), " + + "LNAME VARCHAR(100))"); + } + } + + private static DataSource createDataSource() { + JdbcDataSource dataSource = new JdbcDataSource(); + dataSource.setURL(DB_URL); + return dataSource; + } + + private static void performOperationsUsing(final CustomerDao customerDao) throws Exception { addCustomers(customerDao); - log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); - log.info("customerDao.getCusterById(2): " + customerDao.getById(2)); + log.info("customerDao.getAllCustomers(): "); + try (Stream customerStream = customerDao.getAll()) { + customerStream.forEach((customer) -> log.info(customer)); + } + log.info("customerDao.getCustomerById(2): " + customerDao.getById(2)); final Customer customer = new Customer(4, "Dan", "Danson"); customerDao.add(customer); log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); customer.setFirstName("Daniel"); customer.setLastName("Danielson"); customerDao.update(customer); - log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); + log.info("customerDao.getAllCustomers(): "); + try (Stream customerStream = customerDao.getAll()) { + customerStream.forEach((cust) -> log.info(cust)); + } customerDao.delete(customer); log.info("customerDao.getAllCustomers(): " + customerDao.getAll()); } diff --git a/dao/src/main/java/com/iluwatar/dao/Customer.java b/dao/src/main/java/com/iluwatar/dao/Customer.java index 6d10fb146..d6b512dd6 100644 --- a/dao/src/main/java/com/iluwatar/dao/Customer.java +++ b/dao/src/main/java/com/iluwatar/dao/Customer.java @@ -20,11 +20,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; /** - * - * Customer + * A customer POJO that represents the data that will be read from the data source. * */ public class Customer { @@ -34,7 +34,7 @@ public class Customer { private String lastName; /** - * Constructor + * Creates an instance of customer. */ public Customer(final int id, final String firstName, final String lastName) { this.id = id; @@ -73,12 +73,12 @@ public class Customer { } @Override - public boolean equals(final Object o) { + public boolean equals(final Object that) { boolean isEqual = false; - if (this == o) { + if (this == that) { isEqual = true; - } else if (o != null && getClass() == o.getClass()) { - final Customer customer = (Customer) o; + } else if (that != null && getClass() == that.getClass()) { + final Customer customer = (Customer) that; if (getId() == customer.getId()) { isEqual = true; } diff --git a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java index 545e46a5e..5d6aa38f5 100644 --- a/dao/src/main/java/com/iluwatar/dao/CustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/CustomerDao.java @@ -20,12 +20,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; import java.util.stream.Stream; /** - * * In an application the Data Access Object (DAO) is a part of Data access layer. It is an object * that provides an interface to some type of persistence mechanism. By mapping application calls * to the persistence layer, DAO provides some specific data operations without exposing details @@ -33,25 +33,25 @@ import java.util.stream.Stream; * data accesses the application needs, in terms of domain-specific objects and data types * (the public interface of the DAO), from how these needs can be satisfied with a specific DBMS, * database schema, etc. - *

    - * Any change in the way data is stored and retrieved will not change the client code as the client - * will be using interface and need not worry about exact source. + * + *

    Any change in the way data is stored and retrieved will not change the client code as the + * client will be using interface and need not worry about exact source. * * @see InMemoryCustomerDao - * @see DBCustomerDao + * @see DbCustomerDao */ public interface CustomerDao { /** - * @return all the customers as a stream. The stream may be lazily or eagerly evaluated based on the - * implementation. The stream must be closed after use. + * @return all the customers as a stream. The stream may be lazily or eagerly evaluated based + * on the implementation. The stream must be closed after use. * @throws Exception if any error occurs. */ Stream getAll() throws Exception; /** * @param id unique identifier of the customer. - * @return customer with unique identifier id is found, null otherwise. + * @return customer with unique identifier id if found, null otherwise. * @throws Exception if any error occurs. */ Customer getById(int id) throws Exception; diff --git a/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java similarity index 71% rename from dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java rename to dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java index 950ecb1b3..91279b99e 100644 --- a/dao/src/main/java/com/iluwatar/dao/DBCustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java @@ -20,6 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; import java.sql.Connection; @@ -35,27 +36,39 @@ import java.util.stream.StreamSupport; import javax.sql.DataSource; /** - * + * An implementation of {@link CustomerDao} that persists customers in RDBMS. * */ -public class DBCustomerDao implements CustomerDao { +public class DbCustomerDao implements CustomerDao { private final DataSource dataSource; - public DBCustomerDao(DataSource dataSource) { + /** + * Creates an instance of {@link DbCustomerDao} which uses provided dataSource + * to store and retrieve customer information. + * + * @param dataSource a non-null dataSource. + */ + public DbCustomerDao(DataSource dataSource) { this.dataSource = dataSource; } + /** + * @return a lazily populated stream of customers. Note the stream returned must be closed to + * free all the acquired resources. The stream keeps an open connection to the database till + * it is complete or is closed manually. + */ @Override public Stream getAll() throws Exception { - + Connection connection; try { connection = getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT * FROM CUSTOMERS"); ResultSet resultSet = statement.executeQuery(); - return StreamSupport.stream(new Spliterators.AbstractSpliterator(Long.MAX_VALUE, Spliterator.ORDERED) { - + return StreamSupport.stream(new Spliterators.AbstractSpliterator(Long.MAX_VALUE, + Spliterator.ORDERED) { + @Override public boolean tryAdvance(Consumer action) { try { @@ -65,15 +78,15 @@ public class DBCustomerDao implements CustomerDao { action.accept(createCustomer(resultSet)); return true; } catch (SQLException e) { - e.printStackTrace(); - return false; + throw new RuntimeException(e); } - }}, false).onClose(() -> mutedClose(connection)); + } + }, false).onClose(() -> mutedClose(connection)); } catch (SQLException e) { throw new Exception(e.getMessage(), e); } } - + private Connection getConnection() throws SQLException { return dataSource.getConnection(); } @@ -91,31 +104,40 @@ public class DBCustomerDao implements CustomerDao { resultSet.getString("FNAME"), resultSet.getString("LNAME")); } - + + /** + * {@inheritDoc} + */ @Override public Customer getById(int id) throws Exception { try (Connection connection = getConnection(); - PreparedStatement statement = connection.prepareStatement("SELECT * FROM CUSTOMERS WHERE ID = ?")) { - statement.setInt(1, id); - ResultSet resultSet = statement.executeQuery(); - if (resultSet.next()) { - return createCustomer(resultSet); - } else { - return null; - } + PreparedStatement statement = + connection.prepareStatement("SELECT * FROM CUSTOMERS WHERE ID = ?")) { + + statement.setInt(1, id); + ResultSet resultSet = statement.executeQuery(); + if (resultSet.next()) { + return createCustomer(resultSet); + } else { + return null; + } } catch (SQLException ex) { throw new Exception(ex.getMessage(), ex); } } + /** + * {@inheritDoc} + */ @Override public boolean add(Customer customer) throws Exception { if (getById(customer.getId()) != null) { return false; } - + try (Connection connection = getConnection(); - PreparedStatement statement = connection.prepareStatement("INSERT INTO CUSTOMERS VALUES (?,?,?)")) { + PreparedStatement statement = + connection.prepareStatement("INSERT INTO CUSTOMERS VALUES (?,?,?)")) { statement.setInt(1, customer.getId()); statement.setString(2, customer.getFirstName()); statement.setString(3, customer.getLastName()); @@ -126,10 +148,14 @@ public class DBCustomerDao implements CustomerDao { } } + /** + * {@inheritDoc} + */ @Override public boolean update(Customer customer) throws Exception { try (Connection connection = getConnection(); - PreparedStatement statement = connection.prepareStatement("UPDATE CUSTOMERS SET FNAME = ?, LNAME = ? WHERE ID = ?")) { + PreparedStatement statement = + connection.prepareStatement("UPDATE CUSTOMERS SET FNAME = ?, LNAME = ? WHERE ID = ?")) { statement.setString(1, customer.getFirstName()); statement.setString(2, customer.getLastName()); statement.setInt(3, customer.getId()); @@ -139,10 +165,14 @@ public class DBCustomerDao implements CustomerDao { } } + /** + * {@inheritDoc} + */ @Override public boolean delete(Customer customer) throws Exception { try (Connection connection = getConnection(); - PreparedStatement statement = connection.prepareStatement("DELETE FROM CUSTOMERS WHERE ID = ?")) { + PreparedStatement statement = + connection.prepareStatement("DELETE FROM CUSTOMERS WHERE ID = ?")) { statement.setInt(1, customer.getId()); return statement.executeUpdate() > 0; } catch (SQLException ex) { diff --git a/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java index 62276d5c5..63576b99a 100644 --- a/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java @@ -20,6 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; import java.util.HashMap; diff --git a/dao/src/test/java/com/iluwatar/dao/AppTest.java b/dao/src/test/java/com/iluwatar/dao/AppTest.java index 08babc62a..169fc046e 100644 --- a/dao/src/test/java/com/iluwatar/dao/AppTest.java +++ b/dao/src/test/java/com/iluwatar/dao/AppTest.java @@ -20,6 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; import org.junit.Test; diff --git a/dao/src/test/java/com/iluwatar/dao/CustomerTest.java b/dao/src/test/java/com/iluwatar/dao/CustomerTest.java index 600b5ba3f..6a02fd6be 100644 --- a/dao/src/test/java/com/iluwatar/dao/CustomerTest.java +++ b/dao/src/test/java/com/iluwatar/dao/CustomerTest.java @@ -20,6 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; import static org.junit.Assert.assertEquals; diff --git a/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java b/dao/src/test/java/com/iluwatar/dao/DbCustomerDaoTest.java similarity index 84% rename from dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java rename to dao/src/test/java/com/iluwatar/dao/DbCustomerDaoTest.java index 243d9b3ac..470b33557 100644 --- a/dao/src/test/java/com/iluwatar/dao/DBCustomerDaoTest.java +++ b/dao/src/test/java/com/iluwatar/dao/DbCustomerDaoTest.java @@ -28,33 +28,51 @@ import org.mockito.Mockito; import de.bechte.junit.runners.context.HierarchicalContextRunner; +/** + * Tests {@link DbCustomerDao}. + */ @RunWith(HierarchicalContextRunner.class) -public class DBCustomerDaoTest { +public class DbCustomerDaoTest { private static final String DB_URL = "jdbc:h2:~/dao:customerdb"; - private DBCustomerDao dao; + private DbCustomerDao dao; private Customer existingCustomer = new Customer(1, "Freddy", "Krueger"); + /** + * Creates customers schema. + * @throws SQLException if there is any error while creating schema. + */ @Before public void createSchema() throws SQLException { try (Connection connection = DriverManager.getConnection(DB_URL); Statement statement = connection.createStatement()) { - statement.execute("CREATE TABLE CUSTOMERS (ID NUMBER, FNAME VARCHAR(100), LNAME VARCHAR(100))"); + statement.execute("CREATE TABLE CUSTOMERS (ID NUMBER, FNAME VARCHAR(100)," + + " LNAME VARCHAR(100))"); } } + /** + * Represents the scenario where DB connectivity is present. + */ public class ConnectionSuccess { + /** + * Setup for connection success scenario. + * @throws Exception if any error occurs. + */ @Before public void setUp() throws Exception { JdbcDataSource dataSource = new JdbcDataSource(); dataSource.setURL(DB_URL); - dao = new DBCustomerDao(dataSource); + dao = new DbCustomerDao(dataSource); boolean result = dao.add(existingCustomer); assertTrue(result); } - public class NonExistantCustomer { + /** + * Represents the scenario when DAO operations are being performed on a non existing customer. + */ + public class NonExistingCustomer { @Test public void addingShouldResultInSuccess() throws Exception { @@ -97,6 +115,11 @@ public class DBCustomerDaoTest { } } + /** + * Represents a scenario where DAO operations are being performed on an already existing + * customer. + * + */ public class ExistingCustomer { @Test @@ -135,14 +158,23 @@ public class DBCustomerDaoTest { } } - public class DBConnectivityIssue { + /** + * Represents a scenario where DB connectivity is not present due to network issue, or + * DB service unavailable. + * + */ + public class ConnectivityIssue { private static final String EXCEPTION_CAUSE = "Connection not available"; @Rule public ExpectedException exception = ExpectedException.none(); + /** + * setup a connection failure scenario. + * @throws SQLException if any error occurs. + */ @Before public void setUp() throws SQLException { - dao = new DBCustomerDao(mockedDatasource()); + dao = new DbCustomerDao(mockedDatasource()); exception.expect(Exception.class); exception.expectMessage(EXCEPTION_CAUSE); } @@ -186,6 +218,10 @@ public class DBCustomerDaoTest { } + /** + * Delete customer schema for fresh setup per test. + * @throws SQLException if any error occurs. + */ @After public void deleteSchema() throws SQLException { try (Connection connection = DriverManager.getConnection(DB_URL); diff --git a/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java b/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java index ca5180e97..49272728e 100644 --- a/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java +++ b/dao/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java @@ -20,6 +20,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ + package com.iluwatar.dao; import static org.junit.Assert.assertEquals; @@ -36,6 +37,9 @@ import org.junit.runner.RunWith; import de.bechte.junit.runners.context.HierarchicalContextRunner; +/** + * Tests {@link InMemoryCustomerDao}. + */ @RunWith(HierarchicalContextRunner.class) public class InMemoryCustomerDaoTest { @@ -47,8 +51,12 @@ public class InMemoryCustomerDaoTest { dao = new InMemoryCustomerDao(); dao.add(CUSTOMER); } - - public class NonExistantCustomer { + + /** + * Represents the scenario when the DAO operations are being performed on a non existent + * customer. + */ + public class NonExistingCustomer { @Test public void addingShouldResultInSuccess() throws Exception { @@ -91,6 +99,10 @@ public class InMemoryCustomerDaoTest { } } + /** + * Represents the scenario when the DAO operations are being performed on an already existing + * customer. + */ public class ExistingCustomer { @Test From 6e4b2699398231f47b0bcf75b22336d4d470fd27 Mon Sep 17 00:00:00 2001 From: gwildor28 Date: Thu, 24 Mar 2016 18:13:37 +0000 Subject: [PATCH 080/123] Update according to review comments #397 - Added descriptions - Added junit tests - Added javadoc - Added index.md - Added class diagrams --- mutex/etc/mutex.png | Bin 0 -> 12737 bytes mutex/index.md | 30 ++++++++++++++++ mutex/pom.xml | 9 ++++- .../src/main/java/com/iluwatar/mutex/App.java | 10 +++++- .../src/main/java/com/iluwatar/mutex/Jar.java | 14 ++++++-- .../main/java/com/iluwatar/mutex/Lock.java | 2 +- .../main/java/com/iluwatar/mutex/Mutex.java | 16 +++++++-- .../main/java/com/iluwatar/mutex/Thief.java | 19 +++++++--- .../test/java/com/iluwatar/mutex/AppTest.java | 34 ++++++++++++++++++ semaphore/etc/semaphore.png | Bin 0 -> 30089 bytes semaphore/index.md | 33 +++++++++++++++++ semaphore/pom.xml | 9 ++++- .../main/java/com/iluwatar/semaphore/App.java | 9 ++++- .../java/com/iluwatar/semaphore/Customer.java | 25 +++++++++---- .../java/com/iluwatar/semaphore/Fruit.java | 2 +- .../com/iluwatar/semaphore/FruitBowl.java | 16 +++++++-- .../com/iluwatar/semaphore/FruitShop.java | 31 ++++++++++++---- .../java/com/iluwatar/semaphore/Lock.java | 2 +- .../com/iluwatar/semaphore/Semaphore.java | 12 +++++-- .../java/com/iluwatar/semaphore/AppTest.java | 34 ++++++++++++++++++ 20 files changed, 273 insertions(+), 34 deletions(-) create mode 100644 mutex/etc/mutex.png create mode 100644 mutex/index.md create mode 100644 mutex/src/test/java/com/iluwatar/mutex/AppTest.java create mode 100644 semaphore/etc/semaphore.png create mode 100644 semaphore/index.md create mode 100644 semaphore/src/test/java/com/iluwatar/semaphore/AppTest.java diff --git a/mutex/etc/mutex.png b/mutex/etc/mutex.png new file mode 100644 index 0000000000000000000000000000000000000000..3b7c966f87dffab72c65a77c2578c801086f7d9e GIT binary patch literal 12737 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 VGkgbka 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 RF7OUbSwT&{Qq~OqKL9K>lx6?` literal 0 HcmV?d00001 diff --git a/mutex/index.md b/mutex/index.md new file mode 100644 index 000000000..24edad7eb --- /dev/null +++ b/mutex/index.md @@ -0,0 +1,30 @@ +--- +layout: pattern +title: Mutex +folder: mutex +permalink: /patterns/mutex/ +categories: Lock +tags: + - Java + - Difficulty-Beginner +--- + +## Also known as +Mutual Exclusion Lock +Binary Semaphore + +## Intent +Create a lock which only allows a single thread to access a resource at any one instant. + +![alt text](./etc/mutex.png "Mutex") + +## Applicability +Use a Mutex when + +* you need to prevent two threads accessing a critical section at the same time +* concurrent access to a resource could lead to a race condition + +## Credits + +* [Lock (computer science)] (http://en.wikipedia.org/wiki/Lock_(computer_science)) +* [Semaphores] (http://tutorials.jenkov.com/java-concurrency/semaphores.html) diff --git a/mutex/pom.xml b/mutex/pom.xml index 5b7058083..07c2d793c 100644 --- a/mutex/pom.xml +++ b/mutex/pom.xml @@ -2,7 +2,7 @@ + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.11.0-SNAPSHOT + + data-mapper + + + + junit + junit + test + + + log4j + log4j + + + + + + + + + + src/main/resources + + + src/main/resources + + log4j.xml + + .. + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.6 + + + log4j.xml + + + + true + + + + + + + + diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/App.java b/data-mapper/src/main/java/com/iluwatar/datamapper/App.java new file mode 100644 index 000000000..6345b5a4c --- /dev/null +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/App.java @@ -0,0 +1,105 @@ +/** + * The MIT License Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.util.Optional; +import java.util.UUID; + +import org.apache.log4j.Logger; + +/** + * + * The Data Mapper (DM) is a layer of software that separates the in-memory objects from the + * database. Its responsibility is to transfer data between the two and also to isolate them from + * each other. With Data Mapper the in-memory objects needn't know even that there's a database + * present; they need no SQL interface code, and certainly no knowledge of the database schema. (The + * database schema is always ignorant of the objects that use it.) Since it's a form of Mapper , + * Data Mapper itself is even unknown to the domain layer. + *

    + * The below example demonstrates basic CRUD operations: select, add, update, and delete. + * + */ +public final class App { + + private static Logger log = Logger.getLogger(App.class); + + + private static final String DB_TYPE_ORACLE = "Oracle"; + private static final String DB_TYPE_MYSQL = "MySQL"; + + + /** + * Program entry point. + * + * @param args command line args. + */ + public static final void main(final String... args) { + + if (log.isInfoEnabled() & args.length > 0) { + log.debug("App.main(), db type: " + args[0]); + } + + StudentDataMapper mapper = null; + + /* Check the desired db type from runtime arguments */ + if (args.length == 0) { + + /* Create default data mapper for mysql */ + mapper = new StudentMySQLDataMapper(); + + } else if (args.length > 0 && DB_TYPE_ORACLE.equalsIgnoreCase(args[0])) { + + /* Create new data mapper for mysql */ + mapper = new StudentMySQLDataMapper(); + + } else if (args.length > 0 && DB_TYPE_MYSQL.equalsIgnoreCase(args[0])) { + + /* Create new data mapper for oracle */ + mapper = new StudentMySQLDataMapper(); + } else { + + /* Don't couple any Data Mapper to java.sql.SQLException */ + throw new DataMapperException("Following data source(" + args[0] + ") is not supported"); + } + + /* Create new student */ + Student student = new Student(UUID.randomUUID(), 1, "Adam", 'A'); + + /* Add student in respectibe db */ + mapper.insert(student); + + /* Find this student */ + final Optional studentToBeFound = mapper.find(student.getGuId()); + + if (log.isDebugEnabled()) { + log.debug("App.main(), db find returned : " + studentToBeFound); + } + + /* Update existing student object */ + student = new Student(student.getGuId(), 1, "AdamUpdated", 'A'); + + /* Update student in respectibe db */ + mapper.update(student); + + /* Delete student in db */ + mapper.delete(student); + } + + private App() {} +} diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/DataMapperException.java b/data-mapper/src/main/java/com/iluwatar/datamapper/DataMapperException.java new file mode 100644 index 000000000..7cc66d5af --- /dev/null +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/DataMapperException.java @@ -0,0 +1,79 @@ +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +/** + * + * @author amit.dixit + * + */ +public final class DataMapperException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + /** + * Constructs a new runtime exception with {@code null} as its detail message. The cause is not + * initialized, and may subsequently be initialized by a call to {@link #initCause}. + */ + public DataMapperException() { + super(); + } + + + /** + * Constructs a new runtime exception with the specified detail message. The cause is not + * initialized, and may subsequently be initialized by a call to {@link #initCause}. + * + * @param message the detail message. The detail message is saved for later retrieval by the + * {@link #getMessage()} method. + */ + public DataMapperException(final String message) { + super(message); + } + + /** + * Constructs a new runtime exception with the specified detail message and cause. + *

    + * Note that the detail message associated with {@code cause} is not automatically + * incorporated in this runtime exception's detail message. + * + * @param message the detail message (which is saved for later retrieval by the + * {@link #getMessage()} method). + * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method). + * (A null value is permitted, and indicates that the cause is nonexistent or + * unknown.) + */ + public DataMapperException(final String message, final Throwable cause) { + super(message, cause); + } + + /** + * Constructs a new runtime exception with the specified cause and a detail message of + * (cause==null ? null : cause.toString()) (which typically contains the class and detail + * message of cause). This constructor is useful for runtime exceptions that are little + * more than wrappers for other throwables. + * + * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method). + * (A null value is permitted, and indicates that the cause is nonexistent or + * unknown.) + */ + public DataMapperException(final Throwable cause) { + super(cause); + } +} diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/Student.java b/data-mapper/src/main/java/com/iluwatar/datamapper/Student.java new file mode 100644 index 000000000..920d4d9ee --- /dev/null +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/Student.java @@ -0,0 +1,83 @@ +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.io.Serializable; +import java.util.UUID; + +public final class Student implements Serializable { + + private static final long serialVersionUID = 1L; + + private UUID guid; + private int studentID; + private String name; + private char grade; + + public Student() { + this.guid = UUID.randomUUID(); + } + + public Student(final UUID guid, final int studentID, final String name, final char grade) { + super(); + + this.guid = guid; + this.studentID = studentID; + this.name = name; + this.grade = grade; + } + + + public Student(final UUID guid) { + this.guid = guid; + } + + public final int getStudentId() { + return studentID; + } + + public final void setStudentId(final int studentID) { + this.studentID = studentID; + } + + public final String getName() { + return name; + } + + public final void setName(final String name) { + this.name = name; + } + + public final char getGrade() { + return grade; + } + + public final void setGrade(final char grade) { + this.grade = grade; + } + + public final UUID getGuId() { + return guid; + } + + @Override + public final String toString() { + return "Student [guid=" + guid + ", studentID=" + studentID + ", name=" + name + ", grade=" + grade + "]"; + } +} diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java new file mode 100644 index 000000000..2493a9478 --- /dev/null +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java @@ -0,0 +1,33 @@ +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.util.Optional; +import java.util.UUID; + +public interface StudentDataMapper { + + public Optional find(final UUID uniqueID) throws DataMapperException; + + public void insert(final Student student) throws DataMapperException; + + public void update(final Student student) throws DataMapperException; + + public void delete(final Student student) throws DataMapperException; +} diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java new file mode 100644 index 000000000..7520bc923 --- /dev/null +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java @@ -0,0 +1,160 @@ +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Optional; +import java.util.UUID; + +public final class StudentMySQLDataMapper implements StudentDataMapper { + + @Override + public final Optional find(final UUID uniqueID) throws DataMapperException { + + try { + /* OracleDriver class cant be initilized directly */ + Class.forName("oracle.jdbc.driver.OracleDriver"); + + /* Create new connection */ + final Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/MySQL", "username", "password"); + + /* Create new Oracle compliant sql statement */ + final String statement = "SELECT `guid`, `grade`, `studentID`, `name` FROM `students` where `guid`=?"; + final PreparedStatement dbStatement = connection.prepareStatement(statement); + + /* Set unique id in sql statement */ + dbStatement.setString(1, uniqueID.toString()); + + /* Execute the sql query */ + final ResultSet rs = dbStatement.executeQuery(); + + while (rs.next()) { + + /* Create new student */ + final Student student = new Student(UUID.fromString(rs.getString("guid"))); + + /* Set all values from database in java object */ + student.setName(rs.getString("name")); + student.setGrade(rs.getString("grade").charAt(0)); + student.setStudentId(rs.getInt("studentID")); + + return Optional.of(student); + } + } catch (final SQLException | ClassNotFoundException e) { + + /* Don't couple any Data Mapper to java.sql.SQLException */ + throw new DataMapperException("Error occured reading Students from MySQL data source.", e); + } + + /* Return empty value */ + return Optional.empty(); + } + + @Override + public final void update(final Student student) throws DataMapperException { + try { + + /* OracleDriver class cant be initilized directly */ + Class.forName("oracle.jdbc.driver.OracleDriver"); + + /* Create new connection */ + final Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/MySQL", "username", "password"); + + /* Create new Oracle compliant sql statement */ + final String statement = "UPDATE `students` SET `grade`=?, `studentID`=?, `name`=? where `guid`=?"; + + final PreparedStatement dbStatement = connection.prepareStatement(statement); + + /* Set java object values in sql statement */ + dbStatement.setString(1, Character.toString(student.getGrade())); + dbStatement.setInt(2, student.getStudentId()); + dbStatement.setString(3, student.getName()); + dbStatement.setString(4, student.getGuId().toString()); + + /* Execute the sql query */ + dbStatement.executeUpdate(); + + } catch (final SQLException | ClassNotFoundException e) { + + /* Don't couple any Data Mapper to java.sql.SQLException */ + throw new DataMapperException("Error occured reading Students from MySQL data source.", e); + } + } + + @Override + public final void insert(final Student student) throws DataMapperException { + try { + + /* OracleDriver class cant be initilized directly */ + Class.forName("oracle.jdbc.driver.OracleDriver"); + + /* Create new connection */ + final Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/MySQL", "username", "password"); + + /* Create new Oracle compliant sql statement */ + final String statement = "INSERT INTO `students` (`grade`, `studentID`, `name`, `guid`) VALUES (?, ?, ?, ?)"; + final PreparedStatement dbStatement = connection.prepareStatement(statement); + + /* Set java object values in sql statement */ + dbStatement.setString(1, Character.toString(student.getGrade())); + dbStatement.setInt(2, student.getStudentId()); + dbStatement.setString(3, student.getName()); + dbStatement.setString(4, student.getGuId().toString()); + + /* Execute the sql query */ + dbStatement.executeUpdate(); + + } catch (final SQLException | ClassNotFoundException e) { + + /* Don't couple any Data Mapper to java.sql.SQLException */ + throw new DataMapperException("Error occured reading Students from MySQL data source.", e); + } + } + + @Override + public final void delete(final Student student) throws DataMapperException { + try { + + /* OracleDriver class cant be initilized directly */ + Class.forName("oracle.jdbc.driver.OracleDriver"); + + /* Create new connection */ + final Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/MySQL", "username", "password"); + + /* Create new Oracle compliant sql statement */ + final String statement = "DELETE FROM `students` where `guid`=?"; + final PreparedStatement dbStatement = connection.prepareStatement(statement); + + /* Set java object values in sql statement */ + dbStatement.setString(1, student.getGuId().toString()); + + /* Execute the sql query */ + dbStatement.executeUpdate(); + + } catch (final SQLException | ClassNotFoundException e) { + + /* Don't couple any Data Mapper to java.sql.SQLException */ + throw new DataMapperException("Error occured reading Students from MySQL data source.", e); + } + } +} diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java new file mode 100644 index 000000000..0b6b7ebbf --- /dev/null +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java @@ -0,0 +1,160 @@ +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Optional; +import java.util.UUID; + +public final class StudentOracleDataMapper implements StudentDataMapper { + + @Override + public final Optional find(final UUID uniqueID) throws DataMapperException { + + try { + /* OracleDriver class cant be initilized directly */ + Class.forName("oracle.jdbc.driver.OracleDriver"); + + /* Create new connection */ + final Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:Oracle", "username", "password"); + + /* Create new Oracle compliant sql statement */ + final String statement = "SELECT `guid`, `grade`, `studentID`, `name` FROM `students` where `guid`=?"; + final PreparedStatement dbStatement = connection.prepareStatement(statement); + + /* Set unique id in sql statement */ + dbStatement.setString(1, uniqueID.toString()); + + /* Execute the sql query */ + final ResultSet rs = dbStatement.executeQuery(); + + while (rs.next()) { + + /* Create new student */ + final Student student = new Student(UUID.fromString(rs.getString("guid"))); + + /* Set all values from database in java object */ + student.setName(rs.getString("name")); + student.setGrade(rs.getString("grade").charAt(0)); + student.setStudentId(rs.getInt("studentID")); + + return Optional.of(student); + } + } catch (final SQLException | ClassNotFoundException e) { + + /* Don't couple any Data Mapper to java.sql.SQLException */ + throw new DataMapperException("Error occured reading Students from Oracle data source.", e); + } + + /* Return empty value */ + return Optional.empty(); + } + + @Override + public final void update(final Student student) throws DataMapperException { + try { + + /* OracleDriver class cant be initilized directly */ + Class.forName("oracle.jdbc.driver.OracleDriver"); + + /* Create new connection */ + final Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:Oracle", "username", "password"); + + /* Create new Oracle compliant sql statement */ + final String statement = "UPDATE `students` SET `grade`=?, `studentID`=?, `name`=? where `guid`=?"; + + final PreparedStatement dbStatement = connection.prepareStatement(statement); + + /* Set java object values in sql statement */ + dbStatement.setString(1, Character.toString(student.getGrade())); + dbStatement.setInt(2, student.getStudentId()); + dbStatement.setString(3, student.getName()); + dbStatement.setString(4, student.getGuId().toString()); + + /* Execute the sql query */ + dbStatement.executeUpdate(); + + } catch (final SQLException | ClassNotFoundException e) { + + /* Don't couple any Data Mapper to java.sql.SQLException */ + throw new DataMapperException("Error occured reading Students from Oracle data source.", e); + } + } + + @Override + public final void insert(final Student student) throws DataMapperException { + try { + + /* OracleDriver class cant be initilized directly */ + Class.forName("oracle.jdbc.driver.OracleDriver"); + + /* Create new connection */ + final Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:Oracle", "username", "password"); + + /* Create new Oracle compliant sql statement */ + final String statement = "INSERT INTO `students` (`grade`, `studentID`, `name`, `guid`) VALUES (?, ?, ?, ?)"; + final PreparedStatement dbStatement = connection.prepareStatement(statement); + + /* Set java object values in sql statement */ + dbStatement.setString(1, Character.toString(student.getGrade())); + dbStatement.setInt(2, student.getStudentId()); + dbStatement.setString(3, student.getName()); + dbStatement.setString(4, student.getGuId().toString()); + + /* Execute the sql query */ + dbStatement.executeUpdate(); + + } catch (final SQLException | ClassNotFoundException e) { + + /* Don't couple any Data Mapper to java.sql.SQLException */ + throw new DataMapperException("Error occured reading Students from Oracle data source.", e); + } + } + + @Override + public final void delete(final Student student) throws DataMapperException { + try { + + /* OracleDriver class cant be initilized directly */ + Class.forName("oracle.jdbc.driver.OracleDriver"); + + /* Create new connection */ + final Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:Oracle", "username", "password"); + + /* Create new Oracle compliant sql statement */ + final String statement = "DELETE FROM `students` where `guid`=?"; + final PreparedStatement dbStatement = connection.prepareStatement(statement); + + /* Set java object values in sql statement */ + dbStatement.setString(1, student.getGuId().toString()); + + /* Execute the sql query */ + dbStatement.executeUpdate(); + + } catch (final SQLException | ClassNotFoundException e) { + + /* Don't couple any Data Mapper to java.sql.SQLException */ + throw new DataMapperException("Error occured reading Students from Oracle data source.", e); + } + } +} diff --git a/data-mapper/src/main/resources/log4j.xml b/data-mapper/src/main/resources/log4j.xml new file mode 100644 index 000000000..b591c17e1 --- /dev/null +++ b/data-mapper/src/main/resources/log4j.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file From e2af78f417c076243cf8202b61a651485aac13b9 Mon Sep 17 00:00:00 2001 From: gwildor28 Date: Tue, 29 Mar 2016 13:42:54 +0100 Subject: [PATCH 091/123] Update According to Review Comments #397 Resubmit of updates --- mutex/{index.md => README.md} | 0 semaphore/{index.md => README.md} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename mutex/{index.md => README.md} (100%) rename semaphore/{index.md => README.md} (100%) diff --git a/mutex/index.md b/mutex/README.md similarity index 100% rename from mutex/index.md rename to mutex/README.md diff --git a/semaphore/index.md b/semaphore/README.md similarity index 100% rename from semaphore/index.md rename to semaphore/README.md From 1f27dbbf5bef39376ae700b7e6152d681308ddca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 2 Apr 2016 19:51:03 +0300 Subject: [PATCH 092/123] Set version for milestone 1.11.0 --- abstract-factory/pom.xml | 2 +- adapter/pom.xml | 2 +- async-method-invocation/pom.xml | 2 +- bridge/pom.xml | 2 +- builder/pom.xml | 2 +- business-delegate/pom.xml | 2 +- caching/pom.xml | 2 +- callback/pom.xml | 2 +- chain/pom.xml | 2 +- command/pom.xml | 2 +- composite/pom.xml | 2 +- dao/pom.xml | 2 +- decorator/pom.xml | 2 +- delegation/pom.xml | 2 +- dependency-injection/pom.xml | 2 +- double-checked-locking/pom.xml | 2 +- double-dispatch/pom.xml | 2 +- event-aggregator/pom.xml | 2 +- event-driven-architecture/pom.xml | 2 +- execute-around/pom.xml | 2 +- facade/pom.xml | 2 +- factory-kit/pom.xml | 2 +- factory-method/pom.xml | 2 +- feature-toggle/pom.xml | 2 +- fluentinterface/pom.xml | 2 +- flux/pom.xml | 2 +- flyweight/pom.xml | 2 +- front-controller/pom.xml | 2 +- half-sync-half-async/pom.xml | 2 +- intercepting-filter/pom.xml | 2 +- interpreter/pom.xml | 2 +- iterator/pom.xml | 2 +- layers/pom.xml | 2 +- lazy-loading/pom.xml | 2 +- mediator/pom.xml | 2 +- memento/pom.xml | 2 +- message-channel/pom.xml | 2 +- model-view-controller/pom.xml | 2 +- model-view-presenter/pom.xml | 2 +- monad/pom.xml | 2 +- monostate/pom.xml | 2 +- multiton/pom.xml | 2 +- mute-idiom/pom.xml | 2 +- naked-objects/dom/pom.xml | 2 +- naked-objects/fixture/pom.xml | 2 +- naked-objects/integtests/pom.xml | 2 +- naked-objects/pom.xml | 8 ++++---- naked-objects/webapp/pom.xml | 2 +- null-object/pom.xml | 2 +- object-pool/pom.xml | 2 +- observer/pom.xml | 2 +- poison-pill/pom.xml | 2 +- pom.xml | 2 +- private-class-data/pom.xml | 2 +- producer-consumer/pom.xml | 2 +- property/pom.xml | 2 +- prototype/pom.xml | 2 +- proxy/pom.xml | 2 +- publish-subscribe/pom.xml | 2 +- reactor/pom.xml | 2 +- reader-writer-lock/pom.xml | 2 +- repository/pom.xml | 2 +- resource-acquisition-is-initialization/pom.xml | 2 +- servant/pom.xml | 2 +- service-layer/pom.xml | 2 +- service-locator/pom.xml | 2 +- singleton/pom.xml | 2 +- specification/pom.xml | 2 +- state/pom.xml | 2 +- step-builder/pom.xml | 2 +- strategy/pom.xml | 2 +- template-method/pom.xml | 2 +- thread-pool/pom.xml | 2 +- tolerant-reader/pom.xml | 2 +- twin/pom.xml | 2 +- value-object/pom.xml | 2 +- visitor/pom.xml | 2 +- 77 files changed, 80 insertions(+), 80 deletions(-) diff --git a/abstract-factory/pom.xml b/abstract-factory/pom.xml index 32171a5f2..7971a6e4c 100644 --- a/abstract-factory/pom.xml +++ b/abstract-factory/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 abstract-factory diff --git a/adapter/pom.xml b/adapter/pom.xml index 3c231d60a..31a9a6671 100644 --- a/adapter/pom.xml +++ b/adapter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 adapter diff --git a/async-method-invocation/pom.xml b/async-method-invocation/pom.xml index d640b890e..236a5e73a 100644 --- a/async-method-invocation/pom.xml +++ b/async-method-invocation/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 async-method-invocation diff --git a/bridge/pom.xml b/bridge/pom.xml index ba474af55..e50c166b2 100644 --- a/bridge/pom.xml +++ b/bridge/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 bridge diff --git a/builder/pom.xml b/builder/pom.xml index 66f679cc6..8b01a68aa 100644 --- a/builder/pom.xml +++ b/builder/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 builder diff --git a/business-delegate/pom.xml b/business-delegate/pom.xml index 920672062..70f2e5b1c 100644 --- a/business-delegate/pom.xml +++ b/business-delegate/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 business-delegate diff --git a/caching/pom.xml b/caching/pom.xml index 1dad83d0e..74cda701a 100644 --- a/caching/pom.xml +++ b/caching/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 caching diff --git a/callback/pom.xml b/callback/pom.xml index 55b1abbc5..d4c035bbd 100644 --- a/callback/pom.xml +++ b/callback/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 callback diff --git a/chain/pom.xml b/chain/pom.xml index 4a0c5a96a..96fba0795 100644 --- a/chain/pom.xml +++ b/chain/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 chain diff --git a/command/pom.xml b/command/pom.xml index 69c499371..d4f8e5910 100644 --- a/command/pom.xml +++ b/command/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 command diff --git a/composite/pom.xml b/composite/pom.xml index 551dc1f2d..bf12366b1 100644 --- a/composite/pom.xml +++ b/composite/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 composite diff --git a/dao/pom.xml b/dao/pom.xml index 05ab2b22a..f5ddf4943 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 dao diff --git a/decorator/pom.xml b/decorator/pom.xml index d8f253bd2..ba77f55ae 100644 --- a/decorator/pom.xml +++ b/decorator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 decorator diff --git a/delegation/pom.xml b/delegation/pom.xml index 1cfb3e4e3..dc7676d33 100644 --- a/delegation/pom.xml +++ b/delegation/pom.xml @@ -30,7 +30,7 @@ java-design-patterns com.iluwatar - 1.11.0-SNAPSHOT + 1.11.0 4.0.0 diff --git a/dependency-injection/pom.xml b/dependency-injection/pom.xml index cb210ca5a..4e5c562fd 100644 --- a/dependency-injection/pom.xml +++ b/dependency-injection/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 dependency-injection diff --git a/double-checked-locking/pom.xml b/double-checked-locking/pom.xml index e3b4c5bff..98f5311d6 100644 --- a/double-checked-locking/pom.xml +++ b/double-checked-locking/pom.xml @@ -27,7 +27,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 double-checked-locking diff --git a/double-dispatch/pom.xml b/double-dispatch/pom.xml index 8414a6aa1..9f5f6044c 100644 --- a/double-dispatch/pom.xml +++ b/double-dispatch/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 double-dispatch diff --git a/event-aggregator/pom.xml b/event-aggregator/pom.xml index 6627bdb1a..2488ccb68 100644 --- a/event-aggregator/pom.xml +++ b/event-aggregator/pom.xml @@ -28,7 +28,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 event-aggregator diff --git a/event-driven-architecture/pom.xml b/event-driven-architecture/pom.xml index b0b588c6b..ad0642b5f 100644 --- a/event-driven-architecture/pom.xml +++ b/event-driven-architecture/pom.xml @@ -31,7 +31,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 event-driven-architecture diff --git a/execute-around/pom.xml b/execute-around/pom.xml index a8654ac77..2b2bfb242 100644 --- a/execute-around/pom.xml +++ b/execute-around/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 execute-around diff --git a/facade/pom.xml b/facade/pom.xml index daa3853cd..8d9dcfc8a 100644 --- a/facade/pom.xml +++ b/facade/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 facade diff --git a/factory-kit/pom.xml b/factory-kit/pom.xml index c336c5f49..26d53871c 100644 --- a/factory-kit/pom.xml +++ b/factory-kit/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 factory-kit diff --git a/factory-method/pom.xml b/factory-method/pom.xml index 25ca9f726..84f9484c8 100644 --- a/factory-method/pom.xml +++ b/factory-method/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 factory-method diff --git a/feature-toggle/pom.xml b/feature-toggle/pom.xml index 5f732f5a3..e86c54b24 100644 --- a/feature-toggle/pom.xml +++ b/feature-toggle/pom.xml @@ -30,7 +30,7 @@ java-design-patterns com.iluwatar - 1.11.0-SNAPSHOT + 1.11.0 4.0.0 diff --git a/fluentinterface/pom.xml b/fluentinterface/pom.xml index 5faf359d1..6c9910d4c 100644 --- a/fluentinterface/pom.xml +++ b/fluentinterface/pom.xml @@ -29,7 +29,7 @@ java-design-patterns com.iluwatar - 1.11.0-SNAPSHOT + 1.11.0 4.0.0 diff --git a/flux/pom.xml b/flux/pom.xml index 25182d784..07e0bb6a7 100644 --- a/flux/pom.xml +++ b/flux/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 flux diff --git a/flyweight/pom.xml b/flyweight/pom.xml index a066c8924..e4c5fe5b5 100644 --- a/flyweight/pom.xml +++ b/flyweight/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 flyweight diff --git a/front-controller/pom.xml b/front-controller/pom.xml index 8cb7ddc6d..0b3e12bf6 100644 --- a/front-controller/pom.xml +++ b/front-controller/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 front-controller diff --git a/half-sync-half-async/pom.xml b/half-sync-half-async/pom.xml index 357cabf4b..7017b5454 100644 --- a/half-sync-half-async/pom.xml +++ b/half-sync-half-async/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 half-sync-half-async diff --git a/intercepting-filter/pom.xml b/intercepting-filter/pom.xml index 0ff3be16b..92c814c43 100644 --- a/intercepting-filter/pom.xml +++ b/intercepting-filter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 intercepting-filter diff --git a/interpreter/pom.xml b/interpreter/pom.xml index 3a09ae310..8b6054442 100644 --- a/interpreter/pom.xml +++ b/interpreter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 interpreter diff --git a/iterator/pom.xml b/iterator/pom.xml index 2aeea6100..d3bce401d 100644 --- a/iterator/pom.xml +++ b/iterator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 iterator diff --git a/layers/pom.xml b/layers/pom.xml index c6e68150b..647862ad2 100644 --- a/layers/pom.xml +++ b/layers/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 com.iluwatar.layers layers diff --git a/lazy-loading/pom.xml b/lazy-loading/pom.xml index 0ca7272a0..e3ce27de0 100644 --- a/lazy-loading/pom.xml +++ b/lazy-loading/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 lazy-loading diff --git a/mediator/pom.xml b/mediator/pom.xml index 8e24da4b9..d310c5ef5 100644 --- a/mediator/pom.xml +++ b/mediator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 mediator diff --git a/memento/pom.xml b/memento/pom.xml index fc78cb65b..6ef97c893 100644 --- a/memento/pom.xml +++ b/memento/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 memento diff --git a/message-channel/pom.xml b/message-channel/pom.xml index a6f626a11..69ddc3fda 100644 --- a/message-channel/pom.xml +++ b/message-channel/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 message-channel diff --git a/model-view-controller/pom.xml b/model-view-controller/pom.xml index 4e8697171..c5e732382 100644 --- a/model-view-controller/pom.xml +++ b/model-view-controller/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 model-view-controller diff --git a/model-view-presenter/pom.xml b/model-view-presenter/pom.xml index c4f1c82dd..74cbef728 100644 --- a/model-view-presenter/pom.xml +++ b/model-view-presenter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 model-view-presenter model-view-presenter diff --git a/monad/pom.xml b/monad/pom.xml index ec5a14a8c..8d9381225 100644 --- a/monad/pom.xml +++ b/monad/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 monad diff --git a/monostate/pom.xml b/monostate/pom.xml index bb6119253..3c5882bac 100644 --- a/monostate/pom.xml +++ b/monostate/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 monostate diff --git a/multiton/pom.xml b/multiton/pom.xml index 6b07c638d..f142183a7 100644 --- a/multiton/pom.xml +++ b/multiton/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 multiton diff --git a/mute-idiom/pom.xml b/mute-idiom/pom.xml index bad6cb8c7..adf9c5e5a 100644 --- a/mute-idiom/pom.xml +++ b/mute-idiom/pom.xml @@ -21,7 +21,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 mute-idiom diff --git a/naked-objects/dom/pom.xml b/naked-objects/dom/pom.xml index 102c7178e..2b456a2bf 100644 --- a/naked-objects/dom/pom.xml +++ b/naked-objects/dom/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.11.0-SNAPSHOT + 1.11.0 naked-objects-dom diff --git a/naked-objects/fixture/pom.xml b/naked-objects/fixture/pom.xml index 6f476bc9b..467b55a81 100644 --- a/naked-objects/fixture/pom.xml +++ b/naked-objects/fixture/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.11.0-SNAPSHOT + 1.11.0 naked-objects-fixture diff --git a/naked-objects/integtests/pom.xml b/naked-objects/integtests/pom.xml index 6dbfc9946..3891467f7 100644 --- a/naked-objects/integtests/pom.xml +++ b/naked-objects/integtests/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.11.0-SNAPSHOT + 1.11.0 naked-objects-integtests diff --git a/naked-objects/pom.xml b/naked-objects/pom.xml index 451944aa5..6c72b74a3 100644 --- a/naked-objects/pom.xml +++ b/naked-objects/pom.xml @@ -15,7 +15,7 @@ java-design-patterns com.iluwatar - 1.11.0-SNAPSHOT + 1.11.0 naked-objects @@ -350,17 +350,17 @@ ${project.groupId} naked-objects-dom - 1.11.0-SNAPSHOT + 1.11.0 ${project.groupId} naked-objects-fixture - 1.11.0-SNAPSHOT + 1.11.0 ${project.groupId} naked-objects-webapp - 1.11.0-SNAPSHOT + 1.11.0 diff --git a/naked-objects/webapp/pom.xml b/naked-objects/webapp/pom.xml index c8b483513..41b4906a0 100644 --- a/naked-objects/webapp/pom.xml +++ b/naked-objects/webapp/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.11.0-SNAPSHOT + 1.11.0 naked-objects-webapp diff --git a/null-object/pom.xml b/null-object/pom.xml index e8b1d2465..7e058f0ef 100644 --- a/null-object/pom.xml +++ b/null-object/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 null-object diff --git a/object-pool/pom.xml b/object-pool/pom.xml index 5a2e4b8b6..078762d58 100644 --- a/object-pool/pom.xml +++ b/object-pool/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 object-pool diff --git a/observer/pom.xml b/observer/pom.xml index c8cca3edc..4249a6eab 100644 --- a/observer/pom.xml +++ b/observer/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 observer diff --git a/poison-pill/pom.xml b/poison-pill/pom.xml index 0cc3bd6e8..7bd8423c1 100644 --- a/poison-pill/pom.xml +++ b/poison-pill/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 poison-pill diff --git a/pom.xml b/pom.xml index 9127a865a..bdd7ec6a5 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 pom 2014 diff --git a/private-class-data/pom.xml b/private-class-data/pom.xml index 97d623b46..97ffcebe4 100644 --- a/private-class-data/pom.xml +++ b/private-class-data/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 private-class-data diff --git a/producer-consumer/pom.xml b/producer-consumer/pom.xml index 5c00b85f9..cbf247142 100644 --- a/producer-consumer/pom.xml +++ b/producer-consumer/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 producer-consumer diff --git a/property/pom.xml b/property/pom.xml index a5cd459df..7e4484437 100644 --- a/property/pom.xml +++ b/property/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 property diff --git a/prototype/pom.xml b/prototype/pom.xml index da1aa0fd2..1cc90720f 100644 --- a/prototype/pom.xml +++ b/prototype/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 prototype diff --git a/proxy/pom.xml b/proxy/pom.xml index 4640a1bba..8098953ae 100644 --- a/proxy/pom.xml +++ b/proxy/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 proxy diff --git a/publish-subscribe/pom.xml b/publish-subscribe/pom.xml index bfa4838e7..f0fdd85da 100644 --- a/publish-subscribe/pom.xml +++ b/publish-subscribe/pom.xml @@ -28,7 +28,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 publish-subscribe diff --git a/reactor/pom.xml b/reactor/pom.xml index 9e228ce6e..50698655a 100644 --- a/reactor/pom.xml +++ b/reactor/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 reactor diff --git a/reader-writer-lock/pom.xml b/reader-writer-lock/pom.xml index dbfafff66..673b56a4d 100644 --- a/reader-writer-lock/pom.xml +++ b/reader-writer-lock/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 reader-writer-lock diff --git a/repository/pom.xml b/repository/pom.xml index 82e4b4d67..2757a1268 100644 --- a/repository/pom.xml +++ b/repository/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 repository diff --git a/resource-acquisition-is-initialization/pom.xml b/resource-acquisition-is-initialization/pom.xml index e79ec99ee..8ea82f44d 100644 --- a/resource-acquisition-is-initialization/pom.xml +++ b/resource-acquisition-is-initialization/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 resource-acquisition-is-initialization diff --git a/servant/pom.xml b/servant/pom.xml index 0161e71f6..0f7d5a51f 100644 --- a/servant/pom.xml +++ b/servant/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 servant diff --git a/service-layer/pom.xml b/service-layer/pom.xml index ff88256a9..963efb32e 100644 --- a/service-layer/pom.xml +++ b/service-layer/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 service-layer diff --git a/service-locator/pom.xml b/service-locator/pom.xml index 4a64e8615..d03c3973d 100644 --- a/service-locator/pom.xml +++ b/service-locator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 service-locator diff --git a/singleton/pom.xml b/singleton/pom.xml index 66c02e664..cdbd72b69 100644 --- a/singleton/pom.xml +++ b/singleton/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 singleton diff --git a/specification/pom.xml b/specification/pom.xml index 125c34e0b..c43bfe733 100644 --- a/specification/pom.xml +++ b/specification/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 specification diff --git a/state/pom.xml b/state/pom.xml index 08b4846e6..46550ea14 100644 --- a/state/pom.xml +++ b/state/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 state diff --git a/step-builder/pom.xml b/step-builder/pom.xml index dde7443f9..b7427f22b 100644 --- a/step-builder/pom.xml +++ b/step-builder/pom.xml @@ -30,7 +30,7 @@ java-design-patterns com.iluwatar - 1.11.0-SNAPSHOT + 1.11.0 step-builder diff --git a/strategy/pom.xml b/strategy/pom.xml index 0b6b2dc4e..53bb7c513 100644 --- a/strategy/pom.xml +++ b/strategy/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 strategy diff --git a/template-method/pom.xml b/template-method/pom.xml index 0feb89c02..e114773fa 100644 --- a/template-method/pom.xml +++ b/template-method/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 template-method diff --git a/thread-pool/pom.xml b/thread-pool/pom.xml index a2e683359..c2b9d58b9 100644 --- a/thread-pool/pom.xml +++ b/thread-pool/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 thread-pool diff --git a/tolerant-reader/pom.xml b/tolerant-reader/pom.xml index 6c8c96b3c..efce12725 100644 --- a/tolerant-reader/pom.xml +++ b/tolerant-reader/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 tolerant-reader diff --git a/twin/pom.xml b/twin/pom.xml index dc23b26ef..6675b673a 100644 --- a/twin/pom.xml +++ b/twin/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 twin diff --git a/value-object/pom.xml b/value-object/pom.xml index 3cbb7bb86..ed699b553 100644 --- a/value-object/pom.xml +++ b/value-object/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 value-object diff --git a/visitor/pom.xml b/visitor/pom.xml index cdffb0151..666578d6b 100644 --- a/visitor/pom.xml +++ b/visitor/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT + 1.11.0 visitor From 398eb11b11710f0ebef8119d0c20c4519618ef36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 2 Apr 2016 19:55:04 +0300 Subject: [PATCH 093/123] Set version for the next development iteration --- abstract-factory/pom.xml | 2 +- adapter/pom.xml | 2 +- async-method-invocation/pom.xml | 2 +- bridge/pom.xml | 2 +- builder/pom.xml | 2 +- business-delegate/pom.xml | 2 +- caching/pom.xml | 2 +- callback/pom.xml | 2 +- chain/pom.xml | 2 +- command/pom.xml | 2 +- composite/pom.xml | 2 +- dao/pom.xml | 2 +- decorator/pom.xml | 2 +- delegation/pom.xml | 2 +- dependency-injection/pom.xml | 2 +- double-checked-locking/pom.xml | 2 +- double-dispatch/pom.xml | 2 +- event-aggregator/pom.xml | 2 +- event-driven-architecture/pom.xml | 2 +- execute-around/pom.xml | 2 +- facade/pom.xml | 2 +- factory-kit/pom.xml | 2 +- factory-method/pom.xml | 2 +- feature-toggle/pom.xml | 2 +- fluentinterface/pom.xml | 2 +- flux/pom.xml | 2 +- flyweight/pom.xml | 2 +- front-controller/pom.xml | 2 +- half-sync-half-async/pom.xml | 2 +- intercepting-filter/pom.xml | 2 +- interpreter/pom.xml | 2 +- iterator/pom.xml | 2 +- layers/pom.xml | 2 +- lazy-loading/pom.xml | 2 +- mediator/pom.xml | 2 +- memento/pom.xml | 2 +- message-channel/pom.xml | 2 +- model-view-controller/pom.xml | 2 +- model-view-presenter/pom.xml | 2 +- monad/pom.xml | 2 +- monostate/pom.xml | 2 +- multiton/pom.xml | 2 +- mute-idiom/pom.xml | 2 +- naked-objects/dom/pom.xml | 2 +- naked-objects/fixture/pom.xml | 2 +- naked-objects/integtests/pom.xml | 2 +- naked-objects/pom.xml | 8 ++++---- naked-objects/webapp/pom.xml | 2 +- null-object/pom.xml | 2 +- object-pool/pom.xml | 2 +- observer/pom.xml | 2 +- poison-pill/pom.xml | 2 +- pom.xml | 2 +- private-class-data/pom.xml | 2 +- producer-consumer/pom.xml | 2 +- property/pom.xml | 2 +- prototype/pom.xml | 2 +- proxy/pom.xml | 2 +- publish-subscribe/pom.xml | 2 +- reactor/pom.xml | 2 +- reader-writer-lock/pom.xml | 2 +- repository/pom.xml | 2 +- resource-acquisition-is-initialization/pom.xml | 2 +- servant/pom.xml | 2 +- service-layer/pom.xml | 2 +- service-locator/pom.xml | 2 +- singleton/pom.xml | 2 +- specification/pom.xml | 2 +- state/pom.xml | 2 +- step-builder/pom.xml | 2 +- strategy/pom.xml | 2 +- template-method/pom.xml | 2 +- thread-pool/pom.xml | 2 +- tolerant-reader/pom.xml | 2 +- twin/pom.xml | 2 +- value-object/pom.xml | 2 +- visitor/pom.xml | 2 +- 77 files changed, 80 insertions(+), 80 deletions(-) diff --git a/abstract-factory/pom.xml b/abstract-factory/pom.xml index 7971a6e4c..734020720 100644 --- a/abstract-factory/pom.xml +++ b/abstract-factory/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT abstract-factory diff --git a/adapter/pom.xml b/adapter/pom.xml index 31a9a6671..476eb4dce 100644 --- a/adapter/pom.xml +++ b/adapter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT adapter diff --git a/async-method-invocation/pom.xml b/async-method-invocation/pom.xml index 236a5e73a..292eb136b 100644 --- a/async-method-invocation/pom.xml +++ b/async-method-invocation/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT async-method-invocation diff --git a/bridge/pom.xml b/bridge/pom.xml index e50c166b2..6ac261286 100644 --- a/bridge/pom.xml +++ b/bridge/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT bridge diff --git a/builder/pom.xml b/builder/pom.xml index 8b01a68aa..7d83f6c28 100644 --- a/builder/pom.xml +++ b/builder/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT builder diff --git a/business-delegate/pom.xml b/business-delegate/pom.xml index 70f2e5b1c..3834b4c8f 100644 --- a/business-delegate/pom.xml +++ b/business-delegate/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT business-delegate diff --git a/caching/pom.xml b/caching/pom.xml index 74cda701a..7b1b22354 100644 --- a/caching/pom.xml +++ b/caching/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT caching diff --git a/callback/pom.xml b/callback/pom.xml index d4c035bbd..8615c4653 100644 --- a/callback/pom.xml +++ b/callback/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT callback diff --git a/chain/pom.xml b/chain/pom.xml index 96fba0795..a1cbffcb2 100644 --- a/chain/pom.xml +++ b/chain/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT chain diff --git a/command/pom.xml b/command/pom.xml index d4f8e5910..bb5cd78ff 100644 --- a/command/pom.xml +++ b/command/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT command diff --git a/composite/pom.xml b/composite/pom.xml index bf12366b1..6513a104e 100644 --- a/composite/pom.xml +++ b/composite/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT composite diff --git a/dao/pom.xml b/dao/pom.xml index f5ddf4943..26c35abb0 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT dao diff --git a/decorator/pom.xml b/decorator/pom.xml index ba77f55ae..58f2bb0ba 100644 --- a/decorator/pom.xml +++ b/decorator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT decorator diff --git a/delegation/pom.xml b/delegation/pom.xml index dc7676d33..33592dd82 100644 --- a/delegation/pom.xml +++ b/delegation/pom.xml @@ -30,7 +30,7 @@ java-design-patterns com.iluwatar - 1.11.0 + 1.12.0-SNAPSHOT 4.0.0 diff --git a/dependency-injection/pom.xml b/dependency-injection/pom.xml index 4e5c562fd..d8be9fcff 100644 --- a/dependency-injection/pom.xml +++ b/dependency-injection/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT dependency-injection diff --git a/double-checked-locking/pom.xml b/double-checked-locking/pom.xml index 98f5311d6..f8ac5fa2e 100644 --- a/double-checked-locking/pom.xml +++ b/double-checked-locking/pom.xml @@ -27,7 +27,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT double-checked-locking diff --git a/double-dispatch/pom.xml b/double-dispatch/pom.xml index 9f5f6044c..8896abd9f 100644 --- a/double-dispatch/pom.xml +++ b/double-dispatch/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT double-dispatch diff --git a/event-aggregator/pom.xml b/event-aggregator/pom.xml index 2488ccb68..1b1f289b2 100644 --- a/event-aggregator/pom.xml +++ b/event-aggregator/pom.xml @@ -28,7 +28,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT event-aggregator diff --git a/event-driven-architecture/pom.xml b/event-driven-architecture/pom.xml index ad0642b5f..cccf39088 100644 --- a/event-driven-architecture/pom.xml +++ b/event-driven-architecture/pom.xml @@ -31,7 +31,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT event-driven-architecture diff --git a/execute-around/pom.xml b/execute-around/pom.xml index 2b2bfb242..23a0a4a15 100644 --- a/execute-around/pom.xml +++ b/execute-around/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT execute-around diff --git a/facade/pom.xml b/facade/pom.xml index 8d9dcfc8a..a526243a1 100644 --- a/facade/pom.xml +++ b/facade/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT facade diff --git a/factory-kit/pom.xml b/factory-kit/pom.xml index 26d53871c..ea2aa5976 100644 --- a/factory-kit/pom.xml +++ b/factory-kit/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT factory-kit diff --git a/factory-method/pom.xml b/factory-method/pom.xml index 84f9484c8..7e1cfd28f 100644 --- a/factory-method/pom.xml +++ b/factory-method/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT factory-method diff --git a/feature-toggle/pom.xml b/feature-toggle/pom.xml index e86c54b24..cf479dd0a 100644 --- a/feature-toggle/pom.xml +++ b/feature-toggle/pom.xml @@ -30,7 +30,7 @@ java-design-patterns com.iluwatar - 1.11.0 + 1.12.0-SNAPSHOT 4.0.0 diff --git a/fluentinterface/pom.xml b/fluentinterface/pom.xml index 6c9910d4c..2e4129b2d 100644 --- a/fluentinterface/pom.xml +++ b/fluentinterface/pom.xml @@ -29,7 +29,7 @@ java-design-patterns com.iluwatar - 1.11.0 + 1.12.0-SNAPSHOT 4.0.0 diff --git a/flux/pom.xml b/flux/pom.xml index 07e0bb6a7..bd454ca23 100644 --- a/flux/pom.xml +++ b/flux/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT flux diff --git a/flyweight/pom.xml b/flyweight/pom.xml index e4c5fe5b5..a4221d762 100644 --- a/flyweight/pom.xml +++ b/flyweight/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT flyweight diff --git a/front-controller/pom.xml b/front-controller/pom.xml index 0b3e12bf6..c8f136ca8 100644 --- a/front-controller/pom.xml +++ b/front-controller/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT front-controller diff --git a/half-sync-half-async/pom.xml b/half-sync-half-async/pom.xml index 7017b5454..5b6ce56b1 100644 --- a/half-sync-half-async/pom.xml +++ b/half-sync-half-async/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT half-sync-half-async diff --git a/intercepting-filter/pom.xml b/intercepting-filter/pom.xml index 92c814c43..6ef1e25bc 100644 --- a/intercepting-filter/pom.xml +++ b/intercepting-filter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT intercepting-filter diff --git a/interpreter/pom.xml b/interpreter/pom.xml index 8b6054442..a0003672a 100644 --- a/interpreter/pom.xml +++ b/interpreter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT interpreter diff --git a/iterator/pom.xml b/iterator/pom.xml index d3bce401d..dcd70f809 100644 --- a/iterator/pom.xml +++ b/iterator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT iterator diff --git a/layers/pom.xml b/layers/pom.xml index 647862ad2..abd888afa 100644 --- a/layers/pom.xml +++ b/layers/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT com.iluwatar.layers layers diff --git a/lazy-loading/pom.xml b/lazy-loading/pom.xml index e3ce27de0..37b321aec 100644 --- a/lazy-loading/pom.xml +++ b/lazy-loading/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT lazy-loading diff --git a/mediator/pom.xml b/mediator/pom.xml index d310c5ef5..7f3209479 100644 --- a/mediator/pom.xml +++ b/mediator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT mediator diff --git a/memento/pom.xml b/memento/pom.xml index 6ef97c893..b7355784c 100644 --- a/memento/pom.xml +++ b/memento/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT memento diff --git a/message-channel/pom.xml b/message-channel/pom.xml index 69ddc3fda..3afc5b32e 100644 --- a/message-channel/pom.xml +++ b/message-channel/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT message-channel diff --git a/model-view-controller/pom.xml b/model-view-controller/pom.xml index c5e732382..0ae6a6fc6 100644 --- a/model-view-controller/pom.xml +++ b/model-view-controller/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT model-view-controller diff --git a/model-view-presenter/pom.xml b/model-view-presenter/pom.xml index 74cbef728..e0a3c57fb 100644 --- a/model-view-presenter/pom.xml +++ b/model-view-presenter/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT model-view-presenter model-view-presenter diff --git a/monad/pom.xml b/monad/pom.xml index 8d9381225..b737e2174 100644 --- a/monad/pom.xml +++ b/monad/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT monad diff --git a/monostate/pom.xml b/monostate/pom.xml index 3c5882bac..bb246d38c 100644 --- a/monostate/pom.xml +++ b/monostate/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT monostate diff --git a/multiton/pom.xml b/multiton/pom.xml index f142183a7..2482c056b 100644 --- a/multiton/pom.xml +++ b/multiton/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT multiton diff --git a/mute-idiom/pom.xml b/mute-idiom/pom.xml index adf9c5e5a..3bfc3bf8a 100644 --- a/mute-idiom/pom.xml +++ b/mute-idiom/pom.xml @@ -21,7 +21,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT mute-idiom diff --git a/naked-objects/dom/pom.xml b/naked-objects/dom/pom.xml index 2b456a2bf..be96b2456 100644 --- a/naked-objects/dom/pom.xml +++ b/naked-objects/dom/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.11.0 + 1.12.0-SNAPSHOT naked-objects-dom diff --git a/naked-objects/fixture/pom.xml b/naked-objects/fixture/pom.xml index 467b55a81..6bbaaaeb1 100644 --- a/naked-objects/fixture/pom.xml +++ b/naked-objects/fixture/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.11.0 + 1.12.0-SNAPSHOT naked-objects-fixture diff --git a/naked-objects/integtests/pom.xml b/naked-objects/integtests/pom.xml index 3891467f7..68cac3790 100644 --- a/naked-objects/integtests/pom.xml +++ b/naked-objects/integtests/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.11.0 + 1.12.0-SNAPSHOT naked-objects-integtests diff --git a/naked-objects/pom.xml b/naked-objects/pom.xml index 6c72b74a3..d34dba9a3 100644 --- a/naked-objects/pom.xml +++ b/naked-objects/pom.xml @@ -15,7 +15,7 @@ java-design-patterns com.iluwatar - 1.11.0 + 1.12.0-SNAPSHOT naked-objects @@ -350,17 +350,17 @@ ${project.groupId} naked-objects-dom - 1.11.0 + 1.12.0-SNAPSHOT ${project.groupId} naked-objects-fixture - 1.11.0 + 1.12.0-SNAPSHOT ${project.groupId} naked-objects-webapp - 1.11.0 + 1.12.0-SNAPSHOT diff --git a/naked-objects/webapp/pom.xml b/naked-objects/webapp/pom.xml index 41b4906a0..aa7d60438 100644 --- a/naked-objects/webapp/pom.xml +++ b/naked-objects/webapp/pom.xml @@ -16,7 +16,7 @@ com.iluwatar naked-objects - 1.11.0 + 1.12.0-SNAPSHOT naked-objects-webapp diff --git a/null-object/pom.xml b/null-object/pom.xml index 7e058f0ef..b765c6537 100644 --- a/null-object/pom.xml +++ b/null-object/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT null-object diff --git a/object-pool/pom.xml b/object-pool/pom.xml index 078762d58..6022ef8a7 100644 --- a/object-pool/pom.xml +++ b/object-pool/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT object-pool diff --git a/observer/pom.xml b/observer/pom.xml index 4249a6eab..fcc3e88aa 100644 --- a/observer/pom.xml +++ b/observer/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT observer diff --git a/poison-pill/pom.xml b/poison-pill/pom.xml index 7bd8423c1..b76578122 100644 --- a/poison-pill/pom.xml +++ b/poison-pill/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT poison-pill diff --git a/pom.xml b/pom.xml index bdd7ec6a5..8430bcebe 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT pom 2014 diff --git a/private-class-data/pom.xml b/private-class-data/pom.xml index 97ffcebe4..877197664 100644 --- a/private-class-data/pom.xml +++ b/private-class-data/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT private-class-data diff --git a/producer-consumer/pom.xml b/producer-consumer/pom.xml index cbf247142..c4ea8f1df 100644 --- a/producer-consumer/pom.xml +++ b/producer-consumer/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT producer-consumer diff --git a/property/pom.xml b/property/pom.xml index 7e4484437..c753261d1 100644 --- a/property/pom.xml +++ b/property/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT property diff --git a/prototype/pom.xml b/prototype/pom.xml index 1cc90720f..7fb43402f 100644 --- a/prototype/pom.xml +++ b/prototype/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT prototype diff --git a/proxy/pom.xml b/proxy/pom.xml index 8098953ae..9936be34b 100644 --- a/proxy/pom.xml +++ b/proxy/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT proxy diff --git a/publish-subscribe/pom.xml b/publish-subscribe/pom.xml index f0fdd85da..1ff97ca47 100644 --- a/publish-subscribe/pom.xml +++ b/publish-subscribe/pom.xml @@ -28,7 +28,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT publish-subscribe diff --git a/reactor/pom.xml b/reactor/pom.xml index 50698655a..80a15f9d3 100644 --- a/reactor/pom.xml +++ b/reactor/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT reactor diff --git a/reader-writer-lock/pom.xml b/reader-writer-lock/pom.xml index 673b56a4d..0391ea291 100644 --- a/reader-writer-lock/pom.xml +++ b/reader-writer-lock/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT reader-writer-lock diff --git a/repository/pom.xml b/repository/pom.xml index 2757a1268..b8b81ee05 100644 --- a/repository/pom.xml +++ b/repository/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT repository diff --git a/resource-acquisition-is-initialization/pom.xml b/resource-acquisition-is-initialization/pom.xml index 8ea82f44d..63971d97c 100644 --- a/resource-acquisition-is-initialization/pom.xml +++ b/resource-acquisition-is-initialization/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT resource-acquisition-is-initialization diff --git a/servant/pom.xml b/servant/pom.xml index 0f7d5a51f..a102ad348 100644 --- a/servant/pom.xml +++ b/servant/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT servant diff --git a/service-layer/pom.xml b/service-layer/pom.xml index 963efb32e..c5e4eb8d9 100644 --- a/service-layer/pom.xml +++ b/service-layer/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT service-layer diff --git a/service-locator/pom.xml b/service-locator/pom.xml index d03c3973d..f07dc93f8 100644 --- a/service-locator/pom.xml +++ b/service-locator/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT service-locator diff --git a/singleton/pom.xml b/singleton/pom.xml index cdbd72b69..8ab7e0686 100644 --- a/singleton/pom.xml +++ b/singleton/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT singleton diff --git a/specification/pom.xml b/specification/pom.xml index c43bfe733..c54688919 100644 --- a/specification/pom.xml +++ b/specification/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT specification diff --git a/state/pom.xml b/state/pom.xml index 46550ea14..2411eb2a7 100644 --- a/state/pom.xml +++ b/state/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT state diff --git a/step-builder/pom.xml b/step-builder/pom.xml index b7427f22b..8d926d118 100644 --- a/step-builder/pom.xml +++ b/step-builder/pom.xml @@ -30,7 +30,7 @@ java-design-patterns com.iluwatar - 1.11.0 + 1.12.0-SNAPSHOT step-builder diff --git a/strategy/pom.xml b/strategy/pom.xml index 53bb7c513..934ff8775 100644 --- a/strategy/pom.xml +++ b/strategy/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT strategy diff --git a/template-method/pom.xml b/template-method/pom.xml index e114773fa..af0b19cb4 100644 --- a/template-method/pom.xml +++ b/template-method/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT template-method diff --git a/thread-pool/pom.xml b/thread-pool/pom.xml index c2b9d58b9..824dcd7af 100644 --- a/thread-pool/pom.xml +++ b/thread-pool/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT thread-pool diff --git a/tolerant-reader/pom.xml b/tolerant-reader/pom.xml index efce12725..249788da0 100644 --- a/tolerant-reader/pom.xml +++ b/tolerant-reader/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT tolerant-reader diff --git a/twin/pom.xml b/twin/pom.xml index 6675b673a..010bf37b2 100644 --- a/twin/pom.xml +++ b/twin/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT twin diff --git a/value-object/pom.xml b/value-object/pom.xml index ed699b553..66b2342eb 100644 --- a/value-object/pom.xml +++ b/value-object/pom.xml @@ -30,7 +30,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT value-object diff --git a/visitor/pom.xml b/visitor/pom.xml index 666578d6b..1b594b179 100644 --- a/visitor/pom.xml +++ b/visitor/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0 + 1.12.0-SNAPSHOT visitor From d631585fa88ec41b0bf839dc9e46b69921442026 Mon Sep 17 00:00:00 2001 From: Markus Moser Date: Sun, 3 Apr 2016 20:04:56 +0200 Subject: [PATCH 094/123] Test commit for #255 ignore the minor documentation change. This is to test our build chain with travis! --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 60693c5cc..deb436cd2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,4 +15,4 @@ after_success: - mvn clean test jacoco:report coveralls:report - bash update-ghpages.sh -sudo: false +sudo: false # route the build to the container-based infrastructure for a faster build From deb15e2733bac2e68adac5a271a13d6c453f1360 Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Mon, 4 Apr 2016 12:24:15 +0530 Subject: [PATCH 095/123] JDBC removed... --- .../java/com/iluwatar/datamapper/App.java | 209 +++++++------- .../java/com/iluwatar/datamapper/Student.java | 186 +++++++------ .../datamapper/StudentDataMapper.java | 65 +++-- .../datamapper/StudentMySQLDataMapper.java | 257 +++++++----------- .../datamapper/StudentOracleDataMapper.java | 257 +++++++----------- 5 files changed, 433 insertions(+), 541 deletions(-) diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/App.java b/data-mapper/src/main/java/com/iluwatar/datamapper/App.java index 6345b5a4c..8b5853609 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/App.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/App.java @@ -1,105 +1,104 @@ -/** - * The MIT License Copyright (c) 2014 Ilkka Seppälä - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - * associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package com.iluwatar.datamapper; - -import java.util.Optional; -import java.util.UUID; - -import org.apache.log4j.Logger; - -/** - * - * The Data Mapper (DM) is a layer of software that separates the in-memory objects from the - * database. Its responsibility is to transfer data between the two and also to isolate them from - * each other. With Data Mapper the in-memory objects needn't know even that there's a database - * present; they need no SQL interface code, and certainly no knowledge of the database schema. (The - * database schema is always ignorant of the objects that use it.) Since it's a form of Mapper , - * Data Mapper itself is even unknown to the domain layer. - *

    - * The below example demonstrates basic CRUD operations: select, add, update, and delete. - * - */ -public final class App { - - private static Logger log = Logger.getLogger(App.class); - - - private static final String DB_TYPE_ORACLE = "Oracle"; - private static final String DB_TYPE_MYSQL = "MySQL"; - - - /** - * Program entry point. - * - * @param args command line args. - */ - public static final void main(final String... args) { - - if (log.isInfoEnabled() & args.length > 0) { - log.debug("App.main(), db type: " + args[0]); - } - - StudentDataMapper mapper = null; - - /* Check the desired db type from runtime arguments */ - if (args.length == 0) { - - /* Create default data mapper for mysql */ - mapper = new StudentMySQLDataMapper(); - - } else if (args.length > 0 && DB_TYPE_ORACLE.equalsIgnoreCase(args[0])) { - - /* Create new data mapper for mysql */ - mapper = new StudentMySQLDataMapper(); - - } else if (args.length > 0 && DB_TYPE_MYSQL.equalsIgnoreCase(args[0])) { - - /* Create new data mapper for oracle */ - mapper = new StudentMySQLDataMapper(); - } else { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Following data source(" + args[0] + ") is not supported"); - } - - /* Create new student */ - Student student = new Student(UUID.randomUUID(), 1, "Adam", 'A'); - - /* Add student in respectibe db */ - mapper.insert(student); - - /* Find this student */ - final Optional studentToBeFound = mapper.find(student.getGuId()); - - if (log.isDebugEnabled()) { - log.debug("App.main(), db find returned : " + studentToBeFound); - } - - /* Update existing student object */ - student = new Student(student.getGuId(), 1, "AdamUpdated", 'A'); - - /* Update student in respectibe db */ - mapper.update(student); - - /* Delete student in db */ - mapper.delete(student); - } - - private App() {} -} +/** + * The MIT License Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.util.Optional; + +import org.apache.log4j.Logger; + +/** + * + * The Data Mapper (DM) is a layer of software that separates the in-memory objects from the + * database. Its responsibility is to transfer data between the two and also to isolate them from + * each other. With Data Mapper the in-memory objects needn't know even that there's a database + * present; they need no SQL interface code, and certainly no knowledge of the database schema. (The + * database schema is always ignorant of the objects that use it.) Since it's a form of Mapper , + * Data Mapper itself is even unknown to the domain layer. + *

    + * The below example demonstrates basic CRUD operations: Create, Read, Update, and Delete. + * + */ +public final class App { + + private static Logger log = Logger.getLogger(App.class); + + + private static final String DB_TYPE_ORACLE = "Oracle"; + private static final String DB_TYPE_MYSQL = "MySQL"; + + + /** + * Program entry point. + * + * @param args command line args. + */ + public static final void main(final String... args) { + + if (log.isInfoEnabled() & args.length > 0) { + log.debug("App.main(), db type: " + args[0]); + } + + StudentDataMapper mapper = null; + + /* Check the desired db type from runtime arguments */ + if (args.length == 0) { + + /* Create default data mapper for mysql */ + mapper = new StudentMySQLDataMapper(); + + } else if (args.length > 0 && DB_TYPE_ORACLE.equalsIgnoreCase(args[0])) { + + /* Create new data mapper for mysql */ + mapper = new StudentMySQLDataMapper(); + + } else if (args.length > 0 && DB_TYPE_MYSQL.equalsIgnoreCase(args[0])) { + + /* Create new data mapper for oracle */ + mapper = new StudentMySQLDataMapper(); + } else { + + /* Don't couple any Data Mapper to java.sql.SQLException */ + throw new DataMapperException("Following data mapping type(" + args[0] + ") is not supported"); + } + + /* Create new student */ + Student student = new Student(1, "Adam", 'A'); + + /* Add student in respectibe db */ + mapper.insert(student); + + /* Find this student */ + final Optional studentToBeFound = mapper.find(student.getStudentId()); + + if (log.isDebugEnabled()) { + log.debug("App.main(), db find returned : " + studentToBeFound); + } + + /* Update existing student object */ + student = new Student(student.getStudentId(), "AdamUpdated", 'A'); + + /* Update student in respectibe db */ + mapper.update(student); + + /* Delete student in db */ + mapper.delete(student); + } + + private App() {} +} diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/Student.java b/data-mapper/src/main/java/com/iluwatar/datamapper/Student.java index 920d4d9ee..2f0c6d0a6 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/Student.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/Student.java @@ -1,83 +1,103 @@ -/** - * The MIT License Copyright (c) 2016 Amit Dixit - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - * associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package com.iluwatar.datamapper; - -import java.io.Serializable; -import java.util.UUID; - -public final class Student implements Serializable { - - private static final long serialVersionUID = 1L; - - private UUID guid; - private int studentID; - private String name; - private char grade; - - public Student() { - this.guid = UUID.randomUUID(); - } - - public Student(final UUID guid, final int studentID, final String name, final char grade) { - super(); - - this.guid = guid; - this.studentID = studentID; - this.name = name; - this.grade = grade; - } - - - public Student(final UUID guid) { - this.guid = guid; - } - - public final int getStudentId() { - return studentID; - } - - public final void setStudentId(final int studentID) { - this.studentID = studentID; - } - - public final String getName() { - return name; - } - - public final void setName(final String name) { - this.name = name; - } - - public final char getGrade() { - return grade; - } - - public final void setGrade(final char grade) { - this.grade = grade; - } - - public final UUID getGuId() { - return guid; - } - - @Override - public final String toString() { - return "Student [guid=" + guid + ", studentID=" + studentID + ", name=" + name + ", grade=" + grade + "]"; - } -} +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + + +import java.io.Serializable; + +public final class Student implements Serializable { + + private static final long serialVersionUID = 1L; + + private int studentId; + private String name; + private char grade; + + public Student() { + + } + + public Student(final int studentId, final String name, final char grade) { + super(); + + this.studentId = studentId; + this.name = name; + this.grade = grade; + } + + public final int getStudentId() { + return studentId; + } + + public final void setStudentId(final int studentId) { + this.studentId = studentId; + } + + public final String getName() { + return name; + } + + public final void setName(final String name) { + this.name = name; + } + + public final char getGrade() { + return grade; + } + + public final void setGrade(final char grade) { + this.grade = grade; + } + + @Override + public boolean equals(final Object inputObject) { + + boolean isEqual = false; + + /* Check if both objects are same */ + if (this == inputObject) { + + isEqual = true; + } + /* Check if objects belong to same class */ + else if (inputObject != null && getClass() == inputObject.getClass()) { + + final Student student = (Student) inputObject; + + /* If student id matched */ + if (this.getStudentId() == student.getStudentId()) { + + isEqual = true; + } + } + return isEqual; + } + + @Override + public int hashCode() { + + /* Student id is assumed to be unique */ + return this.getStudentId(); + } + + @Override + public final String toString() { + return "Student [studentId=" + studentId + ", name=" + name + ", grade=" + grade + "]"; + } +} diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java index 2493a9478..1fa33e067 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java @@ -1,33 +1,32 @@ -/** - * The MIT License Copyright (c) 2016 Amit Dixit - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - * associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package com.iluwatar.datamapper; - -import java.util.Optional; -import java.util.UUID; - -public interface StudentDataMapper { - - public Optional find(final UUID uniqueID) throws DataMapperException; - - public void insert(final Student student) throws DataMapperException; - - public void update(final Student student) throws DataMapperException; - - public void delete(final Student student) throws DataMapperException; -} +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.util.Optional; + +public interface StudentDataMapper { + + public Optional find(final int studentId); + + public void insert(final Student student) throws DataMapperException; + + public void update(final Student student) throws DataMapperException; + + public void delete(final Student student) throws DataMapperException; +} diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java index 7520bc923..cbb97bfa9 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java @@ -1,160 +1,97 @@ -/** - * The MIT License Copyright (c) 2016 Amit Dixit - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - * associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package com.iluwatar.datamapper; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Optional; -import java.util.UUID; - -public final class StudentMySQLDataMapper implements StudentDataMapper { - - @Override - public final Optional find(final UUID uniqueID) throws DataMapperException { - - try { - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/MySQL", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "SELECT `guid`, `grade`, `studentID`, `name` FROM `students` where `guid`=?"; - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set unique id in sql statement */ - dbStatement.setString(1, uniqueID.toString()); - - /* Execute the sql query */ - final ResultSet rs = dbStatement.executeQuery(); - - while (rs.next()) { - - /* Create new student */ - final Student student = new Student(UUID.fromString(rs.getString("guid"))); - - /* Set all values from database in java object */ - student.setName(rs.getString("name")); - student.setGrade(rs.getString("grade").charAt(0)); - student.setStudentId(rs.getInt("studentID")); - - return Optional.of(student); - } - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from MySQL data source.", e); - } - - /* Return empty value */ - return Optional.empty(); - } - - @Override - public final void update(final Student student) throws DataMapperException { - try { - - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/MySQL", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "UPDATE `students` SET `grade`=?, `studentID`=?, `name`=? where `guid`=?"; - - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set java object values in sql statement */ - dbStatement.setString(1, Character.toString(student.getGrade())); - dbStatement.setInt(2, student.getStudentId()); - dbStatement.setString(3, student.getName()); - dbStatement.setString(4, student.getGuId().toString()); - - /* Execute the sql query */ - dbStatement.executeUpdate(); - - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from MySQL data source.", e); - } - } - - @Override - public final void insert(final Student student) throws DataMapperException { - try { - - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/MySQL", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "INSERT INTO `students` (`grade`, `studentID`, `name`, `guid`) VALUES (?, ?, ?, ?)"; - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set java object values in sql statement */ - dbStatement.setString(1, Character.toString(student.getGrade())); - dbStatement.setInt(2, student.getStudentId()); - dbStatement.setString(3, student.getName()); - dbStatement.setString(4, student.getGuId().toString()); - - /* Execute the sql query */ - dbStatement.executeUpdate(); - - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from MySQL data source.", e); - } - } - - @Override - public final void delete(final Student student) throws DataMapperException { - try { - - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/MySQL", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "DELETE FROM `students` where `guid`=?"; - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set java object values in sql statement */ - dbStatement.setString(1, student.getGuId().toString()); - - /* Execute the sql query */ - dbStatement.executeUpdate(); - - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from MySQL data source.", e); - } - } -} +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.util.List; +import java.util.Optional; + +public final class StudentMySQLDataMapper implements StudentDataMapper { + + /* Note: Normally this would be in the form of an actual database */ + private List students; + + @Override + public final Optional find(final int studentId) { + + /* Compare with existing students */ + for (final Student student : this.students) { + + /* Check if student is found */ + if (student.getStudentId() == studentId) { + + return Optional.of(student); + } + } + + /* Return empty value */ + return Optional.empty(); + } + + @Override + public final void update(final Student studentToBeUpdated) throws DataMapperException { + + + /* Check with existing students */ + if (this.students.contains(studentToBeUpdated)) { + + /* Get the index of student in list */ + final int index = this.students.indexOf(studentToBeUpdated); + + /* Update the student in list */ + this.students.set(index, studentToBeUpdated); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student [" + studentToBeUpdated.getName() + "] is not found"); + } + } + + @Override + public final void insert(final Student studentToBeInserted) throws DataMapperException { + + /* Check with existing students */ + if (!this.students.contains(studentToBeInserted)) { + + /* Add student in list */ + this.students.add(studentToBeInserted); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student already [" + studentToBeInserted.getName() + "] exists"); + } + } + + @Override + public final void delete(final Student studentToBeDeleted) throws DataMapperException { + + /* Check with existing students */ + if (this.students.contains(studentToBeDeleted)) { + + /* Delete the student from list */ + this.students.remove(studentToBeDeleted); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student [" + studentToBeDeleted.getName() + "] is not found"); + } + } +} diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java index 0b6b7ebbf..6abf1c55a 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java @@ -1,160 +1,97 @@ -/** - * The MIT License Copyright (c) 2016 Amit Dixit - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - * associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package com.iluwatar.datamapper; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Optional; -import java.util.UUID; - -public final class StudentOracleDataMapper implements StudentDataMapper { - - @Override - public final Optional find(final UUID uniqueID) throws DataMapperException { - - try { - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:Oracle", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "SELECT `guid`, `grade`, `studentID`, `name` FROM `students` where `guid`=?"; - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set unique id in sql statement */ - dbStatement.setString(1, uniqueID.toString()); - - /* Execute the sql query */ - final ResultSet rs = dbStatement.executeQuery(); - - while (rs.next()) { - - /* Create new student */ - final Student student = new Student(UUID.fromString(rs.getString("guid"))); - - /* Set all values from database in java object */ - student.setName(rs.getString("name")); - student.setGrade(rs.getString("grade").charAt(0)); - student.setStudentId(rs.getInt("studentID")); - - return Optional.of(student); - } - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from Oracle data source.", e); - } - - /* Return empty value */ - return Optional.empty(); - } - - @Override - public final void update(final Student student) throws DataMapperException { - try { - - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:Oracle", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "UPDATE `students` SET `grade`=?, `studentID`=?, `name`=? where `guid`=?"; - - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set java object values in sql statement */ - dbStatement.setString(1, Character.toString(student.getGrade())); - dbStatement.setInt(2, student.getStudentId()); - dbStatement.setString(3, student.getName()); - dbStatement.setString(4, student.getGuId().toString()); - - /* Execute the sql query */ - dbStatement.executeUpdate(); - - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from Oracle data source.", e); - } - } - - @Override - public final void insert(final Student student) throws DataMapperException { - try { - - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:Oracle", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "INSERT INTO `students` (`grade`, `studentID`, `name`, `guid`) VALUES (?, ?, ?, ?)"; - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set java object values in sql statement */ - dbStatement.setString(1, Character.toString(student.getGrade())); - dbStatement.setInt(2, student.getStudentId()); - dbStatement.setString(3, student.getName()); - dbStatement.setString(4, student.getGuId().toString()); - - /* Execute the sql query */ - dbStatement.executeUpdate(); - - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from Oracle data source.", e); - } - } - - @Override - public final void delete(final Student student) throws DataMapperException { - try { - - /* OracleDriver class cant be initilized directly */ - Class.forName("oracle.jdbc.driver.OracleDriver"); - - /* Create new connection */ - final Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:Oracle", "username", "password"); - - /* Create new Oracle compliant sql statement */ - final String statement = "DELETE FROM `students` where `guid`=?"; - final PreparedStatement dbStatement = connection.prepareStatement(statement); - - /* Set java object values in sql statement */ - dbStatement.setString(1, student.getGuId().toString()); - - /* Execute the sql query */ - dbStatement.executeUpdate(); - - } catch (final SQLException | ClassNotFoundException e) { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Error occured reading Students from Oracle data source.", e); - } - } -} +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.util.List; +import java.util.Optional; + +public final class StudentOracleDataMapper implements StudentDataMapper { + + /* Note: Normally this would be in the form of an actual database */ + private List students; + + @Override + public final Optional find(final int studentId) { + + /* Compare with existing students */ + for (final Student student : this.students) { + + /* Check if student is found */ + if (student.getStudentId() == studentId) { + + return Optional.of(student); + } + } + + /* Return empty value */ + return Optional.empty(); + } + + @Override + public final void update(final Student studentToBeUpdated) throws DataMapperException { + + + /* Check with existing students */ + if (this.students.contains(studentToBeUpdated)) { + + /* Get the index of student in list */ + final int index = this.students.indexOf(studentToBeUpdated); + + /* Update the student in list */ + this.students.set(index, studentToBeUpdated); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student [" + studentToBeUpdated.getName() + "] is not found"); + } + } + + @Override + public final void insert(final Student studentToBeInserted) throws DataMapperException { + + /* Check with existing students */ + if (!this.students.contains(studentToBeInserted)) { + + /* Add student in list */ + this.students.add(studentToBeInserted); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student already [" + studentToBeInserted.getName() + "] exists"); + } + } + + @Override + public final void delete(final Student studentToBeDeleted) throws DataMapperException { + + /* Check with existing students */ + if (this.students.contains(studentToBeDeleted)) { + + /* Delete the student from list */ + this.students.remove(studentToBeDeleted); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student [" + studentToBeDeleted.getName() + "] is not found"); + } + } +} From eb72493f1363b0ab4aa381f636aa9ebab2333158 Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Mon, 4 Apr 2016 12:33:43 +0530 Subject: [PATCH 096/123] JDBC removed... --- .../java/com/iluwatar/datamapper/App.java | 14 ++- .../datamapper/StudentMySQLDataMapper.java | 23 +++-- .../datamapper/StudentOracleDataMapper.java | 23 +++-- .../java/com/iluwatar/datamapper/AppTest.java | 99 +++++++++++++++++++ 4 files changed, 140 insertions(+), 19 deletions(-) create mode 100644 data-mapper/src/test/java/com/iluwatar/datamapper/AppTest.java diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/App.java b/data-mapper/src/main/java/com/iluwatar/datamapper/App.java index 8b5853609..d8a968a17 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/App.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/App.java @@ -83,11 +83,15 @@ public final class App { /* Add student in respectibe db */ mapper.insert(student); + if (log.isDebugEnabled()) { + log.debug("App.main(), student : " + student + ", is inserted"); + } + /* Find this student */ final Optional studentToBeFound = mapper.find(student.getStudentId()); if (log.isDebugEnabled()) { - log.debug("App.main(), db find returned : " + studentToBeFound); + log.debug("App.main(), student : " + studentToBeFound + ", is searched"); } /* Update existing student object */ @@ -96,7 +100,15 @@ public final class App { /* Update student in respectibe db */ mapper.update(student); + if (log.isDebugEnabled()) { + log.debug("App.main(), student : " + student + ", is updated"); + } + /* Delete student in db */ + + if (log.isDebugEnabled()) { + log.debug("App.main(), student : " + student + ", is deleted"); + } mapper.delete(student); } diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java index cbb97bfa9..ec7507eed 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java @@ -18,19 +18,20 @@ */ package com.iluwatar.datamapper; +import java.util.ArrayList; import java.util.List; import java.util.Optional; public final class StudentMySQLDataMapper implements StudentDataMapper { /* Note: Normally this would be in the form of an actual database */ - private List students; + private List students = new ArrayList<>(); @Override public final Optional find(final int studentId) { /* Compare with existing students */ - for (final Student student : this.students) { + for (final Student student : this.getStudents()) { /* Check if student is found */ if (student.getStudentId() == studentId) { @@ -48,13 +49,13 @@ public final class StudentMySQLDataMapper implements StudentDataMapper { /* Check with existing students */ - if (this.students.contains(studentToBeUpdated)) { + if (this.getStudents().contains(studentToBeUpdated)) { /* Get the index of student in list */ - final int index = this.students.indexOf(studentToBeUpdated); + final int index = this.getStudents().indexOf(studentToBeUpdated); /* Update the student in list */ - this.students.set(index, studentToBeUpdated); + this.getStudents().set(index, studentToBeUpdated); } else { @@ -67,10 +68,10 @@ public final class StudentMySQLDataMapper implements StudentDataMapper { public final void insert(final Student studentToBeInserted) throws DataMapperException { /* Check with existing students */ - if (!this.students.contains(studentToBeInserted)) { + if (!this.getStudents().contains(studentToBeInserted)) { /* Add student in list */ - this.students.add(studentToBeInserted); + this.getStudents().add(studentToBeInserted); } else { @@ -83,10 +84,10 @@ public final class StudentMySQLDataMapper implements StudentDataMapper { public final void delete(final Student studentToBeDeleted) throws DataMapperException { /* Check with existing students */ - if (this.students.contains(studentToBeDeleted)) { + if (this.getStudents().contains(studentToBeDeleted)) { /* Delete the student from list */ - this.students.remove(studentToBeDeleted); + this.getStudents().remove(studentToBeDeleted); } else { @@ -94,4 +95,8 @@ public final class StudentMySQLDataMapper implements StudentDataMapper { throw new DataMapperException("Student [" + studentToBeDeleted.getName() + "] is not found"); } } + + public List getStudents() { + return this.students; + } } diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java index 6abf1c55a..ca66f11c9 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java @@ -18,19 +18,20 @@ */ package com.iluwatar.datamapper; +import java.util.ArrayList; import java.util.List; import java.util.Optional; public final class StudentOracleDataMapper implements StudentDataMapper { /* Note: Normally this would be in the form of an actual database */ - private List students; + private List students = new ArrayList<>(); @Override public final Optional find(final int studentId) { /* Compare with existing students */ - for (final Student student : this.students) { + for (final Student student : this.getStudents()) { /* Check if student is found */ if (student.getStudentId() == studentId) { @@ -48,13 +49,13 @@ public final class StudentOracleDataMapper implements StudentDataMapper { /* Check with existing students */ - if (this.students.contains(studentToBeUpdated)) { + if (this.getStudents().contains(studentToBeUpdated)) { /* Get the index of student in list */ - final int index = this.students.indexOf(studentToBeUpdated); + final int index = this.getStudents().indexOf(studentToBeUpdated); /* Update the student in list */ - this.students.set(index, studentToBeUpdated); + this.getStudents().set(index, studentToBeUpdated); } else { @@ -67,10 +68,10 @@ public final class StudentOracleDataMapper implements StudentDataMapper { public final void insert(final Student studentToBeInserted) throws DataMapperException { /* Check with existing students */ - if (!this.students.contains(studentToBeInserted)) { + if (!this.getStudents().contains(studentToBeInserted)) { /* Add student in list */ - this.students.add(studentToBeInserted); + this.getStudents().add(studentToBeInserted); } else { @@ -83,10 +84,10 @@ public final class StudentOracleDataMapper implements StudentDataMapper { public final void delete(final Student studentToBeDeleted) throws DataMapperException { /* Check with existing students */ - if (this.students.contains(studentToBeDeleted)) { + if (this.getStudents().contains(studentToBeDeleted)) { /* Delete the student from list */ - this.students.remove(studentToBeDeleted); + this.getStudents().remove(studentToBeDeleted); } else { @@ -94,4 +95,8 @@ public final class StudentOracleDataMapper implements StudentDataMapper { throw new DataMapperException("Student [" + studentToBeDeleted.getName() + "] is not found"); } } + + public List getStudents() { + return this.students; + } } diff --git a/data-mapper/src/test/java/com/iluwatar/datamapper/AppTest.java b/data-mapper/src/test/java/com/iluwatar/datamapper/AppTest.java new file mode 100644 index 000000000..6e415bccb --- /dev/null +++ b/data-mapper/src/test/java/com/iluwatar/datamapper/AppTest.java @@ -0,0 +1,99 @@ +/** + * The MIT License Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.util.Optional; +import java.util.UUID; + +import org.apache.log4j.Logger; + +/** + * The Data Mapper (DM) is a layer of software that separates the in-memory objects from the + * database. Its responsibility is to transfer data between the two and also to isolate them from + * each other. With Data Mapper the in-memory objects needn't know even that there's a database + * present; they need no SQL interface code, and certainly no knowledge of the database schema. (The + * database schema is always ignorant of the objects that use it.) Since it's a form of Mapper , + * Data Mapper itself is even unknown to the domain layer. + *

    + * The below example demonstrates basic CRUD operations: select, add, update, and delete. + * + */ +public final class App { + + private static Logger log = Logger.getLogger(App.class); + + + private static final String DB_TYPE_ORACLE = "Oracle"; + private static final String DB_TYPE_MYSQL = "MySQL"; + + + /** + * Program entry point. + * + * @param args command line args. + */ + public static final void main(final String... args) { + + if (log.isInfoEnabled() & args.length > 0) { + log.debug("App.main(), db type: " + args[0]); + } + + StudentDataMapper mapper = null; + + /* Check the desired db type from runtime arguments */ + if (DB_TYPE_ORACLE.equalsIgnoreCase(args[0])) { + + /* Create new data mapper for mysql */ + mapper = new StudentMySQLDataMapper(); + + } else if (DB_TYPE_MYSQL.equalsIgnoreCase(args[0])) { + + /* Create new data mapper for oracle */ + mapper = new StudentMySQLDataMapper(); + } else { + + /* Don't couple any Data Mapper to java.sql.SQLException */ + throw new DataMapperException("Following data source(" + args[0] + ") is not supported"); + } + + /* Create new student */ + Student student = new Student(UUID.randomUUID(), 1, "Adam", 'A'); + + /* Add student in respectibe db */ + mapper.insert(student); + + /* Find this student */ + final Optional studentToBeFound = mapper.find(student.getGuId()); + + if (log.isDebugEnabled()) { + log.debug("App.main(), db find returned : " + studentToBeFound); + } + + /* Update existing student object */ + student = new Student(student.getGuId(), 1, "AdamUpdated", 'A'); + + /* Update student in respectibe db */ + mapper.update(student); + + /* Delete student in db */ + mapper.delete(student); + } + + private App() {} +} From 59b6b817f4a6e02cd56d781283f148e7e65c04aa Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Mon, 4 Apr 2016 15:31:43 +0530 Subject: [PATCH 097/123] Test/Doc added Test/Doc added --- data-mapper/etc/data-mapper.png | Bin 0 -> 54062 bytes data-mapper/etc/data-mapper.ucls | 94 ++++++++ data-mapper/index.md | 2 +- .../java/com/iluwatar/datamapper/App.java | 34 +-- .../java/com/iluwatar/datamapper/Student.java | 66 ++++-- .../datamapper/StudentDataMapper.java | 8 +- ...apper.java => StudentFirstDataMapper.java} | 204 +++++++++--------- ...pper.java => StudentSecondDataMapper.java} | 203 +++++++++-------- .../java/com/iluwatar/datamapper/AppTest.java | 84 +------- .../iluwatar/datamapper/DataMapperTest.java | 108 ++++++++++ 10 files changed, 475 insertions(+), 328 deletions(-) create mode 100644 data-mapper/etc/data-mapper.png create mode 100644 data-mapper/etc/data-mapper.ucls rename data-mapper/src/main/java/com/iluwatar/datamapper/{StudentMySQLDataMapper.java => StudentFirstDataMapper.java} (85%) rename data-mapper/src/main/java/com/iluwatar/datamapper/{StudentOracleDataMapper.java => StudentSecondDataMapper.java} (85%) create mode 100644 data-mapper/src/test/java/com/iluwatar/datamapper/DataMapperTest.java diff --git a/data-mapper/etc/data-mapper.png b/data-mapper/etc/data-mapper.png new file mode 100644 index 0000000000000000000000000000000000000000..8fc90f591deb0c08aa2479c37a268ef0b5d5de2c GIT binary patch literal 54062 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 literal 0 HcmV?d00001 diff --git a/data-mapper/etc/data-mapper.ucls b/data-mapper/etc/data-mapper.ucls new file mode 100644 index 000000000..ff10fc32f --- /dev/null +++ b/data-mapper/etc/data-mapper.ucls @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data-mapper/index.md b/data-mapper/index.md index 4e640d5d6..684595c53 100644 --- a/data-mapper/index.md +++ b/data-mapper/index.md @@ -13,7 +13,7 @@ tags: Object provides an abstract interface to some type of database or other persistence mechanism. -![alt text](./etc/dm.png "Data Mapper") +![alt text](./etc/data-mapper.png "Data Mapper") ## Applicability Use the Data Mapper in any of the following situations diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/App.java b/data-mapper/src/main/java/com/iluwatar/datamapper/App.java index d8a968a17..63e3af41d 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/App.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/App.java @@ -23,7 +23,6 @@ import java.util.Optional; import org.apache.log4j.Logger; /** - * * The Data Mapper (DM) is a layer of software that separates the in-memory objects from the * database. Its responsibility is to transfer data between the two and also to isolate them from * each other. With Data Mapper the in-memory objects needn't know even that there's a database @@ -39,43 +38,18 @@ public final class App { private static Logger log = Logger.getLogger(App.class); - private static final String DB_TYPE_ORACLE = "Oracle"; - private static final String DB_TYPE_MYSQL = "MySQL"; - /** * Program entry point. * * @param args command line args. */ - public static final void main(final String... args) { + public static void main(final String... args) { - if (log.isInfoEnabled() & args.length > 0) { - log.debug("App.main(), db type: " + args[0]); - } - StudentDataMapper mapper = null; - - /* Check the desired db type from runtime arguments */ - if (args.length == 0) { - - /* Create default data mapper for mysql */ - mapper = new StudentMySQLDataMapper(); - - } else if (args.length > 0 && DB_TYPE_ORACLE.equalsIgnoreCase(args[0])) { - - /* Create new data mapper for mysql */ - mapper = new StudentMySQLDataMapper(); - - } else if (args.length > 0 && DB_TYPE_MYSQL.equalsIgnoreCase(args[0])) { - - /* Create new data mapper for oracle */ - mapper = new StudentMySQLDataMapper(); - } else { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Following data mapping type(" + args[0] + ") is not supported"); - } + /* Create any type of mapper at implementation which is desired */ + /* final StudentDataMapper mapper = new StudentFirstDataMapper(); */ + final StudentDataMapper mapper = new StudentSecondDataMapper(); /* Create new student */ Student student = new Student(1, "Adam", 'A'); diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/Student.java b/data-mapper/src/main/java/com/iluwatar/datamapper/Student.java index 2f0c6d0a6..0164533c8 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/Student.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/Student.java @@ -29,10 +29,14 @@ public final class Student implements Serializable { private String name; private char grade; - public Student() { - - } + /** + * Use this constructor to create a Student with all details + * + * @param studentId as unique student id + * @param name as student name + * @param grade as respective grade of student + */ public Student(final int studentId, final String name, final char grade) { super(); @@ -41,30 +45,57 @@ public final class Student implements Serializable { this.grade = grade; } - public final int getStudentId() { + /** + * + * @return the student id + */ + public int getStudentId() { return studentId; } - public final void setStudentId(final int studentId) { + /** + * + * @param studentId as unique student id + */ + public void setStudentId(final int studentId) { this.studentId = studentId; } - public final String getName() { + /** + * + * @return name of student + */ + public String getName() { return name; } - public final void setName(final String name) { + /** + * + * @param name as 'name' of student + */ + public void setName(final String name) { this.name = name; } - public final char getGrade() { + /** + * + * @return grade of student + */ + public char getGrade() { return grade; } - public final void setGrade(final char grade) { + /** + * + * @param grade as 'grade of student' + */ + public void setGrade(final char grade) { this.grade = grade; } + /** + * + */ @Override public boolean equals(final Object inputObject) { @@ -74,21 +105,23 @@ public final class Student implements Serializable { if (this == inputObject) { isEqual = true; - } - /* Check if objects belong to same class */ - else if (inputObject != null && getClass() == inputObject.getClass()) { + } else if (inputObject != null && getClass() == inputObject.getClass()) { - final Student student = (Student) inputObject; + final Student inputStudent = (Student) inputObject; /* If student id matched */ - if (this.getStudentId() == student.getStudentId()) { + if (this.getStudentId() == inputStudent.getStudentId()) { isEqual = true; } } + return isEqual; } + /** + * + */ @Override public int hashCode() { @@ -96,8 +129,11 @@ public final class Student implements Serializable { return this.getStudentId(); } + /** + * + */ @Override - public final String toString() { + public String toString() { return "Student [studentId=" + studentId + ", name=" + name + ", grade=" + grade + "]"; } } diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java index 1fa33e067..40f0c5c72 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java @@ -22,11 +22,11 @@ import java.util.Optional; public interface StudentDataMapper { - public Optional find(final int studentId); + Optional find(int studentId); - public void insert(final Student student) throws DataMapperException; + void insert(Student student) throws DataMapperException; - public void update(final Student student) throws DataMapperException; + void update(Student student) throws DataMapperException; - public void delete(final Student student) throws DataMapperException; + void delete(Student student) throws DataMapperException; } diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentFirstDataMapper.java similarity index 85% rename from data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java rename to data-mapper/src/main/java/com/iluwatar/datamapper/StudentFirstDataMapper.java index ec7507eed..97f6d395d 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentMySQLDataMapper.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentFirstDataMapper.java @@ -1,102 +1,102 @@ -/** - * The MIT License Copyright (c) 2016 Amit Dixit - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - * associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package com.iluwatar.datamapper; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -public final class StudentMySQLDataMapper implements StudentDataMapper { - - /* Note: Normally this would be in the form of an actual database */ - private List students = new ArrayList<>(); - - @Override - public final Optional find(final int studentId) { - - /* Compare with existing students */ - for (final Student student : this.getStudents()) { - - /* Check if student is found */ - if (student.getStudentId() == studentId) { - - return Optional.of(student); - } - } - - /* Return empty value */ - return Optional.empty(); - } - - @Override - public final void update(final Student studentToBeUpdated) throws DataMapperException { - - - /* Check with existing students */ - if (this.getStudents().contains(studentToBeUpdated)) { - - /* Get the index of student in list */ - final int index = this.getStudents().indexOf(studentToBeUpdated); - - /* Update the student in list */ - this.getStudents().set(index, studentToBeUpdated); - - } else { - - /* Throw user error */ - throw new DataMapperException("Student [" + studentToBeUpdated.getName() + "] is not found"); - } - } - - @Override - public final void insert(final Student studentToBeInserted) throws DataMapperException { - - /* Check with existing students */ - if (!this.getStudents().contains(studentToBeInserted)) { - - /* Add student in list */ - this.getStudents().add(studentToBeInserted); - - } else { - - /* Throw user error */ - throw new DataMapperException("Student already [" + studentToBeInserted.getName() + "] exists"); - } - } - - @Override - public final void delete(final Student studentToBeDeleted) throws DataMapperException { - - /* Check with existing students */ - if (this.getStudents().contains(studentToBeDeleted)) { - - /* Delete the student from list */ - this.getStudents().remove(studentToBeDeleted); - - } else { - - /* Throw user error */ - throw new DataMapperException("Student [" + studentToBeDeleted.getName() + "] is not found"); - } - } - - public List getStudents() { - return this.students; - } -} +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public final class StudentFirstDataMapper implements StudentDataMapper { + + /* Note: Normally this would be in the form of an actual database */ + private List students = new ArrayList<>(); + + @Override + public Optional find(int studentId) { + + /* Compare with existing students */ + for (final Student student : this.getStudents()) { + + /* Check if student is found */ + if (student.getStudentId() == studentId) { + + return Optional.of(student); + } + } + + /* Return empty value */ + return Optional.empty(); + } + + @Override + public void update(Student studentToBeUpdated) throws DataMapperException { + + + /* Check with existing students */ + if (this.getStudents().contains(studentToBeUpdated)) { + + /* Get the index of student in list */ + final int index = this.getStudents().indexOf(studentToBeUpdated); + + /* Update the student in list */ + this.getStudents().set(index, studentToBeUpdated); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student [" + studentToBeUpdated.getName() + "] is not found"); + } + } + + @Override + public void insert(Student studentToBeInserted) throws DataMapperException { + + /* Check with existing students */ + if (!this.getStudents().contains(studentToBeInserted)) { + + /* Add student in list */ + this.getStudents().add(studentToBeInserted); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student already [" + studentToBeInserted.getName() + "] exists"); + } + } + + @Override + public void delete(Student studentToBeDeleted) throws DataMapperException { + + /* Check with existing students */ + if (this.getStudents().contains(studentToBeDeleted)) { + + /* Delete the student from list */ + this.getStudents().remove(studentToBeDeleted); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student [" + studentToBeDeleted.getName() + "] is not found"); + } + } + + public List getStudents() { + return this.students; + } +} diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentSecondDataMapper.java similarity index 85% rename from data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java rename to data-mapper/src/main/java/com/iluwatar/datamapper/StudentSecondDataMapper.java index ca66f11c9..62d39f90d 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentOracleDataMapper.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentSecondDataMapper.java @@ -1,102 +1,101 @@ -/** - * The MIT License Copyright (c) 2016 Amit Dixit - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - * associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package com.iluwatar.datamapper; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -public final class StudentOracleDataMapper implements StudentDataMapper { - - /* Note: Normally this would be in the form of an actual database */ - private List students = new ArrayList<>(); - - @Override - public final Optional find(final int studentId) { - - /* Compare with existing students */ - for (final Student student : this.getStudents()) { - - /* Check if student is found */ - if (student.getStudentId() == studentId) { - - return Optional.of(student); - } - } - - /* Return empty value */ - return Optional.empty(); - } - - @Override - public final void update(final Student studentToBeUpdated) throws DataMapperException { - - - /* Check with existing students */ - if (this.getStudents().contains(studentToBeUpdated)) { - - /* Get the index of student in list */ - final int index = this.getStudents().indexOf(studentToBeUpdated); - - /* Update the student in list */ - this.getStudents().set(index, studentToBeUpdated); - - } else { - - /* Throw user error */ - throw new DataMapperException("Student [" + studentToBeUpdated.getName() + "] is not found"); - } - } - - @Override - public final void insert(final Student studentToBeInserted) throws DataMapperException { - - /* Check with existing students */ - if (!this.getStudents().contains(studentToBeInserted)) { - - /* Add student in list */ - this.getStudents().add(studentToBeInserted); - - } else { - - /* Throw user error */ - throw new DataMapperException("Student already [" + studentToBeInserted.getName() + "] exists"); - } - } - - @Override - public final void delete(final Student studentToBeDeleted) throws DataMapperException { - - /* Check with existing students */ - if (this.getStudents().contains(studentToBeDeleted)) { - - /* Delete the student from list */ - this.getStudents().remove(studentToBeDeleted); - - } else { - - /* Throw user error */ - throw new DataMapperException("Student [" + studentToBeDeleted.getName() + "] is not found"); - } - } - - public List getStudents() { - return this.students; - } -} +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public final class StudentSecondDataMapper implements StudentDataMapper { + + /* Note: Normally this would be in the form of an actual database */ + private List students = new ArrayList<>(); + + @Override + public Optional find(int studentId) { + + /* Compare with existing students */ + for (final Student student : this.getStudents()) { + + /* Check if student is found */ + if (student.getStudentId() == studentId) { + + return Optional.of(student); + } + } + + /* Return empty value */ + return Optional.empty(); + } + + @Override + public void update(Student studentToBeUpdated) throws DataMapperException { + + /* Check with existing students */ + if (this.getStudents().contains(studentToBeUpdated)) { + + /* Get the index of student in list */ + final int index = this.getStudents().indexOf(studentToBeUpdated); + + /* Update the student in list */ + this.getStudents().set(index, studentToBeUpdated); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student [" + studentToBeUpdated.getName() + "] is not found"); + } + } + + @Override + public void insert(Student studentToBeInserted) throws DataMapperException { + + /* Check with existing students */ + if (!this.getStudents().contains(studentToBeInserted)) { + + /* Add student in list */ + this.getStudents().add(studentToBeInserted); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student already [" + studentToBeInserted.getName() + "] exists"); + } + } + + @Override + public void delete(Student studentToBeDeleted) throws DataMapperException { + + /* Check with existing students */ + if (this.getStudents().contains(studentToBeDeleted)) { + + /* Delete the student from list */ + this.getStudents().remove(studentToBeDeleted); + + } else { + + /* Throw user error */ + throw new DataMapperException("Student [" + studentToBeDeleted.getName() + "] is not found"); + } + } + + public List getStudents() { + return this.students; + } +} diff --git a/data-mapper/src/test/java/com/iluwatar/datamapper/AppTest.java b/data-mapper/src/test/java/com/iluwatar/datamapper/AppTest.java index 6e415bccb..d3ad2dcb3 100644 --- a/data-mapper/src/test/java/com/iluwatar/datamapper/AppTest.java +++ b/data-mapper/src/test/java/com/iluwatar/datamapper/AppTest.java @@ -1,5 +1,6 @@ /** - * The MIT License Copyright (c) 2014 Ilkka Seppälä + * The MIT License Copyright (c) 2016 Amit Dixit + * * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and * associated documentation files (the "Software"), to deal in the Software without restriction, @@ -18,82 +19,17 @@ */ package com.iluwatar.datamapper; -import java.util.Optional; -import java.util.UUID; - -import org.apache.log4j.Logger; +import com.iluwatar.datamapper.App; +import org.junit.Test; /** - * The Data Mapper (DM) is a layer of software that separates the in-memory objects from the - * database. Its responsibility is to transfer data between the two and also to isolate them from - * each other. With Data Mapper the in-memory objects needn't know even that there's a database - * present; they need no SQL interface code, and certainly no knowledge of the database schema. (The - * database schema is always ignorant of the objects that use it.) Since it's a form of Mapper , - * Data Mapper itself is even unknown to the domain layer. - *

    - * The below example demonstrates basic CRUD operations: select, add, update, and delete. - * + * Tests that Data-Mapper example runs without errors. */ -public final class App { +public final class AppTest { - private static Logger log = Logger.getLogger(App.class); - - - private static final String DB_TYPE_ORACLE = "Oracle"; - private static final String DB_TYPE_MYSQL = "MySQL"; - - - /** - * Program entry point. - * - * @param args command line args. - */ - public static final void main(final String... args) { - - if (log.isInfoEnabled() & args.length > 0) { - log.debug("App.main(), db type: " + args[0]); - } - - StudentDataMapper mapper = null; - - /* Check the desired db type from runtime arguments */ - if (DB_TYPE_ORACLE.equalsIgnoreCase(args[0])) { - - /* Create new data mapper for mysql */ - mapper = new StudentMySQLDataMapper(); - - } else if (DB_TYPE_MYSQL.equalsIgnoreCase(args[0])) { - - /* Create new data mapper for oracle */ - mapper = new StudentMySQLDataMapper(); - } else { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Following data source(" + args[0] + ") is not supported"); - } - - /* Create new student */ - Student student = new Student(UUID.randomUUID(), 1, "Adam", 'A'); - - /* Add student in respectibe db */ - mapper.insert(student); - - /* Find this student */ - final Optional studentToBeFound = mapper.find(student.getGuId()); - - if (log.isDebugEnabled()) { - log.debug("App.main(), db find returned : " + studentToBeFound); - } - - /* Update existing student object */ - student = new Student(student.getGuId(), 1, "AdamUpdated", 'A'); - - /* Update student in respectibe db */ - mapper.update(student); - - /* Delete student in db */ - mapper.delete(student); + @Test + public void test() { + final String[] args = {}; + App.main(args); } - - private App() {} } diff --git a/data-mapper/src/test/java/com/iluwatar/datamapper/DataMapperTest.java b/data-mapper/src/test/java/com/iluwatar/datamapper/DataMapperTest.java new file mode 100644 index 000000000..f77097df8 --- /dev/null +++ b/data-mapper/src/test/java/com/iluwatar/datamapper/DataMapperTest.java @@ -0,0 +1,108 @@ +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import com.iluwatar.datamapper.Student; +import com.iluwatar.datamapper.StudentDataMapper; +import com.iluwatar.datamapper.StudentFirstDataMapper; +import com.iluwatar.datamapper.StudentSecondDataMapper; + +/** + * The Data Mapper (DM) is a layer of software that separates the in-memory objects from the + * database. Its responsibility is to transfer data between the two and also to isolate them from + * each other. With Data Mapper the in-memory objects needn't know even that there's a database + * present; they need no SQL interface code, and certainly no knowledge of the database schema. (The + * database schema is always ignorant of the objects that use it.) Since it's a form of Mapper , + * Data Mapper itself is even unknown to the domain layer. + *

    + */ +public class DataMapperTest { + + /** + * This test verify that first data mapper is able to perform all CRUD operations on Student + */ + @Test + public void testFirstDataMapper() { + + /* Create new data mapper of first type */ + final StudentDataMapper mapper = new StudentFirstDataMapper(); + + /* Create new student */ + Student student = new Student(1, "Adam", 'A'); + + /* Add student in respectibe db */ + mapper.insert(student); + + /* Check if student is added in db */ + assertEquals(student.getStudentId(), mapper.find(student.getStudentId()).get().getStudentId()); + + /* Update existing student object */ + student = new Student(student.getStudentId(), "AdamUpdated", 'A'); + + /* Update student in respectibe db */ + mapper.update(student); + + /* Check if student is updated in db */ + assertEquals(mapper.find(student.getStudentId()).get().getName(), "AdamUpdated"); + + /* Delete student in db */ + mapper.delete(student); + + /* Result should be false */ + assertEquals(false, mapper.find(student.getStudentId()).isPresent()); + } + + /** + * This test verify that second data mapper is able to perform all CRUD operations on Student + */ + @Test + public void testSecondDataMapper() { + + /* Create new data mapper of second type */ + final StudentDataMapper mapper = new StudentSecondDataMapper(); + + /* Create new student */ + Student student = new Student(1, "Adam", 'A'); + + /* Add student in respectibe db */ + mapper.insert(student); + + /* Check if student is added in db */ + assertEquals(student.getStudentId(), mapper.find(student.getStudentId()).get().getStudentId()); + + /* Update existing student object */ + student = new Student(student.getStudentId(), "AdamUpdated", 'A'); + + /* Update student in respectibe db */ + mapper.update(student); + + /* Check if student is updated in db */ + assertEquals(mapper.find(student.getStudentId()).get().getName(), "AdamUpdated"); + + /* Delete student in db */ + mapper.delete(student); + + /* Result should be false */ + assertEquals(false, mapper.find(student.getStudentId()).isPresent()); + } +} From 822ab8d9fd112bd71c82c211461c6d20a33b4325 Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Mon, 4 Apr 2016 16:35:22 +0530 Subject: [PATCH 098/123] Second type mapper is updated to use java.util.vector Second type mapper is updated to use java.util.vector --- .../java/com/iluwatar/datamapper/App.java | 31 ++++++++++++++++--- .../datamapper/StudentSecondDataMapper.java | 4 +-- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/App.java b/data-mapper/src/main/java/com/iluwatar/datamapper/App.java index 63e3af41d..d23e0219d 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/App.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/App.java @@ -37,7 +37,8 @@ public final class App { private static Logger log = Logger.getLogger(App.class); - + private static final String DB_TYPE_FIRST = "first"; + private static final String DB_TYPE_SECOND = "second"; /** * Program entry point. @@ -46,10 +47,32 @@ public final class App { */ public static void main(final String... args) { + if (log.isInfoEnabled() & args.length > 0) { + log.debug("App.main(), type: " + args[0]); + } - /* Create any type of mapper at implementation which is desired */ - /* final StudentDataMapper mapper = new StudentFirstDataMapper(); */ - final StudentDataMapper mapper = new StudentSecondDataMapper(); + StudentDataMapper mapper = null; + + /* Check the desired db type from runtime arguments */ + if (args.length == 0) { + + /* Create default data mapper for mysql */ + mapper = new StudentFirstDataMapper(); + + } else if (args.length > 0 && DB_TYPE_FIRST.equalsIgnoreCase(args[0])) { + + /* Create new data mapper for type 'first' */ + mapper = new StudentFirstDataMapper(); + + } else if (args.length > 0 && DB_TYPE_SECOND.equalsIgnoreCase(args[0])) { + + /* Create new data mapper for type 'second' */ + mapper = new StudentSecondDataMapper(); + } else { + + /* Don't couple any Data Mapper to java.sql.SQLException */ + throw new DataMapperException("Following data mapping type(" + args[0] + ") is not supported"); + } /* Create new student */ Student student = new Student(1, "Adam", 'A'); diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentSecondDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentSecondDataMapper.java index 62d39f90d..7ad9788c0 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentSecondDataMapper.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentSecondDataMapper.java @@ -18,14 +18,14 @@ */ package com.iluwatar.datamapper; -import java.util.ArrayList; +import java.util.Vector; import java.util.List; import java.util.Optional; public final class StudentSecondDataMapper implements StudentDataMapper { /* Note: Normally this would be in the form of an actual database */ - private List students = new ArrayList<>(); + private List students = new Vector<>(); @Override public Optional find(int studentId) { From c53dcf1274dcada25fd37bb0329240ba1c7cde3b Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Wed, 6 Apr 2016 13:14:10 +0530 Subject: [PATCH 099/123] Intent++ --- data-mapper/index.md | 51 ++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/data-mapper/index.md b/data-mapper/index.md index 684595c53..377487c8c 100644 --- a/data-mapper/index.md +++ b/data-mapper/index.md @@ -1,26 +1,25 @@ ---- -layout: pattern -title: Data Mapper -folder: data-mapper -permalink: /patterns/dm/ -categories: Persistence Tier -tags: - - Java - - Difficulty-Beginner ---- - -## Intent -Object provides an abstract interface to some type of database or -other persistence mechanism. - -![alt text](./etc/data-mapper.png "Data Mapper") - -## Applicability -Use the Data Mapper in any of the following situations - -* when you want to consolidate how the data layer is accessed -* when you want to avoid writing multiple data retrieval/persistence layers - -## Credits - -* [Data Mapper](http://richard.jp.leguen.ca/tutoring/soen343-f2010/tutorials/implementing-data-mapper/) +--- +layout: pattern +title: Data Mapper +folder: data-mapper +permalink: /patterns/dm/ +categories: Persistence Tier +tags: + - Java + - Difficulty-Beginner +--- + +## Intent +A layer of mappers that moves data between objects and a database while keeping them independent of each other and the mapper itself + +![alt text](./etc/data-mapper.png "Data Mapper") + +## Applicability +Use the Data Mapper in any of the following situations + +* when you want to consolidate how the data layer is accessed +* when you want to avoid writing multiple data retrieval/persistence layers + +## Credits + +* [Data Mapper](http://richard.jp.leguen.ca/tutoring/soen343-f2010/tutorials/implementing-data-mapper/) From 06e0a15400947ce703afea7e3c985c9efa8d73a0 Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Wed, 6 Apr 2016 13:18:42 +0530 Subject: [PATCH 100/123] Applicability++ --- data-mapper/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data-mapper/index.md b/data-mapper/index.md index 377487c8c..28b3939ee 100644 --- a/data-mapper/index.md +++ b/data-mapper/index.md @@ -17,8 +17,8 @@ A layer of mappers that moves data between objects and a database while keeping ## Applicability Use the Data Mapper in any of the following situations -* when you want to consolidate how the data layer is accessed -* when you want to avoid writing multiple data retrieval/persistence layers +* when you want to decouple data objects from DB access layer +* when you want to write multiple data retrieval/persistence implementations ## Credits From 335737d7ddbff8a2f28038da9fea96d85213ce85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Wed, 6 Apr 2016 20:37:02 +0300 Subject: [PATCH 101/123] Add alias for Multiton --- multiton/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/multiton/README.md b/multiton/README.md index 68fb6bbc6..0462ff0ec 100644 --- a/multiton/README.md +++ b/multiton/README.md @@ -9,6 +9,9 @@ tags: - Difficulty-Beginner --- +## Also known as +Registry + ## Intent Ensure a class only has limited number of instances, and provide a global point of access to them. From b72214da2fbdf72c1e28dbf67b1841fb1144e6e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Tue, 12 Apr 2016 23:04:37 +0300 Subject: [PATCH 102/123] Fix H2 database path problem --- dao/src/main/java/com/iluwatar/dao/App.java | 2 +- .../com/iluwatar/dao/CustomerSchemaSql.java | 22 +++++++++++++++++ .../com/iluwatar/dao/DbCustomerDaoTest.java | 24 ++++++++++++++++++- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/dao/src/main/java/com/iluwatar/dao/App.java b/dao/src/main/java/com/iluwatar/dao/App.java index a63289ae9..8a0c06739 100644 --- a/dao/src/main/java/com/iluwatar/dao/App.java +++ b/dao/src/main/java/com/iluwatar/dao/App.java @@ -50,7 +50,7 @@ import org.h2.jdbcx.JdbcDataSource; * */ public class App { - private static final String DB_URL = "jdbc:h2:~/dao:customerdb"; + private static final String DB_URL = "jdbc:h2:~/dao"; private static Logger log = Logger.getLogger(App.class); /** diff --git a/dao/src/main/java/com/iluwatar/dao/CustomerSchemaSql.java b/dao/src/main/java/com/iluwatar/dao/CustomerSchemaSql.java index 05707fa0e..860826abf 100644 --- a/dao/src/main/java/com/iluwatar/dao/CustomerSchemaSql.java +++ b/dao/src/main/java/com/iluwatar/dao/CustomerSchemaSql.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dao; public interface CustomerSchemaSql { diff --git a/dao/src/test/java/com/iluwatar/dao/DbCustomerDaoTest.java b/dao/src/test/java/com/iluwatar/dao/DbCustomerDaoTest.java index 08e61ebe6..ac69699df 100644 --- a/dao/src/test/java/com/iluwatar/dao/DbCustomerDaoTest.java +++ b/dao/src/test/java/com/iluwatar/dao/DbCustomerDaoTest.java @@ -1,3 +1,25 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package com.iluwatar.dao; import static org.junit.Assert.assertEquals; @@ -34,7 +56,7 @@ import de.bechte.junit.runners.context.HierarchicalContextRunner; @RunWith(HierarchicalContextRunner.class) public class DbCustomerDaoTest { - private static final String DB_URL = "jdbc:h2:~/dao:customerdb"; + private static final String DB_URL = "jdbc:h2:~/dao"; private DbCustomerDao dao; private Customer existingCustomer = new Customer(1, "Freddy", "Krueger"); From 3f9a7566573473235947099b8a68d892f6aeed3f Mon Sep 17 00:00:00 2001 From: gwildor28 Date: Wed, 13 Apr 2016 19:25:02 +0100 Subject: [PATCH 103/123] pom update --- pom.xml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 20b468246..98b79de08 100644 --- a/pom.xml +++ b/pom.xml @@ -1,19 +1,15 @@ @@ -50,6 +45,7 @@ 19.0 1.15.1 1.10.19 + 4.12.1 abstract-factory @@ -123,8 +119,7 @@ feature-toggle value-object monad - mutex - semaphore + mute-idiom @@ -197,6 +192,12 @@ ${systemrules.version} test + + de.bechte.junit + junit-hierarchicalcontextrunner + ${hierarchical-junit-runner-version} + test + @@ -396,4 +397,4 @@ - + \ No newline at end of file From ca8be7c43e3bc5a1590c5352137dcb2e203855b5 Mon Sep 17 00:00:00 2001 From: gwildor28 Date: Wed, 13 Apr 2016 19:26:31 +0100 Subject: [PATCH 104/123] pom update --- pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pom.xml b/pom.xml index 98b79de08..9d66f5f9b 100644 --- a/pom.xml +++ b/pom.xml @@ -120,6 +120,8 @@ value-object monad mute-idiom + mutex + semaphore From 685d093cff803609c25d35e58bf663c55262c2fa Mon Sep 17 00:00:00 2001 From: gwildor28 Date: Thu, 14 Apr 2016 17:33:52 +0100 Subject: [PATCH 105/123] added relative paths to pom in mutex/semaphore --- mutex/pom.xml | 1 + semaphore/pom.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/mutex/pom.xml b/mutex/pom.xml index 07c2d793c..6e418c1d1 100644 --- a/mutex/pom.xml +++ b/mutex/pom.xml @@ -30,6 +30,7 @@ com.iluwatar java-design-patterns 1.11.0-SNAPSHOT + ../pom.xml mutex diff --git a/semaphore/pom.xml b/semaphore/pom.xml index 14b551a1a..2d0bfb907 100644 --- a/semaphore/pom.xml +++ b/semaphore/pom.xml @@ -30,6 +30,7 @@ com.iluwatar java-design-patterns 1.11.0-SNAPSHOT + ../pom.xml semaphore From e821abdb1bc6e7a4238318bf89afb9cdb7810d95 Mon Sep 17 00:00:00 2001 From: gwildor28 Date: Thu, 14 Apr 2016 17:44:18 +0100 Subject: [PATCH 106/123] updated version to fix pom --- mutex/pom.xml | 3 +-- semaphore/pom.xml | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/mutex/pom.xml b/mutex/pom.xml index 6e418c1d1..c9e0e83b7 100644 --- a/mutex/pom.xml +++ b/mutex/pom.xml @@ -29,8 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT - ../pom.xml + 1.12.0-SNAPSHOT mutex diff --git a/semaphore/pom.xml b/semaphore/pom.xml index 2d0bfb907..a2dc143a1 100644 --- a/semaphore/pom.xml +++ b/semaphore/pom.xml @@ -29,8 +29,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT - ../pom.xml + 1.12.0-SNAPSHOT semaphore From 439e286f00e9c671cf940ccc3834f4342853766b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Fri, 15 Apr 2016 08:13:51 +0300 Subject: [PATCH 107/123] Fix minor display error --- business-delegate/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/business-delegate/README.md b/business-delegate/README.md index 7d6df3346..b5d37235c 100644 --- a/business-delegate/README.md +++ b/business-delegate/README.md @@ -25,4 +25,5 @@ Use the Business Delegate pattern when * you want to encapsulate service lookups and service calls ##Credits + * [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) From 8e69ebce9f8d03e4e785e1cd60bd063b4dc56e7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Fri, 15 Apr 2016 08:21:29 +0300 Subject: [PATCH 108/123] Fix display error --- callback/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/callback/README.md b/callback/README.md index be73dc78f..a408fd5e0 100644 --- a/callback/README.md +++ b/callback/README.md @@ -25,4 +25,4 @@ Use the Callback pattern when ## Real world examples -* [CyclicBarrier] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html#CyclicBarrier%28int,%20java.lang.Runnable%29) constructor can accept callback that will be triggered every time when barrier is tripped. +* [CyclicBarrier](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html#CyclicBarrier%28int,%20java.lang.Runnable%29) constructor can accept callback that will be triggered every time when barrier is tripped. From cf0570a5ed271d1d561667867f2fa568a8218cb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Fri, 15 Apr 2016 08:38:08 +0300 Subject: [PATCH 109/123] Fix display error --- lazy-loading/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/lazy-loading/README.md b/lazy-loading/README.md index d2c3db615..ca18c8f65 100644 --- a/lazy-loading/README.md +++ b/lazy-loading/README.md @@ -29,4 +29,5 @@ Use the Lazy Loading idiom when * JPA annotations @OneToOne, @OneToMany, @ManyToOne, @ManyToMany and fetch = FetchType.LAZY ##Credits + * [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) From 6f89315aa946dcc80ee414722979c956fb59c77d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Fri, 15 Apr 2016 08:41:15 +0300 Subject: [PATCH 110/123] Fix minor display error on web site --- publish-subscribe/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/publish-subscribe/README.md b/publish-subscribe/README.md index a19aa1031..703960a93 100644 --- a/publish-subscribe/README.md +++ b/publish-subscribe/README.md @@ -18,9 +18,8 @@ Broadcast messages from sender to all the interested receivers. ## Applicability Use the Publish Subscribe Channel pattern when -* two or more applications need to communicate using a messaging system for broadcasts. -======= * two or more applications need to communicate using a messaging system for broadcasts. ##Credits + * [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) From 886ad7e8f00b6dfc279253a12709e45f24be23c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 16 Apr 2016 08:52:16 +0300 Subject: [PATCH 111/123] Fix some markdown errors --- business-delegate/README.md | 2 +- lazy-loading/README.md | 2 +- publish-subscribe/README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/business-delegate/README.md b/business-delegate/README.md index b5d37235c..e6e249122 100644 --- a/business-delegate/README.md +++ b/business-delegate/README.md @@ -24,6 +24,6 @@ Use the Business Delegate pattern when * you want to orchestrate calls to multiple business services * you want to encapsulate service lookups and service calls -##Credits +## Credits * [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) diff --git a/lazy-loading/README.md b/lazy-loading/README.md index ca18c8f65..d40061293 100644 --- a/lazy-loading/README.md +++ b/lazy-loading/README.md @@ -28,6 +28,6 @@ Use the Lazy Loading idiom when * JPA annotations @OneToOne, @OneToMany, @ManyToOne, @ManyToMany and fetch = FetchType.LAZY -##Credits +## Credits * [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) diff --git a/publish-subscribe/README.md b/publish-subscribe/README.md index 703960a93..6a5b2dfa8 100644 --- a/publish-subscribe/README.md +++ b/publish-subscribe/README.md @@ -20,6 +20,6 @@ Use the Publish Subscribe Channel pattern when * two or more applications need to communicate using a messaging system for broadcasts. -##Credits +## Credits * [J2EE Design Patterns](http://www.amazon.com/J2EE-Design-Patterns-William-Crawford/dp/0596004273/ref=sr_1_2) From a2843297d872df89c2d25a96bf12eb13a3852a28 Mon Sep 17 00:00:00 2001 From: gwildor28 Date: Sun, 17 Apr 2016 14:46:52 +0100 Subject: [PATCH 112/123] JUnit tests --- .../src/main/java/com/iluwatar/mutex/App.java | 2 +- .../src/main/java/com/iluwatar/mutex/Jar.java | 7 ++- .../main/java/com/iluwatar/mutex/Mutex.java | 13 ++++- .../main/java/com/iluwatar/mutex/Thief.java | 2 +- .../test/java/com/iluwatar/mutex/JarTest.java | 43 ++++++++++++++ .../java/com/iluwatar/mutex/MutexTest.java | 47 ++++++++++++++++ .../com/iluwatar/semaphore/Semaphore.java | 26 +++++++-- .../com/iluwatar/semaphore/FruitBowlTest.java | 51 +++++++++++++++++ .../com/iluwatar/semaphore/SemaphoreTest.java | 56 +++++++++++++++++++ 9 files changed, 236 insertions(+), 11 deletions(-) create mode 100644 mutex/src/test/java/com/iluwatar/mutex/JarTest.java create mode 100644 mutex/src/test/java/com/iluwatar/mutex/MutexTest.java create mode 100644 semaphore/src/test/java/com/iluwatar/semaphore/FruitBowlTest.java create mode 100644 semaphore/src/test/java/com/iluwatar/semaphore/SemaphoreTest.java diff --git a/mutex/src/main/java/com/iluwatar/mutex/App.java b/mutex/src/main/java/com/iluwatar/mutex/App.java index 559453500..f6494bd5c 100644 --- a/mutex/src/main/java/com/iluwatar/mutex/App.java +++ b/mutex/src/main/java/com/iluwatar/mutex/App.java @@ -40,7 +40,7 @@ public class App { */ public static void main(String[] args) { Mutex mutex = new Mutex(); - Jar jar = new Jar(mutex); + Jar jar = new Jar(1000, mutex); Thief peter = new Thief("Peter", jar); Thief john = new Thief("John", jar); peter.start(); diff --git a/mutex/src/main/java/com/iluwatar/mutex/Jar.java b/mutex/src/main/java/com/iluwatar/mutex/Jar.java index e049b7a75..4fe0a4637 100644 --- a/mutex/src/main/java/com/iluwatar/mutex/Jar.java +++ b/mutex/src/main/java/com/iluwatar/mutex/Jar.java @@ -37,16 +37,17 @@ public class Jar { /** * The resource within the jar. */ - private int beans = 1000; + private int beans; - public Jar(Lock lock) { + public Jar(int beans, Lock lock) { + this.beans = beans; this.lock = lock; } /** * Method for a thief to take a bean. */ - public boolean takeBean(Thief thief) { + public boolean takeBean() { boolean success = false; try { lock.acquire(); diff --git a/mutex/src/main/java/com/iluwatar/mutex/Mutex.java b/mutex/src/main/java/com/iluwatar/mutex/Mutex.java index e15deaf48..8e08534cd 100644 --- a/mutex/src/main/java/com/iluwatar/mutex/Mutex.java +++ b/mutex/src/main/java/com/iluwatar/mutex/Mutex.java @@ -32,6 +32,13 @@ public class Mutex implements Lock { */ private Object owner; + /** + * Returns the current owner of the Mutex, or null if available + */ + public Object getOwner() { + return owner; + } + /** * Method called by a thread to acquire the lock. If the lock has already * been acquired this will wait until the lock has been released to @@ -51,8 +58,10 @@ public class Mutex implements Lock { */ @Override public synchronized void release() { - owner = null; - notify(); + if (Thread.currentThread() == owner) { + owner = null; + notify(); + } } } diff --git a/mutex/src/main/java/com/iluwatar/mutex/Thief.java b/mutex/src/main/java/com/iluwatar/mutex/Thief.java index 58ce019e0..d2225876c 100644 --- a/mutex/src/main/java/com/iluwatar/mutex/Thief.java +++ b/mutex/src/main/java/com/iluwatar/mutex/Thief.java @@ -51,7 +51,7 @@ public class Thief extends Thread { public void run() { int beans = 0; - while (jar.takeBean(this)) { + while (jar.takeBean()) { beans = beans + 1; System.out.println(name + " took a bean."); } diff --git a/mutex/src/test/java/com/iluwatar/mutex/JarTest.java b/mutex/src/test/java/com/iluwatar/mutex/JarTest.java new file mode 100644 index 000000000..97101466a --- /dev/null +++ b/mutex/src/test/java/com/iluwatar/mutex/JarTest.java @@ -0,0 +1,43 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.mutex; + +import org.junit.Test; +import static org.junit.Assert.*; + +/** + * Test case for taking beans from a Jar + */ +public class JarTest { + + @Test + public void testTakeBeans() { + Mutex mutex = new Mutex(); + Jar jar = new Jar(10, mutex); + for (int i = 0; i < 10; i++) { + assertTrue(jar.takeBean()); + } + assertFalse(jar.takeBean()); + } + +} \ No newline at end of file diff --git a/mutex/src/test/java/com/iluwatar/mutex/MutexTest.java b/mutex/src/test/java/com/iluwatar/mutex/MutexTest.java new file mode 100644 index 000000000..8b3e82cb4 --- /dev/null +++ b/mutex/src/test/java/com/iluwatar/mutex/MutexTest.java @@ -0,0 +1,47 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.mutex; + +import org.junit.Test; +import static org.junit.Assert.*; + +/** + * Test case for acquiring and releasing a Mutex + */ +public class MutexTest { + + @Test + public void acquireReleaseTest() { + Mutex mutex = new Mutex(); + assertNull(mutex.getOwner()); + try { + mutex.acquire(); + assertEquals(mutex.getOwner(), Thread.currentThread()); + } catch (InterruptedException e) { + fail(e.toString()); + } + mutex.release(); + assertNull(mutex.getOwner()); + } + +} \ No newline at end of file diff --git a/semaphore/src/main/java/com/iluwatar/semaphore/Semaphore.java b/semaphore/src/main/java/com/iluwatar/semaphore/Semaphore.java index 79f3b4465..2e4a54c7c 100644 --- a/semaphore/src/main/java/com/iluwatar/semaphore/Semaphore.java +++ b/semaphore/src/main/java/com/iluwatar/semaphore/Semaphore.java @@ -27,13 +27,29 @@ package com.iluwatar.semaphore; */ public class Semaphore implements Lock { + private final int licenses; /** * The number of concurrent resource accesses which are allowed. */ private int counter; - public Semaphore(int counter) { - this.counter = counter; + public Semaphore(int licenses) { + this.licenses = licenses; + this.counter = licenses; + } + + /** + * Returns the number of licenses managed by the Semaphore + */ + public int getNumLicenses() { + return licenses; + } + + /** + * Returns the number of available licenses + */ + public int getAvailableLicenses() { + return counter; } /** @@ -52,8 +68,10 @@ public class Semaphore implements Lock { * Method called by a thread to release the lock. */ public synchronized void release() { - counter = counter + 1; - notify(); + if (counter < licenses) { + counter = counter + 1; + notify(); + } } } diff --git a/semaphore/src/test/java/com/iluwatar/semaphore/FruitBowlTest.java b/semaphore/src/test/java/com/iluwatar/semaphore/FruitBowlTest.java new file mode 100644 index 000000000..be31f77ab --- /dev/null +++ b/semaphore/src/test/java/com/iluwatar/semaphore/FruitBowlTest.java @@ -0,0 +1,51 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.semaphore; + +import org.junit.Test; +import static org.junit.Assert.*; + +/** + * Test taking from and putting Fruit into a FruitBowl + */ +public class FruitBowlTest { + + @Test + public void fruitBowlTest() { + FruitBowl fbowl = new FruitBowl(); + + assertEquals(fbowl.countFruit(), 0); + + for (int i = 1; i <= 10; i++) { + fbowl.put(new Fruit(Fruit.FruitType.LEMON)); + assertEquals(fbowl.countFruit(), i); + } + + for (int i = 9; i >= 0; i--) { + assertNotNull(fbowl.take()); + assertEquals(fbowl.countFruit(), i); + } + + assertNull(fbowl.take()); + } +} diff --git a/semaphore/src/test/java/com/iluwatar/semaphore/SemaphoreTest.java b/semaphore/src/test/java/com/iluwatar/semaphore/SemaphoreTest.java new file mode 100644 index 000000000..14587a485 --- /dev/null +++ b/semaphore/src/test/java/com/iluwatar/semaphore/SemaphoreTest.java @@ -0,0 +1,56 @@ +/** + * The MIT License + * Copyright (c) 2014 Ilkka Seppälä + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +package com.iluwatar.semaphore; + +import org.junit.Test; +import static org.junit.Assert.*; + +/** + * Test case for acquiring and releasing a Semaphore + */ +public class SemaphoreTest { + + @Test + public void acquireReleaseTest() { + Semaphore sphore = new Semaphore(3); + + assertEquals(sphore.getAvailableLicenses(), 3); + + for (int i = 2; i >= 0; i--) { + try { + sphore.acquire(); + assertEquals(sphore.getAvailableLicenses(), i); + } catch (InterruptedException e) { + fail(e.toString()); + } + } + + for (int i = 1; i <= 3; i++) { + sphore.release(); + assertEquals(sphore.getAvailableLicenses(), i); + } + + sphore.release(); + assertEquals(sphore.getAvailableLicenses(), 3); + } +} From 8529d6e34b962beaa53b6025975674547b633c47 Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Mon, 18 Apr 2016 13:14:20 +0530 Subject: [PATCH 113/123] First review changes++ First review changes++ --- data-mapper/etc/data-mapper.png | Bin 54062 -> 40158 bytes data-mapper/pom.xml | 114 ++++++++---------- .../java/com/iluwatar/datamapper/App.java | 52 ++------ .../datamapper/DataMapperException.java | 2 + ...Mapper.java => StudentDataMapperImpl.java} | 8 +- .../datamapper/StudentSecondDataMapper.java | 101 ---------------- .../java/com/iluwatar/datamapper/AppTest.java | 1 - .../iluwatar/datamapper/DataMapperTest.java | 39 +----- .../com/iluwatar/datamapper/StudentTest.java | 50 ++++++++ 9 files changed, 118 insertions(+), 249 deletions(-) rename data-mapper/src/main/java/com/iluwatar/datamapper/{StudentFirstDataMapper.java => StudentDataMapperImpl.java} (92%) delete mode 100644 data-mapper/src/main/java/com/iluwatar/datamapper/StudentSecondDataMapper.java create mode 100644 data-mapper/src/test/java/com/iluwatar/datamapper/StudentTest.java diff --git a/data-mapper/etc/data-mapper.png b/data-mapper/etc/data-mapper.png index 8fc90f591deb0c08aa2479c37a268ef0b5d5de2c..bcda8054aac81eb6fb2bb564053a7e1fcd93c003 100644 GIT binary patch literal 40158 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≀G`|+$$&(X4Bxlnj6(385V$r3EXY7f;H#DF5Xf7 zpoOjg3ZqGnGFjj#7SP{AsLu9;>ARLW9kX)vM^POInzMB!!83_Z!r%|q89w9jZ#M_m6!w2F|y;-4V4NU=aW*Lt4gjsfRhN9&nAIfUn^0E^<<8iD{)ibV%#> zxGyG&PsMJ1RRTl>*8nozaz*z1OL935Ws?hwe_7j$x%<@yZG7 zUcenDs>WTR=x>M4FK9A`_-l#}HX+g!ADyDe!Sr$bBT2#|4X>B+#yPO4eyxh&Zw!Ckg?TB|>2-*D`SPuo&=e(=q5+)YB8r+a34Nr! zz{r~mFY?BD*s!XJq5WY=%MS^IExmy~)sv0^^O-617Pn`tLVx}Q3^fGq)?a)f&{`6j z&3xetm$y%eX0}_^rFf;@Te)7K8nkn7?)qklHDeF>HMSD;Xdl4dE5pN50tI=7;&CPx zbeD$PUWpa+Ycyx}MuIF9JqL95LCfK8183bX%58Ix;Ky=Du1x8F?6!q^1`iJ+2`3hn zef9X;8SyY4uoG8tNZC2M>;wPW?-A9ngh8wFc!j zQOf5&@na6!ypwNXg2Sagy$fSUeZB_2T*Fd;)R59$00PsT5J@{1wJ5iUEM&A>83XtK zTh)Cr+dP(WOVe3+o<>fn1?>Sm^kDiZMNTRfGhiB_aAG;4;lmO;+I7e- zpKn1(!NW*bkZuZhO~WKTmL}3YvHG8E{viUJh)T+m#U+nu*QI8SH#!juQbbF6RW^(w zj+PC4572|?CVGFDXcjL4ikne1@nI(8cxlz*b&n^U>(+l{u$nBSX^2&L%dbW^<9DJE zu~BvKWy-g7GY?N7r~C-A`_zQEM43L)26WAri-2eF(*D%ZLEIxC#JejG!%{GN3>^wn z<9|d&I5SPhq~v9nb;p!U_Gt=z>a-X)BVSrY?+0lEP{broZFTkQXsyzxCuZ}B=IQve zjxxq!b5lSQt&OsZx_r_{Ab7Qe>3cmR)1jf9{4~E55M6sLrrX=_eOFbA9@AhKl}=JW?Sv4}s@Miw3ewP^qBUo@{=l0y7= zf_%B_`Km4*_C9Ht3cuuV?4pvrrGGKWZeeXM)co}O8$0|N-3MM5dR|H99p3K*vQ7#9 zaSpyjwp}JZlbA8h$~S|8u1LjMc#-@KSCT8Q_o9@$%44$W<$r|S ztn16Q$6|8|J-ghxF!*(tFwd~V{rDW0Z7{CZY1Kr0c|X>UhuiBG)Pd(Plhxz&e!BU> zRGeD)S{+Gh27Ko*wPcW$@MuFV(ks=B_jeP|c93&w1Tub;?gO&5K8*(Y`4fL_L6X$q z_k>2NtR5xu#(};%L5~7P{03HBrgd#{v;%$ye{T=;ZCXcPmg`Kfmn7jxd!J!jNGksdk+&tqFX8(t&%Iz6EW}a^Df_Lj zPo{7WE?-nBo~V|bU#?XztwOCMk03LFA?Cu44rMSG{U;gQt>fEEf|EPCw)*p|u@5f1 zW8H>Rj>8Cq#n0iv?F`n!cgq8_ZtluImz)#B8FRQQ5y7G*zks!l)C3u`;D6zbRdMUg z4;AvyI)3VQG5ioxfOh~6w~AUkzP~r@w#37T7Kit1Z_58dX7)~6>VEq2gcrRR`tMLY zjL>+uO#FdD5rmZ$OZ8g3HjVm6k7t*^NE)h$!`8%%qdyckG|>5> zjA~1?dWB&ieIYqQ%zGVmp`=$Go< zcxGQf2Ar_>l6#;s7>oL<6nM2Pd&H`4$Oi{Et(mG6@hKYb4YB+vc@zC zouDJR(-(NAOw=>FwUQXx?I+n{gY^Ri^SZW6Wf2K|;~HCScUjFz)Rw;}e3WJ$ zNrlPzvSnFCdlb5FG6Ik&yDe8b?4vJW?&r9{<;PB)%WJ-E&zjnE)3roiGG^ixS4n5d znWi_okE@oJI!*;^;ltaS^@WdectjcAIa8*BjpgQ&yBUESI~fHV%UQwGf&nhPu!y7f zvIocTVkni*e@7!@R}IUr^gojms?{s*K>aajE|_GRE844 zULp_O(Qt~RckZaisizm8LTWeQ&@o~`zoYcEfo$^?74BaKC9V{3L(1wMyF`)bpu33` z(Di~k@9lB0sY9Z%U6p#;?8bI!J+!dw%;vI9&_%5F-Dp#=ppN7k_{Ay6@ZQEv8BYTgjZcdpv}Ud8lXoRv1MrJ;Jp8$D{&n>->@g16UF+@3UF zqAy%2=ySx~DCdw;ugT~_H0GasnGl*701kfp`ulhPEa4~_3oP#Zp#1T6>y+L(V&Z3t z-0A#pV(t52-@HYXB6FhojlZD({5T=#2?CV>@?fUJ=vfF^cQu*{HxgEyD6dJJ^C8Iy z(|V)m6FcD+sCxSYmzReYBF&d?)dcUW{N_4p{nxG5Z3Xd-uVXz$3xUn^n~WR!{$!tS zDS;dKOPKJWX?R13Kcss1qo1o^-u=W|&=ZnNe-{iV&s(&H$scfXQ<8S;8@ek9Ym9RFS&e{*(z z*Cz(jBD)ZSXnw8(UX|Z=DXSaf73yujO#4*p8h{V zuFg~mGwakpOGWqZ`5nE4JUI@K>y~J0{pb zh01!pJieys`hs{6!<<3~%+j9pU{)O&gTd?=#+W`;TCCg^I$(#*7Yd9oA9To3V%{Mz zyH^TIPVZ)Az`#@#Rsou>-vKVI${wt%F75w&iZewG{`K`D7w)>xy@F7*h;7HAVF2-% zIUmB`o-Wzfi(x;lUOW8&(L*9&5M7hZ3SvXm4EU&$eQ| zK7Ep)H05T?G=#YWaZOv&j%RCB53>^47+u`4L!RRz2|`UmU6PI-D+ab+RpR?kij=s? zDAfkKe1F1^%xf19GUD_>G)fYo!FTT?NQGFVMixqZfRD(^O2KY!5*l|{!i>pu#|hhZ z_k-y|8WsBlGfb)_vsS}Gr|MCPs&%O!b|iiXee9Ae94b}GJ<+8VRfEM~EP$!hst;lnTW&A= z(eQjz9x+%i7B4GNgJsB?maeE@&|s|w4~r+Y6PpwYG|&OSx`+6Z4?LBBPBBj5ZheDS zgW;s2bhmimQ54;BVr|`1WOGtkvTSWB@_2D#Z?n5jyl#_wy#61Q_iwNjWMUAcRYRjN zgUQ9Y0|`}Qp8(yg1$5a<6L2QiNBRG>7UrK-x>DN#}M~7Q=j@9k072y=VeZdD!`K!zdJT>M7A!6)hPhy$Pw`s`Wws2Moxq2hP*gOij%A<|GXw@b$#y3WXj+^zN8NmbKebffPfnh9Upv? zQihPJeGD55aJYR0i~|)pKRmCs=d-Y(*W#a& zXE*2UqV`4LM1|%Xan-ax4h<YVOu8F?d=Xcd1f)mUn_Q!HW#t@P*+cVVVU~a z2>}Aai^dQpTcvSpQW?&~vfeO9 z)Y-Ay+OWy(zbxcR0|(QeZux=uM)?l~wp<0))Sp6|f%Xobl3?q+gfe-}SPQGNL%|Xh z?6k?rn+^ZPbPxWajm>ngO~XrL*LX*;H%QUnKf{%-&{LiRUb#Q7?}l@yuV^(mR~cM} zav0|;3@>})3vSufkOcf&YTF>}HVbrGdCp>|R39NxD*2aBzeCKkBHF7f-5;yyajENY zqZdkOE%zn*yY7mH!2{+2%$@HIzGy_1LV>Ltw1Lpw6f?cHV_ReYTWc!d5d@vQU3sw6 z>h}5y=Y<(HkmwpfS)^}#t)-%agMZ>xApVHLg8)Y}!v6Odi@EfLV}sv<2d^bpjwK#m zMjt;KOj{INFwW8VV&m<)>b3a1RWW^}<(scAfqf6*KeQV+5wvL^PT|dHHAs=Bniinj z@3WhGom{R1M!Rq0yw~l^{;q~Ku+vq99`x4JN)2*qqqzh4Z`3RrJY;JTIxA1U*jG4N zW{ZaO6kj^jl?)F<6U1%`Z44Kmd`#@`eEPQRuVG6p;c!F7J5QDP> z*~v^gkrgWGg$y>$-Og0m^M^S<1U7cVI#j`0$XP(w|F1wNLO40%E@`?{?A5p zf2C8r7}Q_3CGpd;dv@a{pQ^uAWF5o{BSUix{(JQY2rs;TWPuLIwG*E*1@q%{5(meq z5$5jZlRP!E%_w7=l!RS2HC2KT=vo9lk_rL8wAbVXzcgR}pG}6BWNDG|wlqJbMjgr@ zCqfG5;!vD$w;g-;mqqEB*b3JcibL*CU+~e46{a;oeN13NMirn3R!|S4weic-(bRW( z=#f(aJ=V(P)0<{*X?yqp=Vf?DKb02Va^;*_&5??IH-~`=0)lB3Ief>N=bUJ#s~7VM zyN!%#uQ#qILw%eC1H$)t>a@4_I@UA3^TC*25J*YgJew&sQ-mDYQ|`7bN`9I$Sj7;zXW`zFh4 zZ%KH<{}=1WN;Bogf|`&IIjLhRt;q;V1NL``EYt9!H7P(C=$kapdgJvpl@>10Nkd1y z^My7o#cO(=eax6jv9VZwcAORF4}sFMwuBttI3^Rf9$yo%X(2by=5rgqK;sp9VN-{- zORH4UP(kU&P9K-AkG-v`U5&^)9$2@U@{#(>^U&}e3it)5q5y~D<`KmQ zoRvhr1w!9W4o$FF#)5z9`7K=mdPMq2+d=F@+S@Ad5JLB3$pMX@w`jTq`g@Ad6H+T= zZ@qG1)z@OQ6d3fe9{_0K?XZC7|+n*<;vX&o!AI_U4GKtsY0C`oX~ zA5hY$s_ln39L9V3UF6k}{8BFL_TyB5i*qzuV(DKJ!7fDkI*5uIWx4UjZX$T|-W3R` zJG5oijj5|IsGQ&ui;8}XeO5$}qm6g@M?)&ip3I;2nj&XcaG60}q8_u2iba5E9pJQ- zs_{!srrmK}M~8V7wY}~d``nsb?ae&nvz7G%7J$Czl8oVB7jzDIZ{uCB<#Spnd|WrDosh>0WHJujVVphiM?V zGkD1j`_oyDCBkezXd5|~7#8D^5fIe77||evDc0tJr|X(UJyB6rr0BumL9w0ktCYB>D(2org{44 z8#BwL7fa-44+7RZ!nvA~e}$rm6s z^nRQ-v+b$U^k8J0YA+%cl++vt3wbe?V@nJ2bE|7%s=^o3<|ehG()-^ngR@L;c;0cF z=zJrq@-f0RR3-h4hP-ptthFy%lj2cHoSi_NT~yY5kbrsi9UHN2uejoO5RCUVZ&{HB z#(7f)*t$z`QZH;yhFeBCt-Tw+pKjzuKL-Rt>^lb3?2p2y>F+niXDiP&wiBk_J7MR{ z&^U(_M{1#8?TF#HtVP4bL;}E$OFoMZS!!$$ovWKixEi#q(kJmdZ_(0zvmLZO<*td^U6O_;)s8W5R#W@_|iCUASF9 zBzd2j1xS}0%PO^?7eEtF_d92roD}W~9BZc^d^x`UAN(Y_lre4OrXys< z<^9)CCNwt?Jo$sK;IyTCo^hj`*Mz9N{x%kjRyZl-dj3AJbrygelR7m?DceGOthfO= z_9gP3xbv6QFNw{iBjtT$+!Q=uE{kijNhUI`$Va{S^XGyZFnW4?zT7L{$};qKAmmzM zk?Y1XYkKr-<1RpGqItp)u9PbAW?l=gB^1%yK;H6wffX_QS1d%vSEsqqRsUB4AuGj7 zk!s4Ef9NmAOdVrCc2~c?e3;Gyay|ga{U9rDb(O0{y25Vrt9AzN#22Q1?&EfI{6HK^ z+AhSdtMuR?3h!U%5HfwtHA%G^;)GQUc#4sDK2j2xYZ?`W(IOz9^5-%QB+ME=Ekrz) zbXUWEd^vXizJ5!|su&=07Pb%`KDffGS;7#3}7;wTOj~qg`h;K44vAj7wZ7Qf0$mbn!@tOnrr%%W8#Bt!V zhP*6YOMzgLO^AKf@w3Q?rWNPg+h)4~VqRnAN+M5{Vs2s$Rfl&Q1ACS_-1b-T4{sc5 zlFU0?9T6uoo!!ma`^o%P_6Kv@k_w`ij zkMDQct@ZWEK(!zFXB=Gwln{cv2z(U^@Vx?L6)qGZp?j(5iep2HoNko zVq>N)gx-SyD(1`DNUJCx`+r8kn1F5kFTwD>h70xF`GBDtC6}u7st8(?-YVoxY0!P? zmOOlOJmHs%QP=qK_X^c8H)G_Wp z*-G>)6DW$}Y@@aSMB~cNjmvP|OL6|Gzi(;he@G|a+O^jE81UFWCzq`~;EO#jHYo;% zj^5*}mVdwgx-@=-yeDG*l_xM6(r_2!Y6ScDjC>s&b>6e z73IC=2)XX^p2+&9vtX%Pr%GY@z8d&X?oW?Fh$@XeMM$w^WDOj|hNPI` z|JmkpS;lhy%v3PGFF@K8>Z&~BCBuTb-_JT83^61A$%H7nIC7q9Y;B* z#rH?sa2exKFZxv3KvX2SS1=e1(;`*#34QrvBJ&08CXlZ{D7s)2oPC?5Zq=9&&wj2bm zrh?fH-!(Vt%QY|#|EIk-4~M$#`}jviNvKOvgqABRp)h18l@?oe*~vCztRaRG6_rrg zcanV>OU7=LkbPgrkjuV~bq2%uox^qA_j5mY*Yo^-&+p&cKOINMk-qc&e&;;T&*$@g zzuve>x5S470i`K+W@kF3o*Yb$bA>nO=u_0*0WbBvgXGGcf%itej3O`CSN5ehqwm>2 z1`T4$ZLHG6rL&t6`m}^sh19mH2$0|T=i&JCJh+U zpW5@7Si$`H%HE{pR7#`Qs(UGql*KK2|-@uFsBpfWs~x6s;AX zIIR6h6Kr?vaL{@Ie6ytDSIm^l4VKtd`|B`F9Dsdjwy)uShzBhx-|_lTPY+q{iQ+yX z&}FXW&MVUWBiD-fd$8;!-8Ns7SA(Xz3Hm7%Y{cKxqlXqJt?My1LM1n>F7X6q&ip}f z=@9X{0b0C3!5FBem}dke2Gt(m<-D;i!_SO6RHfj5_1F*49ejHKaORVz$Nt(!8DNZg zRm*9IDHeWrU+QE?CBP5;Y=S*P_5u+@l!Cr>zgAFeYBP8P0$Wp*qXVdur)> zr~YXvllr=4Irh?Y{RAX0I&<9~GQxL_ZSM*-95e%g{gAo^x7?;~!7<*rXqe=H(}XeRJgE2c`%=)ekT}V^up46ppOnxB7VzzWMO2gEDajDc@VKH>d!5RohRTgV1>n2 zi;qKkFH;xnf9Yoq7eITOc$Po&@Fr+}^VSU&KQX=EupGWGzo$7||EhnF1S_kRZHNMD za>AKcjRUHottfsauI~16_du)Mi}U+Rwmfddcjkp&Cl(GticerBbE|HYNyP3CYoOJZom2UZH7HB+26Y0h zth~;5##Yc-N)h^~4ppGD3r;O(=ROtH?k)4`!?3Al(H2y*fyzSJ3Dj8>v(Vh3dRC)h zP{j;)ew1fFp8)q-8^|T#!@qL++)||^R7$w+S^zs@NsP?O zKyXaaj-;<@OQz}fa;MyQ7WM105;Lgp!1i`|Avbr=_(mK*cl}z?scW)n)avC>L|;pT zf^lQ)^$ppr0R(`PfQo4H&}B}8K;|H;(Zp!HMAhq^r$tmTNRt~pb;_5IKgTF%p^)8~ zqd(=mw=6i$55qCFlfN%ew}aUpjN97p+w6WoozFBCpZ+Q$*tTyi)YymymY0v}SF2P7 z2Iv^V3sRh#+8ABv@pbZ(rul+fC%i`xB~k_WT|)^V*N;A~H(vbRS~^cLd9$cD1=Yv8 zDSd4S?WI0Uh|}11vqbE$9;luL-_aKGw*X^}Sp~P5lq|GWn%IZ~Sfn2XBD>jRkH4Ja zM?$@B&pPnZR8EpSwb@ox6NPm~2wDos*db9H2IDX>P-cakAScUeJE))d=zYxR$IhWS zg1SDfVSSpQB|MGO?VI!6G`uS>G}_|<-nAS6H~=+C)plNnI^XBIIn!nJ*=J`UB=yo$ z<1{*s6nE(NS5UP_6MD6<$!|F~vX{m_LETM><)#N}U&B{m3!Oe|8nAV4+PC)glEaBo z$YUoaFm$=PjL$U1d%wK(PWVKr!eJXQmVLVwUm_FrmPk@2yF62Uk0Z7W`PPxAi$*SB z-F(dIi+WKEG$v5cx0=KkPB66?RslE$db3Nv%yS_c?4VaIRZT*iXBl#X$hFJ;S)~0k zuf1XCar;oXgVzdA&^liaE3DToea z9-?VxF6!RAP{?le+rifF_t!sfDM#tV&o0L_-VGDu?!LtXc_nb}c9^-ce(wk`l9`d@ zzRZKRcXn*a?Um5H$Tj7b}(V@=ZeSk8ESg)n2ofQ_lWFT&QR`)`5S=&a3nc_~^cCR= z!$#5Iz^lao=XJbGlr^&@=xTkm)-pk(d&G_8P7h0Bvo9KzAK-VOh5guXP$*?PheHSw{KzUl15cqk*n@}@#oFw zo3@*)4=IKLgZ30c9Lus~VJh`wu6IX;=(pPCXWF);yK%bT5kJN^xF{Pc=S6}}-re8#@4#Jfl3`$B_etn4NE1*msWcjneb09)cjE)WK2Zv=4 zruk*Ai$^^*&*Zs^=^gyt;|G;0mDz6T|} zOOw|hX5JNfLZ2wI{3QApq^O^&8kaJKbj|UXx5P|b+p(7&S$th;$yb@F#|o-fo%*k0 zOR~NB+`q~F5MUm;m>uuFx`~@=!$sGAQL1tQyfcF=M>!juzYL2f;<+ocLE-SgSDs4? zZv*3IzpRJI=fzK}8>&r=i09JkTOVA@Ka=9;ztejVBNbJSZqSZn;wry@lzJF|^F-$v zfcf+K*rWxdR|I*%Ox2Di`w?h<%M#1W@~-Dak=-9TNfk0Xeg(T$%#VO>SdpU!&`6c)@j{PDs9%VOvU@VWIMjxv={oC zVxm7dIIm~;)y;ex?fS?FJ8P%cxeVkBnxOJGm(4g_FM}piro1zQxwgdPN}Xy16``xJ zBx{w!*{nznQCxP9vf?bY!Cj6w1ODtnCCJ!2^vK3 zJCAdNK1=UK7H{J|>}HvtH%d*G#7ucpMu*(Klzxf$`Al_7m(-K`6=GVFVS!ta>$aTa z@R>|QrkLm(9|j{U(`|H2;yVWgETUnm*3AUdE){@yFV>w4KD##xLJ)(c(b(he|8Grya0mvoX1rAU`rxl(p9nkh^* zD2;04z29e5HXip)fvisYJQrfc7B)(F3##VChANehul?Y%4?{fZRIy!h# z#xWmwJu@vtHG_9XZFbfUGEb*zB&g5va&=j8*}Ck?Y9TO^-rr@AE!$)>+qAZ^I;LY%0n`hA6sFN@uL}_J}rXvq8i__&*fNx*1 zku_z+g{-jqLc+UHe|L6-f@YuPT8h|c4xTx&p6RtVUJzUD)-09Mu;{T0xMEZ>r;-mR zU%lV_IqN>NYD`PT|9c$}pDnAM>OFmx41g|Nl>tVGyEY}4j$}=K7aKr3Ey@=Oy(NrD zYU6hMxCmE@LQm!LdGiMbGT-Zp*bZ5DH;g4VsfEapdREKUSN)4t2L#JDErgL*y14Pq z^3wHJv5`f;kB&%_isjhdM)-wOsPhE>Eno9v_kpsvfj8M-Kj6zdY~e#0I!HR`GtYes zkliW0(6y^D0+YaoPpHZw-D?FkC@)C~TeR8k-;=%r=+Y*cJrk`0BE zRzXdh4;BD2#-p^D~I>HmGfsApjC99EPs9p8u!!$6IV zl=~i?ny*EXhJ++v!G3P9q~<0^O$-wQ=0{qmuGiy=`?ir+S9jX}1;ghqHrAOH9W|Im zbS0g;=*00AskKzbs%LqpQiu4*bAGtTps`)J;ToIX9Sq!f?)LQQCK7832bGnF?||mo$SJ~Z$KJe^V&EIijUbjFZkH57_^LHoAB$ed^q7oDB)!osg9Ieg6d{q;J}YjC11R0 zDl;+8Z0m$w6NBCP-RT}Q#ebxI2=1NAU9qZA2@q3umG8cbrZmfHNRypZo>aca3yO_9 zSYcUNvlxYVF`UwD+k@kHp6acMaOoLk;zN}3>a!`@_1~T0QE92g@bBmw3A6dUgBFXj zrG`W!-7dD4{BrZ_<@b?LJEBU*hkt+rD{q7%0^{g8B`av-g)pO)xvLMDrG5^NITUt( zYHECj770^J(8HK0sJ7C$f5U~*EAR`e^3QB!%C~EM?*0<_YwZYVVJXFGsy2GI4(%qR zfJ=Ocf|Uj%CmlPA_YVpsvTgDnnq4_k#b0JD=P=P)1lv1^8U|F7HnD`M(ZYe()EVC;u@iNI*q<_Y3Mc0=&&v$_<>Noquhip!Xy-*$f%JX z!BijF!8UK_PPFJhBJ;15M{rsqfK_+vgg5gF>BJ9P!f-`^`q!;eZ;k`Bgcn{rz{;=? zFH1F8If;1{qc5#)7UNd12~}SQkQlf`E+Yq(<2}R;Hl&kHp7R(Oo`l!a^LKGC}sJ3=Z1 zj4$Ec*uLxm0xt}1eKD*w*Nc;Q(@Oc41NjJ_IY$Pkkz8vj#OEjDpi*Y44U^?MK)5 za^bM_g%TgTK2A*9*gY(%nly?)t2w(sbnk!z7&Bq0o!QPCTjfon+o{DDM|#^k2Cui4 zQ;wczv4Y0Befk;g+JyavP^MkQoEdmEPyZy}38@}6^Drtbo?e=H&Zq>F`S<{Fk9a7C zo{-cr>M7zj=&SUe;M(c5@>r`T(iM3X+>u>vsNBMFkL2h-RfrKAp4>81%r`$J_zuV3 zIrKO&C2u6oU>_U#2QO)&aHJ~{<93eIEc12-jAPeX&*B}5 z6;ID8!usSU9(zP?*~L5WaWmYpaStbmEZd8NlT*1O7gyXc?!^*mZ7|!xxs{2MzK;kq z8PV6vd=JSJ<}h#&HxC84!-+vDj>pTQGdCAUmCY^=rerN8jcf(H#<>&e{&v zQy(kSfnJ+KPj>`+J>K0S?7a2Z?d{rXEt2iSMs4%&OayYz22UDww0Ul)ZCiQxa_k)9 z-N0D((v>eY!2AH(G6dN<3%yj8*wH1L9`=}ZUKo{AVgWBqJxPhDW25yo|FLW2AC{l% z)v`D)^M|zF6AlfOY{xdwuy(!$-=@(i4RD|3QHe%x|K0>HgY;=6n!EBdHFpc)vrZsQ zztb%^u5wH~zW5U5ZLo97* zQ61(6LqKvx^zP+)c5lN?6uBxCEM7(RjNdZkZib&}IBSj;KanSy5n<6t=@;9O*iDzwZ3Oi8zIc33w`OWC|k<&H%{MB(n5E9aHdLVRDCbvUeiUtn)p zO&K{KOA{hDdhwH8Zou$QHX_FnU573q$9PKntnGCzRi_`$s}9d0L@b0XT*I2lvskt} z5qggZVGLZAM)0`ykt^kPtum`b7O4^P?ihFZ0vnghG50ox>OGK=_xVBa)uRxRKm9K+&yzyXu zjv6=CqMGbq>!MkEzR@dC=t++?W|2>7)_2zf9lh2rt^=%$7tf=}TOoqOUL@(t?Kt-x ze1i2A_RRcS+YZqzkq1-4@z);S^edu>Rik9H)$4WVB~e}83B8f?gy9EXtUC<1D9Q6y zt)V&tglkl?C0M@79?Lpr&=t9UQ=32JS;SA2_E^R-NVrl)W&(?Ir@aWsgkdB>x@TnP z#Lm!&bsw*rwqnAH%L@~)u71L+qHgmssuXA+o4MzKFy>FVo*nkSg>)p#CTEB7HAniv z|5{!je`Q1Ckotz|iS-ZZG z#2u%mgFgZN419%aDB-#m%B_p2iAYXc^?IcT3zk(@W%4r(ikUbEj#r5)^S~t6T}r zI9Aw}k6OFq7e zRN>3wiR@g&z(X(Np^7Y0uo}jo#WE!#_2})I) zHMGBqS1V~NwLZzT<1E2y;K}EDZFJ=VnikSag~?{qZ2DZdDu;8?mNaOKF5Kv5+8rN` z?H7!6h!VA$0tatBz_z*nc3(b;5P0w>M3qP1W^GN}u-mREDrD`che|=csjI`Ftf?vy zm_L6v1I?R!^u=^~Wl^c0E!SMgDMsWAZI7IgUy-LnQ>+B6OKOpJhD}$LY3FJ^y>)6n z`A8(|DU4llQ*^+MNI+%Ajpg#(7zisbbe>TrH|D>87DbdK)rZ`#^cpk7SK5R`sg?jG z*n9dU{zCS9IEIVmP?l|MvHS{SpHU20Oqz&#qJh5tA`@9WIYp)zjxBaf}jH{f=; zNN8!Ixsh?_O9#@{cEAI9-PW`E!}%vA@A7Rw-o60QZKA$(bYVx^vp91RYOz(*Vh4+O z$CTTmL|_VN9Z|qCaIf$@-$r*o&AnJXnO7tkiD)w66sJO97XbwJqa=-(Y2rPdq1tf& zfd#sv`md-6XR=TF)S>fw#7{m{@#R4E$eC_kTtiPZnp-|nKv2zJgxR9EZFm}YXz|s# zC;n6RLBA{ol*>6t={>Ky4PgwFk(k}$T+2bDYd18S@(M=skFWsm!YN@3Sfwyd^fy(Q z6Bsqkt-<<5lM>dk2|%JiYRK*??!QrDKAdaDPhbeTF|{7m;>O*Ek`bnQg*(s|!8h;n zZa;>YaDpVNYW7o1XE)`6ytK#x@2Tb`Ode`*i_3{)cUN!0`*+I#Ag>~6TvR9UslXP` zJ<;2wXE;frg}$@6b7p@@Q&&`oF*sXU4Z&mYY|!2X_A0{@>plYeOxica+k-z%u*=29 zmuJNTyLb)s3sYr*{xAYY(DQRpc+zzvM=)zAG-zje6hl z)Y026@`^TwZs0k$i-f6cOs|I&UUwe3zLtUJ+ZntA-R<|9q>Wxz9`N04`_AW`Io|sj z*c7|~9AgT~kNJH<dN{ ze>;p!#Ic)85~34h7Md2D{Pb|&%ift=W9DMD^o>Gn_045^EhEUZDjVxj{;pVzdudKs zt2-yA)=!Vu@Q>3q=#-!GA)n54iy^P~rEFRc`(;~);a{-lQtqW= zfN=refWwI1%u+g)gZM4(%19cJ?X&5!;6jhu8Kru-sK&QpSRF&S-v$(U+YjfojvCol z-YCyvFcLdlh(3WM4M^|4Oy#KTxfuKvs>clNaGi8<^gz$O9ep+Plg@l{J%wc5Z69c= zulFwEX#J!5Bape{Q1JC>r5%lChi9{Lyz}jPGe70HlVJ3WjgEEK=+{EUOPbE*y;&9u zl_#lahjwF+xG$e|AATD-0qJ=I_DQ(GaZOf*ygFEZ(s?!Iv{Mswb1Ux3X#X9>z=NZf zcz6saYnFn4^Kw;YZt6n`wL2|e>_OZbb(R28qYamZKqj(!+p9@O_s=X_z!U*~jvoXU zsz%$05Mata3E;ohd&FMwziB;(Jny-!;gCqpNckV~Q2@v;@uGwS4 zb2}fUs2jHed&60H%8D`k*qz{%?Y^?#sAG!cD>tdKj$du3qDTCw81Fnn>hepEkBZPy zbiSFA8rV&*N@xlO7_!gCXw?6#*uCio^lk=0&zT^n_M+ylb^N>QJ^Lm{5Vvblge&Z* z|BpAxQ7Zt7ms*{T+YfAtiSL>RW7l+@i=z&>z1^$qCVUdXkLY^jQo4XN#q|nJ*>#0n zvEPH7Ub#uvw&#`4Yw~{5??pSeNnUB5(OuelyC7&_H2$oo!gwK>cV_|g#iw0fj$|#3 zEn$S`N)R!mYZX$vMF*;dfPF6XH_Z2I(A-XgG*aV!cJ?ZfXPLIu{ z02KZ6+M!=50gm>+w}Gp6RYpCJqpyvVSH=KWjFrm#J?pC)a5y}(a=kA3+b2YC9Ki14 zjIfQ3p#f)WK3?pkAPbTss2sMbws7ob0QNnjM38(2l7!%G`A~{!{KNWTyDo*j8xF_WoN+5cW~%U;Zbep zmdqDC)1y<0oC;L+sdJ;|q4IjvLcYa|!jS}V^$%mOKgO3*h2uU|e|9uH(1R6MVY`tp zQYVN-Qi*;_J!N`l*B{fE&{CoQ63!M64o2Kv>rhBod-!fC@ZC2k91}cY#@i`=!S|Nl zEpnq|d|6qVGg*UGt1f@ADn%UK#w;f;W>NNLepz#kGTDGc5$~#oQM_x+{@xkCX|j#VnF^O2OrYEGB4cUq`KpO`jy zt6Te7MJhx>zRUjNR8c?ag8g)Udf!n9-*ZRmY8WaxoXdIC`e*G(&kpxcX8j^k4ZGZh z_i)J8>Z@9go)zu3Nk_^d7d^0Stp=;gSmt!3t-bCO6$6V&K6Z33-Q1-hZa9f!zKL!w zA3s2e-K^JD+So)rqA6}Yb7ei02aj1;<^nCpyCYBDAkd*sL8YNfs|(xt2+EvLGqV4w z<8A?S%o7C-{$O+bpH{IF!as~+pC62S2WdAR^^)oHh3y1EetfC}FxlJ7ramb7e~f&* zix_%*mKXzU5xu@Sj6zAmQitA4kG6LE4$4L6+zC26$z!m3mdhiJ8fDkGN}R}vvIxpR zuZDUb9&M*Qkit5|RdW@I8LW_&GcDC8^J7RSz2cDzUmfHvLiHb^rM>&l^Vv%(znC&; z!HU`2U)3^`t@1Vf=;SB-%_(1g3pBs)ji4sEwT#m-wk`HGZ{{7e`TmG43$ktFQ~`-c zAff`&{k*g0z>c70;0TE~fiWlJC)3x_$;eU#NLVIquI)W;b6uG8#Mk#y0R+B*rRUyL zf0!w3jZ0&vCG;dkrq(&)Zf4E+A&io=X5FJkedGJ8pH3H@D$ekdrchc@-5D>BZo=st-XXDY2qC}dkWT}s+YxtlR%;m1(m)5E-}oxcLoAU5(8 z#3yQd-wa~IWR=wKwR(W0RMEZ9_|~7c5g1r_Ow#u7z#8rQzRQAl3R_PW&)LT43W|Pi zGn*43gxAG)%{-duT?sE-aLW1aa2MEbdZ=t#I!%dd@B7$p8YoEHAF%p<{pMFSDU4tD zsq~feUg2g$an3VLjFlR#?`1Ca0U)YGa>tUP|G`IXO~)idNtBa(#;tu^ulKI&qoC8x zi(vBp1T1vvG+|5(pQ(P1L5|cq6(B37c#a;I%Z(!KQ+RJFkTgX(Q{kzzhCgJ<_rzw z`NTH|eQ-KC&1!wBKjy-UdY9fDLpNCIzmCXm$XDuYu^%0FWbGJOzR+(W^MFF{1(j`p!|w~Nwl%rufN zajQ*%=?h_{3Ad)Y!`zLY$+UeePOvJ)9E4cxofW<>{fkozZNp>h+AK9eDlASKEWeSI z6II+*;^AE5a)Wr+^I@sKob@2pR~MGPNjCZ{XS;LED;86&jkZT7&kuklux zt{Y|bBPyulqC6^PqkR>Rr%@?Rb)l-(ifTQv@m-oQeWR9Du(2Lv>=Jc(Fk6UoH##_Z z+PTgs*h5&U(TV`awnjaonj50!<-K!Jantvh|I_KfKDL5rDTrRvrU8>W7Uj8}s_ zj4O{!-vbl0Y(P)(@VUkYR0e}2iT~{c!1ojOQFWswv=Y@Wx+Ge>(6jU*QLqS+yI?7$ z;p`NK78j!k`LYkbDa7`8DwnExi%h|vn> zouh%$SoqUErsfdzOnMmAI{oy0KjL{{iKLqckA2LUJH$C6n@AIe&~*@&*VFiD!Y6&~ z%YzDVwe;X>&)p)@-7|dArghy`dH7A%hcm!gTy)i&es=H?x}F%JLg+~66VnI~u_J4h16Z$n)aF^^Sf*&tm^O=z zNsC${oG4~ShL@W!Kslsy?eq(|w76b-jy%MIyYQxr_HNeU=PqcFZ40$Gc=zu|1!nTY zw|VmU3hWurbU8V;h&HK&3bz$lu`{r)JzUFg{xOn9{|PYv*ldhu7iySTPF^c?(-JsB zyBWS6-I&*pS#au`7nvr&xN#g(QO6S>1oIK3bH5+0I4l~eIW}{D+kYyg?d}r^bP^c&QIO>*;>EZD^o?2 zVQd97H#G~-Ryl^|+|kd2!aM3Gq_IDaKXfNJswh8mkeaBdzZ5~;8HYOVCT z>6n`^s9nA)hc`Dkw=T(;(&91%y>D_MBS!A{(^Ewfc+_H#=neI9Ceg^7W<}X?l5O=l7OSZ9Y5W- zp1}_pFMTo9J(Z8 zehabaAicRq{QsdQy?K@WQ$1H2w{8q`89U5gcGz*CJeuun1bou)$?Fu5Y~i=@NrCIm z5keC&A|(Mh$@6avu|hO`de~XhuVFHl)%{6Px_>xGxh6D8eLneVfPuD1YKS#2a_{6z z<*%R8oujE{V(CdzI7K(^yyxP4NMCgL5CNtmpa--67klh}J38FQ z3qx4%3=m#Y?i0u8IfnqghErrW!ALjsLSC6!_U`Bk^# z+F)!DEws^aYFh|RcQf6hHGHa91_}M{a{(6>*PZSG{a70D^)E2yGwxA@MI+TR2fXCR z9o@;-_j>C-?JY;B(0CEalLnKEJMw`=JH>P9SD5XaDloutF)@^h$ zY6GESaJFmxsWL?yY`D0FjAJKb0&BNSn$TDzM=d5~?=Yak=tyN?TGlOs?!t02 zh6xEB7+u*5LQ!44wftd$awD#UVvRpH%K#yz41hRUt;%+W)4ahXRupwU>H}iyBb;&H?mwU2Ib=ECPT{S^kj% zGqrOMZFX*yGWzR5KXmw21PEUY!U+`h#%jrPY~|I6rcTfSFkGoK6Md~}{J6@pCr%zw zDyAhBF9qp7{=e<&S@+apqyUjQ+SOph3dcRb+&{+S7?FKSWe@qt@n(S1it>i(kQcS3POV+PErshjzoe_xVYz(E%^v4I5e z$}7<}ygN7{z0N?1+k%9`<+s*JW|X;q}N?D-=CzFks=&{&CG zq2`2O#=mVpyCr>Jzp8D0oy)0VMD${teIqp$7}+x!j=N46sj$5v@YxyIzIu}Ed^%=n zOz>G*Si2-W^92g*dh@Aw zTr0syU;Il`j9ZJv4k~qV8DyL*%c(`-nl6u>P9EnjrzeAr7Of^caJt@|W#G6@U>eH= z3jG%*k5u^&NSDw(aik$OMZJv+yx31`%u&vA;8?@6&n>v8!L3XBuoUpPkVM@hf` z8QlQ?$k-{nJ)y8g6y8nWQYf;3mvX3VBp9wn$rgBhh<*y8jvn*Xemz-oZk-h9>*!+vywy;HVgFMLgdz|ODCglXP(?6p_=V}z_%`s zQXhXWjnOXczkbW~)UmlPsqt4MuU_HV`9S!EmQ?n8t*^)BX~n{v*bcN#f64NVr#e8< zs_^gN_XD6cp!h=rsGH=u;XFAs%rc`W74ya=-}L1Q__x71XJqyqoiC&H*{-hk>sae1 zO=4bp1jTiI&qt*U-clZFaw5%w+$mjnwVOx_uP`9A>;uKe)1fT)!pW z$k|)J=h?I(87Kb8*OAIrqrKqIUf_m|2Vv{YoFRd)O@j|Ks1q&$2ww=bbAIqD7wZqG zyvzjS*RC6Bn%55n_e8cU`6EO**?sG?ji3IAe{K5G$#39B8$Vn(VXq{{`4=yOxh{p` zT&%P97ZBR-$W>_fdw0eR4R#e;Wo%&V*bzqL$=4Dpprp3k-?L&wue}F==Q}lzYoCzV zxO%Pl&C<`WZe}fvVxHG(&bb|uW2Npz)yfPIF-ctx*Xax<&d14L*JI0~LBL?($f>Bm zcBsGEvX0`uou7^|_AP&uuwYJ59*CI<>S$yvRfjI6HRrEC(d}@LnN! z`d?MW_cq=71?&9US#3POa#Q&Cf(k0jdm}umD(Oem%YTpbqE^Fh#r-KsRpKruIqK}7 zL5v_pV1G4}{x?Tp)7vxi(|wxLK`WT>o9UbDumG<>T-X_(7QaqfuMqlR&9mMMDl^!I0d$*F{%FHGhg?V}L+dYt>SHle0Pf))odxrGWh3uH)} z7;Bg|<3-};;li3yJ%Ag*;#=DzXAJiywJZ4OnbMyR5S!GVxKn1x{w_uOZpeNVB{yLgWJFG~w>*d&WqkAAtOoe;(*N zA7^{Hq-t*(K}ELAzv5B{qt+KF^H@JV=AK*rO2*f0nNS+kUr+6Yflc|B_2nOhMYa1z zGc&Jvou0=sqL7l!KMUo*M{-elTYk~Ef`M;~PCsmJi`^gY^C#rrENCpgKefC2OdJOK z-Of9=TQDKSSTFuV{FQ>X7%y8$UJ$kG`^q=e6+f;Kc>C6rt_yVBY49^IpD#H;_`4XJvOSPba5_L@&RUdQ`8y#J)iR4+Q*lXS+QqziS6e7jOi(OJ%>iDRE6L$gF0Js-Dgq z>6vs_pxyN8^1JJ-9`8B<5FEvc|u_cv}1A;+21sB56foo8Ykt5t3Hn&V|IGR~8N>iyOdv6c9Kx06Y^ntd->`fX-bs1G3 z#GW@_b0F&6O`8|?z?7FKT!aO~8KP6Sj5|~>fO%$>N)lK$>@{zK{mUHYGbaSnO>Oe* zU*YH$9j@vJs+xDq%%rg``3UjPs!LM(a|=hCCvCgt6K%@i zmW!6*uD0%PndF~93EER@dVv;;pKWh5rj0+m%gGD&A-BKwA?p(u+0=#PdA#kkX^|4i zLrk(jUQ*b$Ri=-*eA+PA*>AFeV=-;$yqCf1jK;7Br}G1-hiY;Cd(OJ)m#GR97M%Kt zCL4*b&%Zvq%C4R!5_>cn#UWmQf?egx@x4R>ylDwPB>lh~O7|SnJb%eS7T%G`B>x37 zz;N!rS54`D5R;e)x9N6v#@zi8uiX~@W8YygET)D>@0~*q9NN>e?f(S`4xrAP&w-IN z_0K<(ae!Cf2kiRbNA4JP%K<-Td&@R;GEF_pgLdR;@bRDD0g*K`rY_1G%mGneRWg2$(`9xX3>pEh%Gh$2Dba z7D1~}8=_Y|7+oa|6??)ojK=$^<=NWjiU$+UmOIIIGJ9X{*0cUmLUS*JBv#+; zyfpCUK4Q>8A(%JBgIrf$hV0@I2FNqO$yjVCi}dP5Bo9yKbfc2l-gGfZsuf zc;CJWfkUx?e?=?3ADwc4Xc6sP>~@ytb+L<4yV9VvL+2xawt)09?tN>2sgb`ULEg!m zQ_hur+HcmB;{>t-;eKs=V95?KtJ8RZ1?_M5Qx@ZHroFH50~l7F6G4q zKeO#`x!14&J1a9PW+C8oc&;{F|Ir*ZVicODWRbhqNx`&a30^KrzITKvo~^8-|D&>&RfLtrWe*k9F9SJw&q~7{+vEZFcye`PJ+sxSN8_g=64@JH_qSD$yO;wMF?!TO=RnU%$b7p7r^J`L zFXr}g7isDeT0sgYHLqkpba79`^4DMd&naF1+gg-&j7l^YZ`leKaqJGnu`3y}pxh}Q z0nvRX8XKEom%WV(U#L=}pqs;B-J#@*X$ zg`J*^XaN~t!%)K#&sUnlKr|4Au_})Zi_~^R!<5IFvJ?_S8D3HXoyx7yP_%jSx zQ1dt%c*B;sSuaoB?8PC$s_I1Dsqg+faii&i1xzg%=CCwl%V=F17Bf0FL9=8z5)SY;X7a zTQbs<0~UKEKsuLVOAmo(wW9Ai2XaA*ibSpv%dxp0>CUV=AX7!O*==lM!C zVtpLiODDM^J=J5qWtvs{vT!EgRZD7&f5kZ~Dlbs?8iKfX#s-jlEfGJjS&c*u4)61k zHhZ$EOTeN_Th^Sq=(X~`GnrSIt`N%}yd6}0ou##S-F>i940CtT*d)7@)a(SE8g?uS zoakKxcNKW5!HMH<)~*+i_3T%+cog%YRe$0HljgNr4i#mmXnrBQKX)z_DLm>n05@ss zR|Mfu>8v+#?CwaA zDrCOV^reXz;3Uvp$$L@wm-_&UlI8*MTdEE{odhjcV-$tTF8ZWUeVQWtcW ztl#@JrSHq(?}G*vtCaYc&WGgf^ySfw2)lvyu?x0A0s^^Ajq`^7{QJx%>j=L(mf8D* zgN=pi?O*!+zA0_W^Z~i@McacgtXo$WD9tfNwdk2IbAcFH1P zA>HexaUnK04Y*cOCWbEvQ9HXOYMI7j;2WR*XWFcmj?NV96kFG?u)Uv8>UY`Le+k3! zmcaTaTLCf2=?7MLV=s4BwQ%Zae*jI-Gl@rwq@%h@dvh4-O#kRLZ%7`rsFGOMLB$Yi zaf%=`mYFz((92rX@L3udj1MF%|DPAZm2ioOaFN<{_|e^ h|9>ySm9};ddW)+mp4cI{Q(vk3cT{fY-ZJt1e*mrPZ(0BV literal 54062 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 diff --git a/data-mapper/pom.xml b/data-mapper/pom.xml index 866f5b76e..76ba00f94 100644 --- a/data-mapper/pom.xml +++ b/data-mapper/pom.xml @@ -23,71 +23,61 @@ THE SOFTWARE. --> - - 4.0.0 - - com.iluwatar - java-design-patterns - 1.11.0-SNAPSHOT - - data-mapper + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.11.0-SNAPSHOT + + data-mapper + + + junit + junit + test + + + log4j + log4j + + - - - junit - junit - test - - - log4j - log4j - - + - + + + + src/main/resources + + + src/main/resources + + log4j.xml + + .. + + - - - - - src/main/resources - - - src/main/resources - - log4j.xml - - .. - - + - + + + org.apache.maven.plugins + maven-jar-plugin + 2.6 + + + log4j.xml + + + + true + + + + - - - org.apache.maven.plugins - maven-jar-plugin - 2.6 - - - log4j.xml - - - - true - - - - - - - + + diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/App.java b/data-mapper/src/main/java/com/iluwatar/datamapper/App.java index d23e0219d..5fcd0d9ea 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/App.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/App.java @@ -1,5 +1,5 @@ /** - * The MIT License Copyright (c) 2014 Ilkka Seppälä + * The MIT License Copyright (c) 2016 Amit Dixit * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and * associated documentation files (the "Software"), to deal in the Software without restriction, @@ -37,9 +37,6 @@ public final class App { private static Logger log = Logger.getLogger(App.class); - private static final String DB_TYPE_FIRST = "first"; - private static final String DB_TYPE_SECOND = "second"; - /** * Program entry point. * @@ -47,49 +44,21 @@ public final class App { */ public static void main(final String... args) { - if (log.isInfoEnabled() & args.length > 0) { - log.debug("App.main(), type: " + args[0]); - } - - StudentDataMapper mapper = null; - - /* Check the desired db type from runtime arguments */ - if (args.length == 0) { - - /* Create default data mapper for mysql */ - mapper = new StudentFirstDataMapper(); - - } else if (args.length > 0 && DB_TYPE_FIRST.equalsIgnoreCase(args[0])) { - - /* Create new data mapper for type 'first' */ - mapper = new StudentFirstDataMapper(); - - } else if (args.length > 0 && DB_TYPE_SECOND.equalsIgnoreCase(args[0])) { - - /* Create new data mapper for type 'second' */ - mapper = new StudentSecondDataMapper(); - } else { - - /* Don't couple any Data Mapper to java.sql.SQLException */ - throw new DataMapperException("Following data mapping type(" + args[0] + ") is not supported"); - } + /* Create new data mapper for type 'first' */ + final StudentDataMapper mapper = new StudentDataMapperImpl(); /* Create new student */ Student student = new Student(1, "Adam", 'A'); - /* Add student in respectibe db */ + /* Add student in respectibe store */ mapper.insert(student); - if (log.isDebugEnabled()) { - log.debug("App.main(), student : " + student + ", is inserted"); - } + log.debug("App.main(), student : " + student + ", is inserted"); /* Find this student */ final Optional studentToBeFound = mapper.find(student.getStudentId()); - if (log.isDebugEnabled()) { - log.debug("App.main(), student : " + studentToBeFound + ", is searched"); - } + log.debug("App.main(), student : " + studentToBeFound + ", is searched"); /* Update existing student object */ student = new Student(student.getStudentId(), "AdamUpdated", 'A'); @@ -97,15 +66,10 @@ public final class App { /* Update student in respectibe db */ mapper.update(student); - if (log.isDebugEnabled()) { - log.debug("App.main(), student : " + student + ", is updated"); - } + log.debug("App.main(), student : " + student + ", is updated"); + log.debug("App.main(), student : " + student + ", is going to be deleted"); /* Delete student in db */ - - if (log.isDebugEnabled()) { - log.debug("App.main(), student : " + student + ", is deleted"); - } mapper.delete(student); } diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/DataMapperException.java b/data-mapper/src/main/java/com/iluwatar/datamapper/DataMapperException.java index 7cc66d5af..24a7cf081 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/DataMapperException.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/DataMapperException.java @@ -19,6 +19,8 @@ package com.iluwatar.datamapper; /** + * Using Runtime Exception for avoiding dependancy on implementation exceptions. This helps in + * decoupling. * * @author amit.dixit * diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentFirstDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapperImpl.java similarity index 92% rename from data-mapper/src/main/java/com/iluwatar/datamapper/StudentFirstDataMapper.java rename to data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapperImpl.java index 97f6d395d..7ecd9e7f8 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentFirstDataMapper.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapperImpl.java @@ -22,7 +22,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; -public final class StudentFirstDataMapper implements StudentDataMapper { +public final class StudentDataMapperImpl implements StudentDataMapper { /* Note: Normally this would be in the form of an actual database */ private List students = new ArrayList<>(); @@ -59,7 +59,7 @@ public final class StudentFirstDataMapper implements StudentDataMapper { } else { - /* Throw user error */ + /* Throw user error after wrapping in a runtime exception */ throw new DataMapperException("Student [" + studentToBeUpdated.getName() + "] is not found"); } } @@ -75,7 +75,7 @@ public final class StudentFirstDataMapper implements StudentDataMapper { } else { - /* Throw user error */ + /* Throw user error after wrapping in a runtime exception */ throw new DataMapperException("Student already [" + studentToBeInserted.getName() + "] exists"); } } @@ -91,7 +91,7 @@ public final class StudentFirstDataMapper implements StudentDataMapper { } else { - /* Throw user error */ + /* Throw user error after wrapping in a runtime exception */ throw new DataMapperException("Student [" + studentToBeDeleted.getName() + "] is not found"); } } diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentSecondDataMapper.java b/data-mapper/src/main/java/com/iluwatar/datamapper/StudentSecondDataMapper.java deleted file mode 100644 index 7ad9788c0..000000000 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/StudentSecondDataMapper.java +++ /dev/null @@ -1,101 +0,0 @@ -/** - * The MIT License Copyright (c) 2016 Amit Dixit - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - * associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, - * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or - * substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT - * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -package com.iluwatar.datamapper; - -import java.util.Vector; -import java.util.List; -import java.util.Optional; - -public final class StudentSecondDataMapper implements StudentDataMapper { - - /* Note: Normally this would be in the form of an actual database */ - private List students = new Vector<>(); - - @Override - public Optional find(int studentId) { - - /* Compare with existing students */ - for (final Student student : this.getStudents()) { - - /* Check if student is found */ - if (student.getStudentId() == studentId) { - - return Optional.of(student); - } - } - - /* Return empty value */ - return Optional.empty(); - } - - @Override - public void update(Student studentToBeUpdated) throws DataMapperException { - - /* Check with existing students */ - if (this.getStudents().contains(studentToBeUpdated)) { - - /* Get the index of student in list */ - final int index = this.getStudents().indexOf(studentToBeUpdated); - - /* Update the student in list */ - this.getStudents().set(index, studentToBeUpdated); - - } else { - - /* Throw user error */ - throw new DataMapperException("Student [" + studentToBeUpdated.getName() + "] is not found"); - } - } - - @Override - public void insert(Student studentToBeInserted) throws DataMapperException { - - /* Check with existing students */ - if (!this.getStudents().contains(studentToBeInserted)) { - - /* Add student in list */ - this.getStudents().add(studentToBeInserted); - - } else { - - /* Throw user error */ - throw new DataMapperException("Student already [" + studentToBeInserted.getName() + "] exists"); - } - } - - @Override - public void delete(Student studentToBeDeleted) throws DataMapperException { - - /* Check with existing students */ - if (this.getStudents().contains(studentToBeDeleted)) { - - /* Delete the student from list */ - this.getStudents().remove(studentToBeDeleted); - - } else { - - /* Throw user error */ - throw new DataMapperException("Student [" + studentToBeDeleted.getName() + "] is not found"); - } - } - - public List getStudents() { - return this.students; - } -} diff --git a/data-mapper/src/test/java/com/iluwatar/datamapper/AppTest.java b/data-mapper/src/test/java/com/iluwatar/datamapper/AppTest.java index d3ad2dcb3..f2858100e 100644 --- a/data-mapper/src/test/java/com/iluwatar/datamapper/AppTest.java +++ b/data-mapper/src/test/java/com/iluwatar/datamapper/AppTest.java @@ -1,6 +1,5 @@ /** * The MIT License Copyright (c) 2016 Amit Dixit - * * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and * associated documentation files (the "Software"), to deal in the Software without restriction, diff --git a/data-mapper/src/test/java/com/iluwatar/datamapper/DataMapperTest.java b/data-mapper/src/test/java/com/iluwatar/datamapper/DataMapperTest.java index f77097df8..17f4d3922 100644 --- a/data-mapper/src/test/java/com/iluwatar/datamapper/DataMapperTest.java +++ b/data-mapper/src/test/java/com/iluwatar/datamapper/DataMapperTest.java @@ -24,8 +24,7 @@ import org.junit.Test; import com.iluwatar.datamapper.Student; import com.iluwatar.datamapper.StudentDataMapper; -import com.iluwatar.datamapper.StudentFirstDataMapper; -import com.iluwatar.datamapper.StudentSecondDataMapper; +import com.iluwatar.datamapper.StudentDataMapperImpl; /** * The Data Mapper (DM) is a layer of software that separates the in-memory objects from the @@ -45,41 +44,7 @@ public class DataMapperTest { public void testFirstDataMapper() { /* Create new data mapper of first type */ - final StudentDataMapper mapper = new StudentFirstDataMapper(); - - /* Create new student */ - Student student = new Student(1, "Adam", 'A'); - - /* Add student in respectibe db */ - mapper.insert(student); - - /* Check if student is added in db */ - assertEquals(student.getStudentId(), mapper.find(student.getStudentId()).get().getStudentId()); - - /* Update existing student object */ - student = new Student(student.getStudentId(), "AdamUpdated", 'A'); - - /* Update student in respectibe db */ - mapper.update(student); - - /* Check if student is updated in db */ - assertEquals(mapper.find(student.getStudentId()).get().getName(), "AdamUpdated"); - - /* Delete student in db */ - mapper.delete(student); - - /* Result should be false */ - assertEquals(false, mapper.find(student.getStudentId()).isPresent()); - } - - /** - * This test verify that second data mapper is able to perform all CRUD operations on Student - */ - @Test - public void testSecondDataMapper() { - - /* Create new data mapper of second type */ - final StudentDataMapper mapper = new StudentSecondDataMapper(); + final StudentDataMapper mapper = new StudentDataMapperImpl(); /* Create new student */ Student student = new Student(1, "Adam", 'A'); diff --git a/data-mapper/src/test/java/com/iluwatar/datamapper/StudentTest.java b/data-mapper/src/test/java/com/iluwatar/datamapper/StudentTest.java new file mode 100644 index 000000000..c441d6d6e --- /dev/null +++ b/data-mapper/src/test/java/com/iluwatar/datamapper/StudentTest.java @@ -0,0 +1,50 @@ +/** + * The MIT License Copyright (c) 2016 Amit Dixit + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.iluwatar.datamapper; + +import org.junit.Test; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; + +public final class StudentTest { + + @Test + /** + * This API tests the equality behaviour of Student object + * Object Equality should work as per logic defined in equals method + * @throws Exception + */ + public void testEquality() throws Exception { + + /* Create some students */ + final Student firstStudent = new Student(1, "Adam", 'A'); + final Student secondStudent = new Student(2, "Donald", 'B'); + final Student secondSameStudent = new Student(2, "Donald", 'B'); + final Student firstSameStudent = firstStudent; + + /* Check equals functionality: should return 'true' */ + assertTrue(firstStudent.equals(firstSameStudent)); + + /* Check equals functionality: should return 'false' */ + assertFalse(firstStudent.equals(secondStudent)); + + /* Check equals functionality: should return 'true' */ + assertTrue(secondStudent.equals(secondSameStudent)); + } +} From 32736fc90c48d0b1ea78841abf0f937eec444935 Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Mon, 18 Apr 2016 17:05:18 +0530 Subject: [PATCH 114/123] uml diagram++ --- data-mapper/etc/data-mapper.ucls | 76 ++++++++++++-------------------- 1 file changed, 27 insertions(+), 49 deletions(-) diff --git a/data-mapper/etc/data-mapper.ucls b/data-mapper/etc/data-mapper.ucls index ff10fc32f..2467983ce 100644 --- a/data-mapper/etc/data-mapper.ucls +++ b/data-mapper/etc/data-mapper.ucls @@ -3,8 +3,8 @@ associations="true" dependencies="false" nesting-relationships="true" router="FAN"> - - + @@ -13,78 +13,56 @@ - + - - + - - - - - - - - - + - - - - - - - - - - - - - - - - - - + + + + + + - + + + + + + + + + + + + + - - - - - - - - - - - - From 28c271486274c0e9aca866a90c28f630524c5d48 Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Tue, 19 Apr 2016 11:25:42 +0530 Subject: [PATCH 115/123] review comments++ review comments++ --- .../datamapper/DataMapperException.java | 39 ------------------- pom.xml | 1 + 2 files changed, 1 insertion(+), 39 deletions(-) diff --git a/data-mapper/src/main/java/com/iluwatar/datamapper/DataMapperException.java b/data-mapper/src/main/java/com/iluwatar/datamapper/DataMapperException.java index 24a7cf081..a6995b06d 100644 --- a/data-mapper/src/main/java/com/iluwatar/datamapper/DataMapperException.java +++ b/data-mapper/src/main/java/com/iluwatar/datamapper/DataMapperException.java @@ -29,15 +29,6 @@ public final class DataMapperException extends RuntimeException { private static final long serialVersionUID = 1L; - /** - * Constructs a new runtime exception with {@code null} as its detail message. The cause is not - * initialized, and may subsequently be initialized by a call to {@link #initCause}. - */ - public DataMapperException() { - super(); - } - - /** * Constructs a new runtime exception with the specified detail message. The cause is not * initialized, and may subsequently be initialized by a call to {@link #initCause}. @@ -48,34 +39,4 @@ public final class DataMapperException extends RuntimeException { public DataMapperException(final String message) { super(message); } - - /** - * Constructs a new runtime exception with the specified detail message and cause. - *

    - * Note that the detail message associated with {@code cause} is not automatically - * incorporated in this runtime exception's detail message. - * - * @param message the detail message (which is saved for later retrieval by the - * {@link #getMessage()} method). - * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method). - * (A null value is permitted, and indicates that the cause is nonexistent or - * unknown.) - */ - public DataMapperException(final String message, final Throwable cause) { - super(message, cause); - } - - /** - * Constructs a new runtime exception with the specified cause and a detail message of - * (cause==null ? null : cause.toString()) (which typically contains the class and detail - * message of cause). This constructor is useful for runtime exceptions that are little - * more than wrappers for other throwables. - * - * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method). - * (A null value is permitted, and indicates that the cause is nonexistent or - * unknown.) - */ - public DataMapperException(final Throwable cause) { - super(cause); - } } diff --git a/pom.xml b/pom.xml index 555844660..6e0b14170 100644 --- a/pom.xml +++ b/pom.xml @@ -61,6 +61,7 @@ bridge composite dao + data-mapper decorator facade flyweight From 8fa774d420c350a0466608731428ad86bfd0a36b Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Tue, 19 Apr 2016 11:35:13 +0530 Subject: [PATCH 116/123] mvn build file++ --- data-mapper/pom.xml | 128 ++++++++++++++++---------------------------- 1 file changed, 45 insertions(+), 83 deletions(-) diff --git a/data-mapper/pom.xml b/data-mapper/pom.xml index 76ba00f94..7474fe538 100644 --- a/data-mapper/pom.xml +++ b/data-mapper/pom.xml @@ -1,83 +1,45 @@ - - - - 4.0.0 - - com.iluwatar - java-design-patterns - 1.11.0-SNAPSHOT - - data-mapper - - - junit - junit - test - - - log4j - log4j - - - - - - - - - src/main/resources - - - src/main/resources - - log4j.xml - - .. - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.6 - - - log4j.xml - - - - true - - - - - - - - + + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.11.0-SNAPSHOT + + data-mapper + + + junit + junit + test + + + log4j + log4j + + + From d5f7cb4e2c783a809a3e4bc1e24ec4785ee31372 Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Tue, 19 Apr 2016 11:49:35 +0530 Subject: [PATCH 117/123] build check style error-- --- .gitignore | 7 ++++++- .../src/test/java/com/iluwatar/datamapper/StudentTest.java | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 5d2cd77e1..589d3fb13 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,9 @@ target .idea *.iml *.swp -datanucleus.log \ No newline at end of file +datanucleus.log +/bin/ +/bin/ +/bin/ + +data-mapper/src/main/resources/log4j.xml \ No newline at end of file diff --git a/data-mapper/src/test/java/com/iluwatar/datamapper/StudentTest.java b/data-mapper/src/test/java/com/iluwatar/datamapper/StudentTest.java index c441d6d6e..a3c0e46c1 100644 --- a/data-mapper/src/test/java/com/iluwatar/datamapper/StudentTest.java +++ b/data-mapper/src/test/java/com/iluwatar/datamapper/StudentTest.java @@ -28,7 +28,8 @@ public final class StudentTest { /** * This API tests the equality behaviour of Student object * Object Equality should work as per logic defined in equals method - * @throws Exception + * + * @throws Exception if any execution error during test */ public void testEquality() throws Exception { From 93b0b3730e57fbd29efea3c8fd2aeff6220790be Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Tue, 19 Apr 2016 11:59:27 +0530 Subject: [PATCH 118/123] build error fix++ --- data-mapper/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/data-mapper/pom.xml b/data-mapper/pom.xml index 7474fe538..82e5f531d 100644 --- a/data-mapper/pom.xml +++ b/data-mapper/pom.xml @@ -29,6 +29,7 @@ com.iluwatar java-design-patterns 1.11.0-SNAPSHOT + data-mapper From 018a4e52a2fdbd0274d74f84b5141228ba439efb Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Tue, 19 Apr 2016 12:23:52 +0530 Subject: [PATCH 119/123] build error fix++ --- data-mapper/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data-mapper/pom.xml b/data-mapper/pom.xml index 82e5f531d..0ec95d468 100644 --- a/data-mapper/pom.xml +++ b/data-mapper/pom.xml @@ -29,7 +29,7 @@ com.iluwatar java-design-patterns 1.11.0-SNAPSHOT - + ../pom.xml data-mapper From 59e9d027d42ee9742566ac8cbd4e8922c418986f Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Tue, 19 Apr 2016 12:45:12 +0530 Subject: [PATCH 120/123] version++ --- data-mapper/pom.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/data-mapper/pom.xml b/data-mapper/pom.xml index 0ec95d468..da646f3c1 100644 --- a/data-mapper/pom.xml +++ b/data-mapper/pom.xml @@ -28,8 +28,7 @@ com.iluwatar java-design-patterns - 1.11.0-SNAPSHOT - ../pom.xml + 1.7.0 data-mapper From af1db79aa7e06ba8479eac8d2a30e97149755b4a Mon Sep 17 00:00:00 2001 From: Amit Dixit Date: Wed, 20 Apr 2016 07:23:12 +0530 Subject: [PATCH 121/123] version++ --- data-mapper/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data-mapper/pom.xml b/data-mapper/pom.xml index da646f3c1..f65b647fa 100644 --- a/data-mapper/pom.xml +++ b/data-mapper/pom.xml @@ -28,7 +28,7 @@ com.iluwatar java-design-patterns - 1.7.0 + 1.12.0-SNAPSHOT data-mapper From bf7b6825496d71ca69d3f26854f968392d1ad005 Mon Sep 17 00:00:00 2001 From: Markus Moser Date: Sun, 24 Apr 2016 12:25:05 +0200 Subject: [PATCH 122/123] Add License Shield --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8db718edb..811d6a17a 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ [![Build status](https://travis-ci.org/iluwatar/java-design-patterns.svg?branch=master)](https://travis-ci.org/iluwatar/java-design-patterns) [![Coverage Status](https://coveralls.io/repos/iluwatar/java-design-patterns/badge.svg?branch=master)](https://coveralls.io/r/iluwatar/java-design-patterns?branch=master) +[![License MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/iluwatar/java-design-patterns/master/LICENSE.md) [![Join the chat at https://gitter.im/iluwatar/java-design-patterns](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/iluwatar/java-design-patterns?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) # Introduction From 71e3443e0ea28a6c8e2b94c2e4cc6c0bf24dc7a2 Mon Sep 17 00:00:00 2001 From: Markus Moser Date: Sun, 24 Apr 2016 12:58:38 +0200 Subject: [PATCH 123/123] Fix permalink to represent its current dir Otherwise the picture cant be found, as the jekyll build process will put this file in a 'dm' directory and the other stuff like resources in a 'data-mapper' directory (because resources dont have permalink specified they are served static) --- data-mapper/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data-mapper/index.md b/data-mapper/index.md index 28b3939ee..075e8eece 100644 --- a/data-mapper/index.md +++ b/data-mapper/index.md @@ -2,7 +2,7 @@ layout: pattern title: Data Mapper folder: data-mapper -permalink: /patterns/dm/ +permalink: /patterns/data-mapper/ categories: Persistence Tier tags: - Java