From 96fe8a4c48a6ad35a664721eb315ce334c2b0c61 Mon Sep 17 00:00:00 2001 From: duanmh Date: Mon, 14 Mar 2016 10:10:26 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 21 +- abstract-factory/.euml2 | 7 + abstract-factory/.gitignore | 1 + abstract-factory/.umlproject | 7 + abstract-factory/build/log/testResult.log | 0 abstract-factory/build/log/uatError.log | 56 ++++ abstract-factory/build/log/uatLog.log | 98 ++++++ abstract-factory/out/.gitignore | 1 + .../src/main/java/com/iluwatar/Army.java | 5 - .../src/main/java/com/iluwatar/Castle.java | 5 - .../src/main/java/com/iluwatar/King.java | 5 - .../com/iluwatar/{ => absfactory}/App.java | 58 ++-- .../java/com/iluwatar/absfactory/Army.java | 5 + .../java/com/iluwatar/absfactory/Castle.java | 5 + .../iluwatar/{ => absfactory}/ElfArmy.java | 20 +- .../iluwatar/{ => absfactory}/ElfCastle.java | 20 +- .../iluwatar/{ => absfactory}/ElfKing.java | 20 +- .../{ => absfactory}/ElfKingdomFactory.java | 44 +-- .../java/com/iluwatar/absfactory/King.java | 5 + .../{ => absfactory}/KingdomFactory.java | 28 +- .../iluwatar/{ => absfactory}/OrcArmy.java | 20 +- .../iluwatar/{ => absfactory}/OrcCastle.java | 20 +- .../iluwatar/{ => absfactory}/OrcKing.java | 20 +- .../{ => absfactory}/OrcKingdomFactory.java | 48 +-- .../src/test/com/iluwatar/AppTest.java | 26 ++ abstract-factory/src/test/log/testResult.log | 0 abstract-factory/src/test/log/uatError.log | 56 ++++ abstract-factory/src/test/log/uatLog.log | 98 ++++++ abstract-factory/src/test/log4j.xml | 81 +++++ .../src/test/nc/tc/com/iluwatar/AppTest.java | 77 +++++ .../src/test/nc/tc/com/iluwatar/ArmyTest.java | 45 +++ .../test/nc/tc/com/iluwatar/CastleTest.java | 45 +++ .../test/nc/tc/com/iluwatar/ElfArmyTest.java | 67 ++++ .../nc/tc/com/iluwatar/ElfCastleTest.java | 67 ++++ .../test/nc/tc/com/iluwatar/ElfKingTest.java | 67 ++++ .../com/iluwatar/ElfKingdomFactoryTest.java | 99 ++++++ .../src/test/nc/tc/com/iluwatar/KingTest.java | 45 +++ .../tc/com/iluwatar/KingdomFactoryTest.java | 45 +++ .../test/nc/tc/com/iluwatar/OrcArmyTest.java | 67 ++++ .../nc/tc/com/iluwatar/OrcCastleTest.java | 67 ++++ .../test/nc/tc/com/iluwatar/OrcKingTest.java | 67 ++++ .../com/iluwatar/OrcKingdomFactoryTest.java | 99 ++++++ .../configure/UATApplicationContext.xml | 6 + .../src/test/resources/configure/prop.xml | 133 ++++++++ .../resources/configure/test_data_source.xml | 19 ++ .../test/resources/configure/uat.properties | 33 ++ .../resources/configure/uat_spring_conf.xml | 35 ++ .../src/test/resources/data/backup/README | 1 + .../src/test/resources/data/config/README | 1 + .../src/test/resources/data/excel/AppTest.xls | Bin 0 -> 4608 bytes .../data/excel/AppTest.xls_2014_09_30_141708 | Bin 0 -> 4608 bytes .../test/resources/data/excel/ArmyTest.xls | Bin 0 -> 3584 bytes .../data/excel/ArmyTest.xls_2014_09_30_141708 | Bin 0 -> 3584 bytes .../test/resources/data/excel/CastleTest.xls | Bin 0 -> 3584 bytes .../excel/CastleTest.xls_2014_09_30_141708 | Bin 0 -> 3584 bytes .../test/resources/data/excel/ElfArmyTest.xls | Bin 0 -> 4096 bytes .../excel/ElfArmyTest.xls_2014_09_30_141708 | Bin 0 -> 4096 bytes .../resources/data/excel/ElfCastleTest.xls | Bin 0 -> 4096 bytes .../excel/ElfCastleTest.xls_2014_09_30_141708 | Bin 0 -> 4096 bytes .../test/resources/data/excel/ElfKingTest.xls | Bin 0 -> 4096 bytes .../excel/ElfKingTest.xls_2014_09_30_141708 | Bin 0 -> 4096 bytes .../data/excel/ElfKingdomFactoryTest.xls | Bin 0 -> 5120 bytes ...lfKingdomFactoryTest.xls_2014_09_30_141708 | Bin 0 -> 5120 bytes .../test/resources/data/excel/KingTest.xls | Bin 0 -> 3584 bytes .../data/excel/KingTest.xls_2014_09_30_141708 | Bin 0 -> 3584 bytes .../data/excel/KingdomFactoryTest.xls | Bin 0 -> 3584 bytes .../KingdomFactoryTest.xls_2014_09_30_141708 | Bin 0 -> 3584 bytes .../test/resources/data/excel/OrcArmyTest.xls | Bin 0 -> 4096 bytes .../excel/OrcArmyTest.xls_2014_09_30_141708 | Bin 0 -> 4096 bytes .../resources/data/excel/OrcCastleTest.xls | Bin 0 -> 4096 bytes .../excel/OrcCastleTest.xls_2014_09_30_141708 | Bin 0 -> 4096 bytes .../test/resources/data/excel/OrcKingTest.xls | Bin 0 -> 4096 bytes .../excel/OrcKingTest.xls_2014_09_30_141708 | Bin 0 -> 4096 bytes .../data/excel/OrcKingdomFactoryTest.xls | Bin 0 -> 5120 bytes ...rcKingdomFactoryTest.xls_2014_09_30_141708 | Bin 0 -> 5120 bytes .../src/test/resources/data/excel/README | 1 + .../src/test/resources/data/object/README | 1 + .../src/test/resources/data/spring/README | 1 + .../src/test/resources/temp/README | 1 + abstract-factory/src/test/testng.xml | 10 + .../Default suite/Default test.html | 89 +++++ .../Default suite/Default test.xml | 6 + .../Default suite/testng-failed.xml | 13 + abstract-factory/test-output/bullet_point.png | Bin 0 -> 356 bytes abstract-factory/test-output/collapseall.gif | Bin 0 -> 157 bytes .../test-output/emailable-report.html | 46 +++ abstract-factory/test-output/failed.png | Bin 0 -> 977 bytes abstract-factory/test-output/index.html | 251 +++++++++++++++ .../test-output/jquery-1.7.1.min.js | 4 + .../TEST-com.iluwatar.AppTest.xml | 6 + .../TEST-nc.tc.com.iluwatar.AppTest.xml | 46 +++ .../test-output/navigator-bullet.png | Bin 0 -> 352 bytes .../old/Default suite/Default test.properties | 1 + .../old/Default suite/classes.html | 32 ++ .../test-output/old/Default suite/groups.html | 1 + .../test-output/old/Default suite/index.html | 6 + .../test-output/old/Default suite/main.html | 2 + .../Default suite/methods-alphabetical.html | 8 + .../old/Default suite/methods-not-run.html | 2 + .../old/Default suite/methods.html | 8 + .../old/Default suite/reporter-output.html | 1 + .../old/Default suite/testng.xml.html | 1 + .../test-output/old/Default suite/toc.html | 30 ++ abstract-factory/test-output/old/index.html | 9 + abstract-factory/test-output/passed.png | Bin 0 -> 1019 bytes abstract-factory/test-output/skipped.png | Bin 0 -> 967 bytes .../test-output/testng-failed.xml | 13 + .../test-output/testng-reports.css | 304 ++++++++++++++++++ .../test-output/testng-reports.js | 130 ++++++++ .../test-output/testng-results.xml | 21 ++ abstract-factory/test-output/testng.css | 9 + adapter/(default package).ucd | 9 + adapter/.euml2 | 7 + adapter/.gitignore | 1 + adapter/.umlproject | 7 + adapter/adapter.usd | 9 + adapter/out/.gitignore | 1 + adapter/src/java.usd | 9 + .../java/com/iluwatar/{ => adapter}/App.java | 46 +-- .../com/iluwatar/{ => adapter}/Engineer.java | 24 +- .../iluwatar/{ => adapter}/GnomeEngineer.java | 54 ++-- .../GnomeEngineeringManager.java | 46 +-- .../iluwatar/{ => adapter}/GoblinGlider.java | 42 +-- adapter/src/test/log4j.xml | 81 +++++ .../configure/UATApplicationContext.xml | 6 + adapter/src/test/resources/configure/prop.xml | 133 ++++++++ .../resources/configure/test_data_source.xml | 19 ++ .../test/resources/configure/uat.properties | 33 ++ .../resources/configure/uat_spring_conf.xml | 35 ++ adapter/src/test/resources/data/backup/README | 1 + adapter/src/test/resources/data/config/README | 1 + adapter/src/test/resources/data/excel/README | 1 + adapter/src/test/resources/data/object/README | 1 + adapter/src/test/resources/data/spring/README | 1 + adapter/src/test/resources/temp/README | 1 + adapter/src/test/testng.xml | 10 + .../java/com/iluwatar/{ => bridge}/App.java | 70 ++-- .../{ => bridge}/BlindingMagicWeapon.java | 66 ++-- .../{ => bridge}/BlindingMagicWeaponImp.java | 14 +- .../com/iluwatar/{ => bridge}/Excalibur.java | 50 +-- .../{ => bridge}/FlyingMagicWeapon.java | 64 ++-- .../{ => bridge}/FlyingMagicWeaponImp.java | 14 +- .../iluwatar/{ => bridge}/MagicWeapon.java | 52 +-- .../iluwatar/{ => bridge}/MagicWeaponImp.java | 32 +- .../com/iluwatar/{ => bridge}/Mjollnir.java | 50 +-- .../{ => bridge}/SoulEatingMagicWeapon.java | 66 ++-- .../SoulEatingMagicWeaponImp.java | 14 +- .../iluwatar/{ => bridge}/Stormbringer.java | 50 +-- builder/.gitignore | 1 + .../java/com/iluwatar/{ => builder}/App.java | 96 +++--- .../com/iluwatar/{ => builder}/Armor.java | 38 +-- .../com/iluwatar/{ => builder}/HairColor.java | 40 +-- .../com/iluwatar/{ => builder}/HairType.java | 40 +-- .../java/com/iluwatar/{ => builder}/Hero.java | 255 +++++++-------- .../iluwatar/{ => builder}/Profession.java | 38 +-- .../com/iluwatar/{ => builder}/Weapon.java | 40 +-- chain/src/main/java/com/iluwatar/App.java | 22 -- .../src/main/java/com/iluwatar/chain/App.java | 23 ++ .../iluwatar/{ => chain}/OrcCommander.java | 44 +-- .../com/iluwatar/{ => chain}/OrcKing.java | 48 +-- .../com/iluwatar/{ => chain}/OrcOfficer.java | 46 +-- .../com/iluwatar/{ => chain}/OrcSoldier.java | 44 +-- .../com/iluwatar/{ => chain}/Request.java | 66 ++-- .../iluwatar/{ => chain}/RequestHandler.java | 46 +-- .../com/iluwatar/{ => chain}/RequestType.java | 18 +- command/.gitignore | 1 + command/out/.gitignore | 1 + command/src/main/java/com/iluwatar/App.java | 56 ++-- command/src/test/log4j.xml | 81 +++++ .../configure/UATApplicationContext.xml | 6 + command/src/test/resources/configure/prop.xml | 133 ++++++++ .../resources/configure/test_data_source.xml | 19 ++ .../test/resources/configure/uat.properties | 33 ++ .../resources/configure/uat_spring_conf.xml | 35 ++ command/src/test/resources/data/backup/README | 1 + command/src/test/resources/data/config/README | 1 + command/src/test/resources/data/excel/README | 1 + command/src/test/resources/data/object/README | 1 + command/src/test/resources/data/spring/README | 1 + command/src/test/resources/temp/README | 1 + command/src/test/testng.xml | 10 + composite/.gitignore | 1 + composite/out/.gitignore | 1 + .../com/iluwatar/{ => composite}/App.java | 52 +-- .../com/iluwatar/{ => composite}/Letter.java | 42 +-- .../{ => composite}/LetterComposite.java | 68 ++-- .../iluwatar/{ => composite}/Messenger.java | 84 ++--- .../iluwatar/{ => composite}/Sentence.java | 48 +-- .../com/iluwatar/{ => composite}/Word.java | 46 +-- composite/src/test/log4j.xml | 81 +++++ .../configure/UATApplicationContext.xml | 6 + .../src/test/resources/configure/prop.xml | 133 ++++++++ .../resources/configure/test_data_source.xml | 19 ++ .../test/resources/configure/uat.properties | 33 ++ .../resources/configure/uat_spring_conf.xml | 35 ++ .../src/test/resources/data/backup/README | 1 + .../src/test/resources/data/config/README | 1 + .../src/test/resources/data/excel/README | 1 + .../src/test/resources/data/object/README | 1 + .../src/test/resources/data/spring/README | 1 + composite/src/test/resources/temp/README | 1 + composite/src/test/testng.xml | 10 + .../com/iluwatar/{ => decorator}/App.java | 52 +-- .../com/iluwatar/{ => decorator}/Hostile.java | 16 +- .../iluwatar/{ => decorator}/SmartTroll.java | 46 +-- .../com/iluwatar/{ => decorator}/Troll.java | 26 +- .../{iluwatar => iluwatardbcheck}/App.java | 6 +- .../Inventory.java | 4 +- .../{iluwatar => iluwatardbcheck}/Item.java | 2 +- .../java/com/iluwatar/{ => facade}/App.java | 36 +-- .../{ => facade}/DwarvenCartOperator.java | 30 +- .../{ => facade}/DwarvenGoldDigger.java | 30 +- .../{ => facade}/DwarvenGoldmineFacade.java | 74 ++--- .../{ => facade}/DwarvenMineWorker.java | 50 +-- .../{ => facade}/DwarvenTunnelDigger.java | 30 +- factory-method/.gitignore | 1 + factory-method/out/.gitignore | 1 + .../src/main/java/com/iluwatar/App.java | 30 -- .../src/main/java/com/iluwatar/Weapon.java | 5 - .../java/com/iluwatar/factory/method/App.java | 35 ++ .../{ => factory/method}/Blacksmith.java | 26 +- .../{ => factory/method}/ElfBlacksmith.java | 31 +- .../{ => factory/method}/ElfWeapon.java | 33 +- .../{ => factory/method}/OrcBlacksmith.java | 30 +- .../{ => factory/method}/OrcWeapon.java | 34 +- .../iluwatar/factory/method/Testsmith.java | 16 + .../com/iluwatar/factory/method/Weapon.java | 5 + .../{ => factory/method}/WeaponType.java | 39 +-- factory-method/src/test/log4j.xml | 81 +++++ .../configure/UATApplicationContext.xml | 6 + .../src/test/resources/configure/prop.xml | 133 ++++++++ .../resources/configure/test_data_source.xml | 19 ++ .../test/resources/configure/uat.properties | 33 ++ .../resources/configure/uat_spring_conf.xml | 35 ++ .../src/test/resources/data/backup/README | 1 + .../src/test/resources/data/config/README | 1 + .../src/test/resources/data/excel/README | 1 + .../src/test/resources/data/object/README | 1 + .../src/test/resources/data/spring/README | 1 + factory-method/src/test/resources/temp/README | 1 + factory-method/src/test/testng.xml | 10 + .../{ => flyweight}/AlchemistShop.java | 114 +++---- .../com/iluwatar/{ => flyweight}/App.java | 34 +- .../{ => flyweight}/HealingPotion.java | 20 +- .../{ => flyweight}/HolyWaterPotion.java | 20 +- .../{ => flyweight}/InvisibilityPotion.java | 20 +- .../{ => flyweight}/PoisonPotion.java | 20 +- .../com/iluwatar/{ => flyweight}/Potion.java | 24 +- .../{ => flyweight}/PotionFactory.java | 98 +++--- .../iluwatar/{ => flyweight}/PotionType.java | 22 +- .../{ => flyweight}/StrengthPotion.java | 20 +- .../com/iluwatar/{ => interpreter}/App.java | 135 ++++---- .../{ => interpreter}/Expression.java | 18 +- .../{ => interpreter}/MinusExpression.java | 46 +-- .../{ => interpreter}/MultiplyExpression.java | 46 +-- .../{ => interpreter}/NumberExpression.java | 50 +-- .../{ => interpreter}/PlusExpression.java | 46 +-- .../java/com/iluwatar/{ => iterator}/App.java | 84 ++--- .../com/iluwatar/{ => iterator}/Item.java | 50 +-- .../iluwatar/{ => iterator}/ItemIterator.java | 28 +- .../com/iluwatar/{ => iterator}/ItemType.java | 20 +- .../{ => iterator}/TreasureChest.java | 80 ++--- .../TreasureChestItemIterator.java | 98 +++--- mediator/src/main/java/com/iluwatar/App.java | 30 -- .../com/iluwatar/{ => mediator}/Action.java | 56 ++-- .../main/java/com/iluwatar/mediator/App.java | 32 ++ .../com/iluwatar/{ => mediator}/Hobbit.java | 20 +- .../com/iluwatar/{ => mediator}/Hunter.java | 20 +- .../com/iluwatar/{ => mediator}/Party.java | 28 +- .../iluwatar/{ => mediator}/PartyImpl.java | 74 ++--- .../iluwatar/{ => mediator}/PartyMember.java | 30 +- .../{ => mediator}/PartyMemberBase.java | 92 +++--- .../com/iluwatar/{ => mediator}/Rogue.java | 20 +- .../com/iluwatar/{ => mediator}/Wizard.java | 20 +- memento/src/main/java/com/iluwatar/App.java | 39 --- .../main/java/com/iluwatar/memento/App.java | 39 +++ .../java/com/iluwatar/{ => memento}/Star.java | 136 ++++---- .../iluwatar/{ => memento}/StarMemento.java | 20 +- .../{ => memento}/StarMementoInternal.java | 64 ++-- .../com/iluwatar/{ => memento}/StarType.java | 72 ++--- observer/.gitignore | 1 + observer/com/iluwatar/App.main.pdf | Bin 0 -> 478950 bytes observer/com/iluwatar/App.main.sdx | 43 +++ observer/out/.gitignore | 1 + observer/src/dsd.java | 0 observer/src/main/java/RER.java | 0 observer/src/main/java/RWW.java | 0 .../java/com/iluwatar/{ => observer}/App.java | 55 ++-- .../com/iluwatar/{ => observer}/Hobbits.java | 52 +-- .../com/iluwatar/{ => observer}/Orcs.java | 50 +-- .../main/java/com/iluwatar/observer/Test.java | 1 + .../main/java/com/iluwatar/observer/WEE.java | 1 + .../com/iluwatar/{ => observer}/Weather.java | 112 +++---- .../{ => observer}/WeatherObserver.java | 24 +- .../iluwatar/{ => observer}/WeatherType.java | 28 +- .../java/com/iluwatar/observer/dsfaa.java | 1 + observer/src/test/log4j.xml | 81 +++++ .../configure/UATApplicationContext.xml | 6 + .../src/test/resources/configure/prop.xml | 133 ++++++++ .../resources/configure/test_data_source.xml | 19 ++ .../test/resources/configure/uat.properties | 33 ++ .../resources/configure/uat_spring_conf.xml | 35 ++ .../src/test/resources/data/backup/README | 1 + .../src/test/resources/data/config/README | 1 + observer/src/test/resources/data/excel/README | 1 + .../src/test/resources/data/object/README | 1 + .../src/test/resources/data/spring/README | 1 + observer/src/test/resources/temp/README | 1 + observer/src/test/testng.xml | 10 + .../com/iluwatar/{ => prototype}/App.java | 70 ++-- .../com/iluwatar/{ => prototype}/Beast.java | 16 +- .../iluwatar/{ => prototype}/ElfBeast.java | 42 +-- .../com/iluwatar/{ => prototype}/ElfMage.java | 42 +-- .../iluwatar/{ => prototype}/ElfWarlord.java | 42 +-- .../iluwatar/{ => prototype}/HeroFactory.java | 32 +- .../{ => prototype}/HeroFactoryImpl.java | 88 ++--- .../com/iluwatar/{ => prototype}/Mage.java | 16 +- .../iluwatar/{ => prototype}/OrcBeast.java | 42 +-- .../com/iluwatar/{ => prototype}/OrcMage.java | 42 +-- .../iluwatar/{ => prototype}/OrcWarlord.java | 42 +-- .../iluwatar/{ => prototype}/Prototype.java | 16 +- .../com/iluwatar/{ => prototype}/Warlord.java | 16 +- proxy/src/main/java/com/iluwatar/App.java | 22 -- .../src/main/java/com/iluwatar/proxy/App.java | 24 ++ .../java/com/iluwatar/{ => proxy}/Wizard.java | 32 +- .../com/iluwatar/{ => proxy}/WizardTower.java | 30 +- .../{ => proxy}/WizardTowerProxy.java | 48 +-- singleton/.gitignore | 1 + singleton/out/.gitignore | 1 + .../com/iluwatar/{ => singleton}/App.java | 40 +-- .../iluwatar/{ => singleton}/IvoryTower.java | 37 ++- singleton/src/test/log4j.xml | 81 +++++ .../configure/UATApplicationContext.xml | 6 + .../src/test/resources/configure/prop.xml | 133 ++++++++ .../resources/configure/test_data_source.xml | 19 ++ .../test/resources/configure/uat.properties | 33 ++ .../resources/configure/uat_spring_conf.xml | 35 ++ .../src/test/resources/data/backup/README | 1 + .../src/test/resources/data/config/README | 1 + .../src/test/resources/data/excel/README | 1 + .../src/test/resources/data/object/README | 1 + .../src/test/resources/data/spring/README | 1 + singleton/src/test/resources/temp/README | 1 + singleton/src/test/testng.xml | 10 + .../com/iluwatar/{ => state}/AngryState.java | 42 +-- .../java/com/iluwatar/{ => state}/App.java | 48 +-- .../com/iluwatar/{ => state}/Mammoth.java | 74 ++--- .../iluwatar/{ => state}/PeacefulState.java | 42 +-- .../java/com/iluwatar/{ => state}/State.java | 28 +- .../java/com/iluwatar/{ => strategy}/App.java | 46 +-- .../iluwatar/{ => strategy}/DragonSlayer.java | 46 +-- .../{ => strategy}/DragonSlayingStrategy.java | 24 +- .../{ => strategy}/MeleeStrategy.java | 20 +- .../{ => strategy}/ProjectileStrategy.java | 20 +- .../{ => strategy}/SpellStrategy.java | 20 +- .../iluwatar/{ => template/method}/App.java | 38 +-- .../{ => template/method}/HalflingThief.java | 46 +-- .../method}/HitAndRunMethod.java | 40 +-- .../{ => template/method}/StealingMethod.java | 44 +-- .../{ => template/method}/SubtleMethod.java | 40 +-- .../java/com/iluwatar/{ => visitor}/App.java | 46 +-- .../com/iluwatar/{ => visitor}/Commander.java | 38 +-- .../{ => visitor}/CommanderVisitor.java | 44 +-- .../com/iluwatar/{ => visitor}/Sergeant.java | 38 +-- .../{ => visitor}/SergeantVisitor.java | 44 +-- .../com/iluwatar/{ => visitor}/Soldier.java | 38 +-- .../{ => visitor}/SoldierVisitor.java | 44 +-- .../java/com/iluwatar/{ => visitor}/Unit.java | 42 +-- .../iluwatar/{ => visitor}/UnitVisitor.java | 28 +- 369 files changed, 8153 insertions(+), 3468 deletions(-) create mode 100644 abstract-factory/.euml2 create mode 100644 abstract-factory/.umlproject create mode 100644 abstract-factory/build/log/testResult.log create mode 100644 abstract-factory/build/log/uatError.log create mode 100644 abstract-factory/build/log/uatLog.log create mode 100644 abstract-factory/out/.gitignore delete mode 100644 abstract-factory/src/main/java/com/iluwatar/Army.java delete mode 100644 abstract-factory/src/main/java/com/iluwatar/Castle.java delete mode 100644 abstract-factory/src/main/java/com/iluwatar/King.java rename abstract-factory/src/main/java/com/iluwatar/{ => absfactory}/App.java (93%) create mode 100644 abstract-factory/src/main/java/com/iluwatar/absfactory/Army.java create mode 100644 abstract-factory/src/main/java/com/iluwatar/absfactory/Castle.java rename abstract-factory/src/main/java/com/iluwatar/{ => absfactory}/ElfArmy.java (78%) rename abstract-factory/src/main/java/com/iluwatar/{ => absfactory}/ElfCastle.java (79%) rename abstract-factory/src/main/java/com/iluwatar/{ => absfactory}/ElfKing.java (78%) rename abstract-factory/src/main/java/com/iluwatar/{ => absfactory}/ElfKingdomFactory.java (86%) create mode 100644 abstract-factory/src/main/java/com/iluwatar/absfactory/King.java rename abstract-factory/src/main/java/com/iluwatar/{ => absfactory}/KingdomFactory.java (80%) rename abstract-factory/src/main/java/com/iluwatar/{ => absfactory}/OrcArmy.java (78%) rename abstract-factory/src/main/java/com/iluwatar/{ => absfactory}/OrcCastle.java (79%) rename abstract-factory/src/main/java/com/iluwatar/{ => absfactory}/OrcKing.java (78%) rename abstract-factory/src/main/java/com/iluwatar/{ => absfactory}/OrcKingdomFactory.java (79%) create mode 100644 abstract-factory/src/test/com/iluwatar/AppTest.java create mode 100644 abstract-factory/src/test/log/testResult.log create mode 100644 abstract-factory/src/test/log/uatError.log create mode 100644 abstract-factory/src/test/log/uatLog.log create mode 100644 abstract-factory/src/test/log4j.xml create mode 100644 abstract-factory/src/test/nc/tc/com/iluwatar/AppTest.java create mode 100644 abstract-factory/src/test/nc/tc/com/iluwatar/ArmyTest.java create mode 100644 abstract-factory/src/test/nc/tc/com/iluwatar/CastleTest.java create mode 100644 abstract-factory/src/test/nc/tc/com/iluwatar/ElfArmyTest.java create mode 100644 abstract-factory/src/test/nc/tc/com/iluwatar/ElfCastleTest.java create mode 100644 abstract-factory/src/test/nc/tc/com/iluwatar/ElfKingTest.java create mode 100644 abstract-factory/src/test/nc/tc/com/iluwatar/ElfKingdomFactoryTest.java create mode 100644 abstract-factory/src/test/nc/tc/com/iluwatar/KingTest.java create mode 100644 abstract-factory/src/test/nc/tc/com/iluwatar/KingdomFactoryTest.java create mode 100644 abstract-factory/src/test/nc/tc/com/iluwatar/OrcArmyTest.java create mode 100644 abstract-factory/src/test/nc/tc/com/iluwatar/OrcCastleTest.java create mode 100644 abstract-factory/src/test/nc/tc/com/iluwatar/OrcKingTest.java create mode 100644 abstract-factory/src/test/nc/tc/com/iluwatar/OrcKingdomFactoryTest.java create mode 100644 abstract-factory/src/test/resources/configure/UATApplicationContext.xml create mode 100644 abstract-factory/src/test/resources/configure/prop.xml create mode 100644 abstract-factory/src/test/resources/configure/test_data_source.xml create mode 100644 abstract-factory/src/test/resources/configure/uat.properties create mode 100644 abstract-factory/src/test/resources/configure/uat_spring_conf.xml create mode 100644 abstract-factory/src/test/resources/data/backup/README create mode 100644 abstract-factory/src/test/resources/data/config/README create mode 100644 abstract-factory/src/test/resources/data/excel/AppTest.xls create mode 100644 abstract-factory/src/test/resources/data/excel/AppTest.xls_2014_09_30_141708 create mode 100644 abstract-factory/src/test/resources/data/excel/ArmyTest.xls create mode 100644 abstract-factory/src/test/resources/data/excel/ArmyTest.xls_2014_09_30_141708 create mode 100644 abstract-factory/src/test/resources/data/excel/CastleTest.xls create mode 100644 abstract-factory/src/test/resources/data/excel/CastleTest.xls_2014_09_30_141708 create mode 100644 abstract-factory/src/test/resources/data/excel/ElfArmyTest.xls create mode 100644 abstract-factory/src/test/resources/data/excel/ElfArmyTest.xls_2014_09_30_141708 create mode 100644 abstract-factory/src/test/resources/data/excel/ElfCastleTest.xls create mode 100644 abstract-factory/src/test/resources/data/excel/ElfCastleTest.xls_2014_09_30_141708 create mode 100644 abstract-factory/src/test/resources/data/excel/ElfKingTest.xls create mode 100644 abstract-factory/src/test/resources/data/excel/ElfKingTest.xls_2014_09_30_141708 create mode 100644 abstract-factory/src/test/resources/data/excel/ElfKingdomFactoryTest.xls create mode 100644 abstract-factory/src/test/resources/data/excel/ElfKingdomFactoryTest.xls_2014_09_30_141708 create mode 100644 abstract-factory/src/test/resources/data/excel/KingTest.xls create mode 100644 abstract-factory/src/test/resources/data/excel/KingTest.xls_2014_09_30_141708 create mode 100644 abstract-factory/src/test/resources/data/excel/KingdomFactoryTest.xls create mode 100644 abstract-factory/src/test/resources/data/excel/KingdomFactoryTest.xls_2014_09_30_141708 create mode 100644 abstract-factory/src/test/resources/data/excel/OrcArmyTest.xls create mode 100644 abstract-factory/src/test/resources/data/excel/OrcArmyTest.xls_2014_09_30_141708 create mode 100644 abstract-factory/src/test/resources/data/excel/OrcCastleTest.xls create mode 100644 abstract-factory/src/test/resources/data/excel/OrcCastleTest.xls_2014_09_30_141708 create mode 100644 abstract-factory/src/test/resources/data/excel/OrcKingTest.xls create mode 100644 abstract-factory/src/test/resources/data/excel/OrcKingTest.xls_2014_09_30_141708 create mode 100644 abstract-factory/src/test/resources/data/excel/OrcKingdomFactoryTest.xls create mode 100644 abstract-factory/src/test/resources/data/excel/OrcKingdomFactoryTest.xls_2014_09_30_141708 create mode 100644 abstract-factory/src/test/resources/data/excel/README create mode 100644 abstract-factory/src/test/resources/data/object/README create mode 100644 abstract-factory/src/test/resources/data/spring/README create mode 100644 abstract-factory/src/test/resources/temp/README create mode 100644 abstract-factory/src/test/testng.xml create mode 100644 abstract-factory/test-output/Default suite/Default test.html create mode 100644 abstract-factory/test-output/Default suite/Default test.xml create mode 100644 abstract-factory/test-output/Default suite/testng-failed.xml create mode 100644 abstract-factory/test-output/bullet_point.png create mode 100644 abstract-factory/test-output/collapseall.gif create mode 100644 abstract-factory/test-output/emailable-report.html create mode 100644 abstract-factory/test-output/failed.png create mode 100644 abstract-factory/test-output/index.html create mode 100644 abstract-factory/test-output/jquery-1.7.1.min.js create mode 100644 abstract-factory/test-output/junitreports/TEST-com.iluwatar.AppTest.xml create mode 100644 abstract-factory/test-output/junitreports/TEST-nc.tc.com.iluwatar.AppTest.xml create mode 100644 abstract-factory/test-output/navigator-bullet.png create mode 100644 abstract-factory/test-output/old/Default suite/Default test.properties create mode 100644 abstract-factory/test-output/old/Default suite/classes.html create mode 100644 abstract-factory/test-output/old/Default suite/groups.html create mode 100644 abstract-factory/test-output/old/Default suite/index.html create mode 100644 abstract-factory/test-output/old/Default suite/main.html create mode 100644 abstract-factory/test-output/old/Default suite/methods-alphabetical.html create mode 100644 abstract-factory/test-output/old/Default suite/methods-not-run.html create mode 100644 abstract-factory/test-output/old/Default suite/methods.html create mode 100644 abstract-factory/test-output/old/Default suite/reporter-output.html create mode 100644 abstract-factory/test-output/old/Default suite/testng.xml.html create mode 100644 abstract-factory/test-output/old/Default suite/toc.html create mode 100644 abstract-factory/test-output/old/index.html create mode 100644 abstract-factory/test-output/passed.png create mode 100644 abstract-factory/test-output/skipped.png create mode 100644 abstract-factory/test-output/testng-failed.xml create mode 100644 abstract-factory/test-output/testng-reports.css create mode 100644 abstract-factory/test-output/testng-reports.js create mode 100644 abstract-factory/test-output/testng-results.xml create mode 100644 abstract-factory/test-output/testng.css create mode 100644 adapter/(default package).ucd create mode 100644 adapter/.euml2 create mode 100644 adapter/.gitignore create mode 100644 adapter/.umlproject create mode 100644 adapter/adapter.usd create mode 100644 adapter/out/.gitignore create mode 100644 adapter/src/java.usd rename adapter/src/main/java/com/iluwatar/{ => adapter}/App.java (93%) rename adapter/src/main/java/com/iluwatar/{ => adapter}/Engineer.java (75%) rename adapter/src/main/java/com/iluwatar/{ => adapter}/GnomeEngineer.java (78%) rename adapter/src/main/java/com/iluwatar/{ => adapter}/GnomeEngineeringManager.java (72%) rename adapter/src/main/java/com/iluwatar/{ => adapter}/GoblinGlider.java (87%) create mode 100644 adapter/src/test/log4j.xml create mode 100644 adapter/src/test/resources/configure/UATApplicationContext.xml create mode 100644 adapter/src/test/resources/configure/prop.xml create mode 100644 adapter/src/test/resources/configure/test_data_source.xml create mode 100644 adapter/src/test/resources/configure/uat.properties create mode 100644 adapter/src/test/resources/configure/uat_spring_conf.xml create mode 100644 adapter/src/test/resources/data/backup/README create mode 100644 adapter/src/test/resources/data/config/README create mode 100644 adapter/src/test/resources/data/excel/README create mode 100644 adapter/src/test/resources/data/object/README create mode 100644 adapter/src/test/resources/data/spring/README create mode 100644 adapter/src/test/resources/temp/README create mode 100644 adapter/src/test/testng.xml rename bridge/src/main/java/com/iluwatar/{ => bridge}/App.java (94%) rename bridge/src/main/java/com/iluwatar/{ => bridge}/BlindingMagicWeapon.java (89%) rename bridge/src/main/java/com/iluwatar/{ => bridge}/BlindingMagicWeaponImp.java (78%) rename bridge/src/main/java/com/iluwatar/{ => bridge}/Excalibur.java (90%) rename bridge/src/main/java/com/iluwatar/{ => bridge}/FlyingMagicWeapon.java (89%) rename bridge/src/main/java/com/iluwatar/{ => bridge}/FlyingMagicWeaponImp.java (78%) rename bridge/src/main/java/com/iluwatar/{ => bridge}/MagicWeapon.java (87%) rename bridge/src/main/java/com/iluwatar/{ => bridge}/MagicWeaponImp.java (83%) rename bridge/src/main/java/com/iluwatar/{ => bridge}/Mjollnir.java (90%) rename bridge/src/main/java/com/iluwatar/{ => bridge}/SoulEatingMagicWeapon.java (89%) rename bridge/src/main/java/com/iluwatar/{ => bridge}/SoulEatingMagicWeaponImp.java (79%) rename bridge/src/main/java/com/iluwatar/{ => bridge}/Stormbringer.java (90%) rename builder/src/main/java/com/iluwatar/{ => builder}/App.java (56%) rename builder/src/main/java/com/iluwatar/{ => builder}/Armor.java (89%) rename builder/src/main/java/com/iluwatar/{ => builder}/HairColor.java (88%) rename builder/src/main/java/com/iluwatar/{ => builder}/HairType.java (89%) rename builder/src/main/java/com/iluwatar/{ => builder}/Hero.java (85%) rename builder/src/main/java/com/iluwatar/{ => builder}/Profession.java (87%) rename builder/src/main/java/com/iluwatar/{ => builder}/Weapon.java (88%) delete mode 100644 chain/src/main/java/com/iluwatar/App.java create mode 100644 chain/src/main/java/com/iluwatar/chain/App.java rename chain/src/main/java/com/iluwatar/{ => chain}/OrcCommander.java (89%) rename chain/src/main/java/com/iluwatar/{ => chain}/OrcKing.java (87%) rename chain/src/main/java/com/iluwatar/{ => chain}/OrcOfficer.java (89%) rename chain/src/main/java/com/iluwatar/{ => chain}/OrcSoldier.java (89%) rename chain/src/main/java/com/iluwatar/{ => chain}/Request.java (92%) rename chain/src/main/java/com/iluwatar/{ => chain}/RequestHandler.java (90%) rename chain/src/main/java/com/iluwatar/{ => chain}/RequestType.java (72%) create mode 100644 command/.gitignore create mode 100644 command/out/.gitignore create mode 100644 command/src/test/log4j.xml create mode 100644 command/src/test/resources/configure/UATApplicationContext.xml create mode 100644 command/src/test/resources/configure/prop.xml create mode 100644 command/src/test/resources/configure/test_data_source.xml create mode 100644 command/src/test/resources/configure/uat.properties create mode 100644 command/src/test/resources/configure/uat_spring_conf.xml create mode 100644 command/src/test/resources/data/backup/README create mode 100644 command/src/test/resources/data/config/README create mode 100644 command/src/test/resources/data/excel/README create mode 100644 command/src/test/resources/data/object/README create mode 100644 command/src/test/resources/data/spring/README create mode 100644 command/src/test/resources/temp/README create mode 100644 command/src/test/testng.xml create mode 100644 composite/.gitignore create mode 100644 composite/out/.gitignore rename composite/src/main/java/com/iluwatar/{ => composite}/App.java (92%) rename composite/src/main/java/com/iluwatar/{ => composite}/Letter.java (85%) rename composite/src/main/java/com/iluwatar/{ => composite}/LetterComposite.java (90%) rename composite/src/main/java/com/iluwatar/{ => composite}/Messenger.java (96%) rename composite/src/main/java/com/iluwatar/{ => composite}/Sentence.java (86%) rename composite/src/main/java/com/iluwatar/{ => composite}/Word.java (86%) create mode 100644 composite/src/test/log4j.xml create mode 100644 composite/src/test/resources/configure/UATApplicationContext.xml create mode 100644 composite/src/test/resources/configure/prop.xml create mode 100644 composite/src/test/resources/configure/test_data_source.xml create mode 100644 composite/src/test/resources/configure/uat.properties create mode 100644 composite/src/test/resources/configure/uat_spring_conf.xml create mode 100644 composite/src/test/resources/data/backup/README create mode 100644 composite/src/test/resources/data/config/README create mode 100644 composite/src/test/resources/data/excel/README create mode 100644 composite/src/test/resources/data/object/README create mode 100644 composite/src/test/resources/data/spring/README create mode 100644 composite/src/test/resources/temp/README create mode 100644 composite/src/test/testng.xml rename decorator/src/main/java/com/iluwatar/{ => decorator}/App.java (92%) rename decorator/src/main/java/com/iluwatar/{ => decorator}/Hostile.java (68%) rename decorator/src/main/java/com/iluwatar/{ => decorator}/SmartTroll.java (89%) rename decorator/src/main/java/com/iluwatar/{ => decorator}/Troll.java (87%) rename double-checked-locking/src/main/java/com/{iluwatar => iluwatardbcheck}/App.java (89%) rename double-checked-locking/src/main/java/com/{iluwatar => iluwatardbcheck}/Inventory.java (89%) rename double-checked-locking/src/main/java/com/{iluwatar => iluwatardbcheck}/Item.java (62%) rename facade/src/main/java/com/iluwatar/{ => facade}/App.java (88%) rename facade/src/main/java/com/iluwatar/{ => facade}/DwarvenCartOperator.java (86%) rename facade/src/main/java/com/iluwatar/{ => facade}/DwarvenGoldDigger.java (85%) rename facade/src/main/java/com/iluwatar/{ => facade}/DwarvenGoldmineFacade.java (86%) rename facade/src/main/java/com/iluwatar/{ => facade}/DwarvenMineWorker.java (90%) rename facade/src/main/java/com/iluwatar/{ => facade}/DwarvenTunnelDigger.java (86%) create mode 100644 factory-method/out/.gitignore delete mode 100644 factory-method/src/main/java/com/iluwatar/App.java delete mode 100644 factory-method/src/main/java/com/iluwatar/Weapon.java create mode 100644 factory-method/src/main/java/com/iluwatar/factory/method/App.java rename factory-method/src/main/java/com/iluwatar/{ => factory/method}/Blacksmith.java (78%) rename factory-method/src/main/java/com/iluwatar/{ => factory/method}/ElfBlacksmith.java (79%) rename factory-method/src/main/java/com/iluwatar/{ => factory/method}/ElfWeapon.java (85%) rename factory-method/src/main/java/com/iluwatar/{ => factory/method}/OrcBlacksmith.java (80%) rename factory-method/src/main/java/com/iluwatar/{ => factory/method}/OrcWeapon.java (85%) create mode 100644 factory-method/src/main/java/com/iluwatar/factory/method/Testsmith.java create mode 100644 factory-method/src/main/java/com/iluwatar/factory/method/Weapon.java rename factory-method/src/main/java/com/iluwatar/{ => factory/method}/WeaponType.java (70%) create mode 100644 factory-method/src/test/log4j.xml create mode 100644 factory-method/src/test/resources/configure/UATApplicationContext.xml create mode 100644 factory-method/src/test/resources/configure/prop.xml create mode 100644 factory-method/src/test/resources/configure/test_data_source.xml create mode 100644 factory-method/src/test/resources/configure/uat.properties create mode 100644 factory-method/src/test/resources/configure/uat_spring_conf.xml create mode 100644 factory-method/src/test/resources/data/backup/README create mode 100644 factory-method/src/test/resources/data/config/README create mode 100644 factory-method/src/test/resources/data/excel/README create mode 100644 factory-method/src/test/resources/data/object/README create mode 100644 factory-method/src/test/resources/data/spring/README create mode 100644 factory-method/src/test/resources/temp/README create mode 100644 factory-method/src/test/testng.xml rename flyweight/src/main/java/com/iluwatar/{ => flyweight}/AlchemistShop.java (88%) rename flyweight/src/main/java/com/iluwatar/{ => flyweight}/App.java (89%) rename flyweight/src/main/java/com/iluwatar/{ => flyweight}/HealingPotion.java (84%) rename flyweight/src/main/java/com/iluwatar/{ => flyweight}/HolyWaterPotion.java (84%) rename flyweight/src/main/java/com/iluwatar/{ => flyweight}/InvisibilityPotion.java (85%) rename flyweight/src/main/java/com/iluwatar/{ => flyweight}/PoisonPotion.java (85%) rename flyweight/src/main/java/com/iluwatar/{ => flyweight}/Potion.java (73%) rename flyweight/src/main/java/com/iluwatar/{ => flyweight}/PotionFactory.java (86%) rename flyweight/src/main/java/com/iluwatar/{ => flyweight}/PotionType.java (72%) rename flyweight/src/main/java/com/iluwatar/{ => flyweight}/StrengthPotion.java (84%) rename interpreter/src/main/java/com/iluwatar/{ => interpreter}/App.java (76%) rename interpreter/src/main/java/com/iluwatar/{ => interpreter}/Expression.java (78%) rename interpreter/src/main/java/com/iluwatar/{ => interpreter}/MinusExpression.java (91%) rename interpreter/src/main/java/com/iluwatar/{ => interpreter}/MultiplyExpression.java (91%) rename interpreter/src/main/java/com/iluwatar/{ => interpreter}/NumberExpression.java (87%) rename interpreter/src/main/java/com/iluwatar/{ => interpreter}/PlusExpression.java (91%) rename iterator/src/main/java/com/iluwatar/{ => iterator}/App.java (94%) rename iterator/src/main/java/com/iluwatar/{ => iterator}/Item.java (87%) rename iterator/src/main/java/com/iluwatar/{ => iterator}/ItemIterator.java (71%) rename iterator/src/main/java/com/iluwatar/{ => iterator}/ItemType.java (64%) rename iterator/src/main/java/com/iluwatar/{ => iterator}/TreasureChest.java (86%) rename iterator/src/main/java/com/iluwatar/{ => iterator}/TreasureChestItemIterator.java (89%) delete mode 100644 mediator/src/main/java/com/iluwatar/App.java rename mediator/src/main/java/com/iluwatar/{ => mediator}/Action.java (87%) create mode 100644 mediator/src/main/java/com/iluwatar/mediator/App.java rename mediator/src/main/java/com/iluwatar/{ => mediator}/Hobbit.java (77%) rename mediator/src/main/java/com/iluwatar/{ => mediator}/Hunter.java (77%) rename mediator/src/main/java/com/iluwatar/{ => mediator}/Party.java (80%) rename mediator/src/main/java/com/iluwatar/{ => mediator}/PartyImpl.java (85%) rename mediator/src/main/java/com/iluwatar/{ => mediator}/PartyMember.java (84%) rename mediator/src/main/java/com/iluwatar/{ => mediator}/PartyMemberBase.java (92%) rename mediator/src/main/java/com/iluwatar/{ => mediator}/Rogue.java (77%) rename mediator/src/main/java/com/iluwatar/{ => mediator}/Wizard.java (77%) delete mode 100644 memento/src/main/java/com/iluwatar/App.java create mode 100644 memento/src/main/java/com/iluwatar/memento/App.java rename memento/src/main/java/com/iluwatar/{ => memento}/Star.java (93%) rename memento/src/main/java/com/iluwatar/{ => memento}/StarMemento.java (72%) rename memento/src/main/java/com/iluwatar/{ => memento}/StarMementoInternal.java (90%) rename memento/src/main/java/com/iluwatar/{ => memento}/StarType.java (87%) create mode 100644 observer/.gitignore create mode 100644 observer/com/iluwatar/App.main.pdf create mode 100644 observer/com/iluwatar/App.main.sdx create mode 100644 observer/out/.gitignore create mode 100644 observer/src/dsd.java create mode 100644 observer/src/main/java/RER.java create mode 100644 observer/src/main/java/RWW.java rename observer/src/main/java/com/iluwatar/{ => observer}/App.java (61%) rename observer/src/main/java/com/iluwatar/{ => observer}/Hobbits.java (66%) rename observer/src/main/java/com/iluwatar/{ => observer}/Orcs.java (91%) create mode 100644 observer/src/main/java/com/iluwatar/observer/Test.java create mode 100644 observer/src/main/java/com/iluwatar/observer/WEE.java rename observer/src/main/java/com/iluwatar/{ => observer}/Weather.java (90%) rename observer/src/main/java/com/iluwatar/{ => observer}/WeatherObserver.java (78%) rename observer/src/main/java/com/iluwatar/{ => observer}/WeatherType.java (78%) create mode 100644 observer/src/main/java/com/iluwatar/observer/dsfaa.java create mode 100644 observer/src/test/log4j.xml create mode 100644 observer/src/test/resources/configure/UATApplicationContext.xml create mode 100644 observer/src/test/resources/configure/prop.xml create mode 100644 observer/src/test/resources/configure/test_data_source.xml create mode 100644 observer/src/test/resources/configure/uat.properties create mode 100644 observer/src/test/resources/configure/uat_spring_conf.xml create mode 100644 observer/src/test/resources/data/backup/README create mode 100644 observer/src/test/resources/data/config/README create mode 100644 observer/src/test/resources/data/excel/README create mode 100644 observer/src/test/resources/data/object/README create mode 100644 observer/src/test/resources/data/spring/README create mode 100644 observer/src/test/resources/temp/README create mode 100644 observer/src/test/testng.xml rename prototype/src/main/java/com/iluwatar/{ => prototype}/App.java (94%) rename prototype/src/main/java/com/iluwatar/{ => prototype}/Beast.java (80%) rename prototype/src/main/java/com/iluwatar/{ => prototype}/ElfBeast.java (86%) rename prototype/src/main/java/com/iluwatar/{ => prototype}/ElfMage.java (86%) rename prototype/src/main/java/com/iluwatar/{ => prototype}/ElfWarlord.java (87%) rename prototype/src/main/java/com/iluwatar/{ => prototype}/HeroFactory.java (80%) rename prototype/src/main/java/com/iluwatar/{ => prototype}/HeroFactoryImpl.java (91%) rename prototype/src/main/java/com/iluwatar/{ => prototype}/Mage.java (80%) rename prototype/src/main/java/com/iluwatar/{ => prototype}/OrcBeast.java (86%) rename prototype/src/main/java/com/iluwatar/{ => prototype}/OrcMage.java (86%) rename prototype/src/main/java/com/iluwatar/{ => prototype}/OrcWarlord.java (87%) rename prototype/src/main/java/com/iluwatar/{ => prototype}/Prototype.java (81%) rename prototype/src/main/java/com/iluwatar/{ => prototype}/Warlord.java (80%) delete mode 100644 proxy/src/main/java/com/iluwatar/App.java create mode 100644 proxy/src/main/java/com/iluwatar/proxy/App.java rename proxy/src/main/java/com/iluwatar/{ => proxy}/Wizard.java (81%) rename proxy/src/main/java/com/iluwatar/{ => proxy}/WizardTower.java (79%) rename proxy/src/main/java/com/iluwatar/{ => proxy}/WizardTowerProxy.java (88%) create mode 100644 singleton/.gitignore create mode 100644 singleton/out/.gitignore rename singleton/src/main/java/com/iluwatar/{ => singleton}/App.java (91%) rename singleton/src/main/java/com/iluwatar/{ => singleton}/IvoryTower.java (53%) create mode 100644 singleton/src/test/log4j.xml create mode 100644 singleton/src/test/resources/configure/UATApplicationContext.xml create mode 100644 singleton/src/test/resources/configure/prop.xml create mode 100644 singleton/src/test/resources/configure/test_data_source.xml create mode 100644 singleton/src/test/resources/configure/uat.properties create mode 100644 singleton/src/test/resources/configure/uat_spring_conf.xml create mode 100644 singleton/src/test/resources/data/backup/README create mode 100644 singleton/src/test/resources/data/config/README create mode 100644 singleton/src/test/resources/data/excel/README create mode 100644 singleton/src/test/resources/data/object/README create mode 100644 singleton/src/test/resources/data/spring/README create mode 100644 singleton/src/test/resources/temp/README create mode 100644 singleton/src/test/testng.xml rename state/src/main/java/com/iluwatar/{ => state}/AngryState.java (89%) rename state/src/main/java/com/iluwatar/{ => state}/App.java (90%) rename state/src/main/java/com/iluwatar/{ => state}/Mammoth.java (90%) rename state/src/main/java/com/iluwatar/{ => state}/PeacefulState.java (89%) rename state/src/main/java/com/iluwatar/{ => state}/State.java (74%) rename strategy/src/main/java/com/iluwatar/{ => strategy}/App.java (93%) rename strategy/src/main/java/com/iluwatar/{ => strategy}/DragonSlayer.java (89%) rename strategy/src/main/java/com/iluwatar/{ => strategy}/DragonSlayingStrategy.java (75%) rename strategy/src/main/java/com/iluwatar/{ => strategy}/MeleeStrategy.java (84%) rename strategy/src/main/java/com/iluwatar/{ => strategy}/ProjectileStrategy.java (87%) rename strategy/src/main/java/com/iluwatar/{ => strategy}/SpellStrategy.java (86%) rename template-method/src/main/java/com/iluwatar/{ => template/method}/App.java (90%) rename template-method/src/main/java/com/iluwatar/{ => template/method}/HalflingThief.java (87%) rename template-method/src/main/java/com/iluwatar/{ => template/method}/HitAndRunMethod.java (90%) rename template-method/src/main/java/com/iluwatar/{ => template/method}/StealingMethod.java (90%) rename template-method/src/main/java/com/iluwatar/{ => template/method}/SubtleMethod.java (90%) rename visitor/src/main/java/com/iluwatar/{ => visitor}/App.java (92%) rename visitor/src/main/java/com/iluwatar/{ => visitor}/Commander.java (87%) rename visitor/src/main/java/com/iluwatar/{ => visitor}/CommanderVisitor.java (89%) rename visitor/src/main/java/com/iluwatar/{ => visitor}/Sergeant.java (87%) rename visitor/src/main/java/com/iluwatar/{ => visitor}/SergeantVisitor.java (89%) rename visitor/src/main/java/com/iluwatar/{ => visitor}/Soldier.java (87%) rename visitor/src/main/java/com/iluwatar/{ => visitor}/SoldierVisitor.java (89%) rename visitor/src/main/java/com/iluwatar/{ => visitor}/Unit.java (87%) rename visitor/src/main/java/com/iluwatar/{ => visitor}/UnitVisitor.java (84%) diff --git a/.gitignore b/.gitignore index 09a07ae76725..cf66913a731d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,11 @@ -target -.metadata -.settings -.classpath -.project -*.class -# Package Files # -*.jar -*.war -*.ear +target +.metadata +.settings +.classpath +.project +*.class +# Package Files # +*.jar +*.war +*.ear +/bin diff --git a/abstract-factory/.euml2 b/abstract-factory/.euml2 new file mode 100644 index 000000000000..e348ac9b6238 --- /dev/null +++ b/abstract-factory/.euml2 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/abstract-factory/.gitignore b/abstract-factory/.gitignore index b83d22266ac8..e2540458518e 100644 --- a/abstract-factory/.gitignore +++ b/abstract-factory/.gitignore @@ -1 +1,2 @@ /target/ +/bin diff --git a/abstract-factory/.umlproject b/abstract-factory/.umlproject new file mode 100644 index 000000000000..e348ac9b6238 --- /dev/null +++ b/abstract-factory/.umlproject @@ -0,0 +1,7 @@ + + + + + + + diff --git a/abstract-factory/build/log/testResult.log b/abstract-factory/build/log/testResult.log new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/abstract-factory/build/log/uatError.log b/abstract-factory/build/log/uatError.log new file mode 100644 index 000000000000..b3fdd226a739 --- /dev/null +++ b/abstract-factory/build/log/uatError.log @@ -0,0 +1,56 @@ +[UAPUnit]09/30 14:26:28,842 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:28,856 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:26:28,985 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:28,986 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:26:29,085 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:29,086 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:26:35,064 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:35,065 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:28:38,096 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:28:38,109 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:28:38,232 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:28:38,233 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:28:38,327 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:28:38,328 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:29:27,268 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:29:27,269 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:31:25,945 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:25,959 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:31:26,087 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:26,088 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:31:26,177 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:26,178 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:31:41,282 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:41,283 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:32:43,107 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:32:43,121 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:32:53,259 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:32:53,260 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:32:53,363 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:32:53,364 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:33:02,088 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:02,090 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:33:28,019 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:28,033 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:33:29,154 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:29,155 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:33:29,262 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:29,263 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:33:32,699 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:32,700 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:34:04,767 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:04,780 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:34:24,774 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:24,775 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:34:24,885 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:24,886 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:34:33,715 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:33,716 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:35:19,412 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:35:19,427 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:35:21,409 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:35:21,410 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:35:21,519 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:35:21,520 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:37:01,536 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:37:01,536 ERROR [main] DBManage:66 - connection is null ! diff --git a/abstract-factory/build/log/uatLog.log b/abstract-factory/build/log/uatLog.log new file mode 100644 index 000000000000..d9efd856db56 --- /dev/null +++ b/abstract-factory/build/log/uatLog.log @@ -0,0 +1,98 @@ +[UAPUnit]09/30 14:26:28,643 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:26:28,746 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:26:28,842 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:28,844 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:26:28,856 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:26:28,985 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:28,986 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:26:29,038 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:26:29,082 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:26:29,085 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:29,086 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:26:29,086 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:26:35,064 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:35,065 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:28:37,915 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:28:38,011 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:28:38,096 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:28:38,097 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:28:38,109 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:28:38,232 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:28:38,233 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:28:38,286 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:28:38,325 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:28:38,327 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:28:38,328 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:28:38,328 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:29:27,268 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:29:27,269 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:31:25,747 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:31:25,849 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:31:25,945 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:25,947 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:31:25,959 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:31:26,087 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:26,088 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:31:26,137 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:31:26,174 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:31:26,177 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:26,177 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:31:26,178 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:31:41,282 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:41,283 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:32:42,897 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:32:43,005 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:32:43,107 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:32:43,109 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:32:43,121 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:32:53,259 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:32:53,260 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:32:53,323 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:32:53,360 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:32:53,363 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:32:53,364 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:32:53,364 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:33:02,088 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:02,090 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:33:27,817 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:33:27,922 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:33:28,019 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:28,021 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:33:28,033 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:33:29,154 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:29,155 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:33:29,221 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:33:29,260 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:33:29,262 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:29,263 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:33:29,263 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:33:32,699 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:32,700 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:34:04,566 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:34:04,669 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:34:04,767 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:04,769 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:34:04,780 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:34:24,774 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:24,775 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:34:24,846 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:34:24,882 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:34:24,885 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:24,885 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:34:24,886 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:34:33,715 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:33,716 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:35:19,213 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:35:19,314 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:35:19,412 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:35:19,414 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:35:19,427 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:35:21,409 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:35:21,410 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:35:21,460 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:35:21,515 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:35:21,519 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:35:21,520 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:35:21,520 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:37:01,536 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:37:01,536 ERROR [main] DBManage:66 - connection is null ! diff --git a/abstract-factory/out/.gitignore b/abstract-factory/out/.gitignore new file mode 100644 index 000000000000..5e56e040ec09 --- /dev/null +++ b/abstract-factory/out/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/abstract-factory/src/main/java/com/iluwatar/Army.java b/abstract-factory/src/main/java/com/iluwatar/Army.java deleted file mode 100644 index 0365fad96c49..000000000000 --- a/abstract-factory/src/main/java/com/iluwatar/Army.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.iluwatar; - -public interface Army { - -} diff --git a/abstract-factory/src/main/java/com/iluwatar/Castle.java b/abstract-factory/src/main/java/com/iluwatar/Castle.java deleted file mode 100644 index 4cc765bee9b7..000000000000 --- a/abstract-factory/src/main/java/com/iluwatar/Castle.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.iluwatar; - -public interface Castle { - -} diff --git a/abstract-factory/src/main/java/com/iluwatar/King.java b/abstract-factory/src/main/java/com/iluwatar/King.java deleted file mode 100644 index 2a63cb3b1659..000000000000 --- a/abstract-factory/src/main/java/com/iluwatar/King.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.iluwatar; - -public interface King { - -} diff --git a/abstract-factory/src/main/java/com/iluwatar/App.java b/abstract-factory/src/main/java/com/iluwatar/absfactory/App.java similarity index 93% rename from abstract-factory/src/main/java/com/iluwatar/App.java rename to abstract-factory/src/main/java/com/iluwatar/absfactory/App.java index bb6b083add1e..b53f0ffb6cfa 100644 --- a/abstract-factory/src/main/java/com/iluwatar/App.java +++ b/abstract-factory/src/main/java/com/iluwatar/absfactory/App.java @@ -1,29 +1,29 @@ -package com.iluwatar; - -/** - * - * The essence of the Abstract Factory pattern is a factory interface (KingdomFactory) - * and its implementations (ElfKingdomFactory, OrcKingdomFactory). - * - * The example uses both concrete implementations to create a king, a castle and an - * army. - * - */ -public class App -{ - public static void main( String[] args ) - { - createKingdom(new ElfKingdomFactory()); - createKingdom(new OrcKingdomFactory()); - } - - public static void createKingdom(KingdomFactory factory) { - King king = factory.createKing(); - Castle castle = factory.createCastle(); - Army army = factory.createArmy(); - System.out.println("The kingdom was created."); - System.out.println(king); - System.out.println(castle); - System.out.println(army); - } -} +package com.iluwatar.absfactory; + +/** + * + * The essence of the Abstract Factory pattern is a factory interface (KingdomFactory) + * and its implementations (ElfKingdomFactory, OrcKingdomFactory). + * + * The example uses both concrete implementations to create a king, a castle and an + * army. + * + */ +public class App +{ + public static void main( String[] args ) + { + createKingdom(new ElfKingdomFactory()); + createKingdom(new OrcKingdomFactory()); + } + + public static void createKingdom(KingdomFactory factory) { + King king = factory.createKing(); + Castle castle = factory.createCastle(); + Army army = factory.createArmy(); + System.out.println("The kingdom was created."); + System.out.println(king); + System.out.println(castle); + System.out.println(army); + } +} diff --git a/abstract-factory/src/main/java/com/iluwatar/absfactory/Army.java b/abstract-factory/src/main/java/com/iluwatar/absfactory/Army.java new file mode 100644 index 000000000000..15f5045a4c06 --- /dev/null +++ b/abstract-factory/src/main/java/com/iluwatar/absfactory/Army.java @@ -0,0 +1,5 @@ +package com.iluwatar.absfactory; + +public interface Army { + +} diff --git a/abstract-factory/src/main/java/com/iluwatar/absfactory/Castle.java b/abstract-factory/src/main/java/com/iluwatar/absfactory/Castle.java new file mode 100644 index 000000000000..7272f08c416e --- /dev/null +++ b/abstract-factory/src/main/java/com/iluwatar/absfactory/Castle.java @@ -0,0 +1,5 @@ +package com.iluwatar.absfactory; + +public interface Castle { + +} diff --git a/abstract-factory/src/main/java/com/iluwatar/ElfArmy.java b/abstract-factory/src/main/java/com/iluwatar/absfactory/ElfArmy.java similarity index 78% rename from abstract-factory/src/main/java/com/iluwatar/ElfArmy.java rename to abstract-factory/src/main/java/com/iluwatar/absfactory/ElfArmy.java index 1df451c9cb60..043726398b44 100644 --- a/abstract-factory/src/main/java/com/iluwatar/ElfArmy.java +++ b/abstract-factory/src/main/java/com/iluwatar/absfactory/ElfArmy.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class ElfArmy implements Army { - - @Override - public String toString() { - return "This is the Elven Army!"; - } - -} +package com.iluwatar.absfactory; + +public class ElfArmy implements Army { + + @Override + public String toString() { + return "This is the Elven Army!"; + } + +} diff --git a/abstract-factory/src/main/java/com/iluwatar/ElfCastle.java b/abstract-factory/src/main/java/com/iluwatar/absfactory/ElfCastle.java similarity index 79% rename from abstract-factory/src/main/java/com/iluwatar/ElfCastle.java rename to abstract-factory/src/main/java/com/iluwatar/absfactory/ElfCastle.java index deaf6a58df55..57731a55af56 100644 --- a/abstract-factory/src/main/java/com/iluwatar/ElfCastle.java +++ b/abstract-factory/src/main/java/com/iluwatar/absfactory/ElfCastle.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class ElfCastle implements Castle { - - @Override - public String toString() { - return "This is the Elven castle!"; - } - -} +package com.iluwatar.absfactory; + +public class ElfCastle implements Castle { + + @Override + public String toString() { + return "This is the Elven castle!"; + } + +} diff --git a/abstract-factory/src/main/java/com/iluwatar/ElfKing.java b/abstract-factory/src/main/java/com/iluwatar/absfactory/ElfKing.java similarity index 78% rename from abstract-factory/src/main/java/com/iluwatar/ElfKing.java rename to abstract-factory/src/main/java/com/iluwatar/absfactory/ElfKing.java index 36e51119ab24..ec163185dcb2 100644 --- a/abstract-factory/src/main/java/com/iluwatar/ElfKing.java +++ b/abstract-factory/src/main/java/com/iluwatar/absfactory/ElfKing.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class ElfKing implements King { - - @Override - public String toString() { - return "This is the Elven king!"; - } - -} +package com.iluwatar.absfactory; + +public class ElfKing implements King { + + @Override + public String toString() { + return "This is the Elven king!"; + } + +} diff --git a/abstract-factory/src/main/java/com/iluwatar/ElfKingdomFactory.java b/abstract-factory/src/main/java/com/iluwatar/absfactory/ElfKingdomFactory.java similarity index 86% rename from abstract-factory/src/main/java/com/iluwatar/ElfKingdomFactory.java rename to abstract-factory/src/main/java/com/iluwatar/absfactory/ElfKingdomFactory.java index 715e8123c022..2356ecf0a14d 100644 --- a/abstract-factory/src/main/java/com/iluwatar/ElfKingdomFactory.java +++ b/abstract-factory/src/main/java/com/iluwatar/absfactory/ElfKingdomFactory.java @@ -1,22 +1,22 @@ -package com.iluwatar; - -/** - * - * Concrete factory. - * - */ -public class ElfKingdomFactory implements KingdomFactory { - - public Castle createCastle() { - return new ElfCastle(); - } - - public King createKing() { - return new ElfKing(); - } - - public Army createArmy() { - return new ElfArmy(); - } - -} +package com.iluwatar.absfactory; + +/** + * + * Concrete factory. + * + */ +public class ElfKingdomFactory implements KingdomFactory { + + public Castle createCastle() { + return new ElfCastle(); + } + + public King createKing() { + return new ElfKing(); + } + + public Army createArmy() { + return new ElfArmy(); + } + +} diff --git a/abstract-factory/src/main/java/com/iluwatar/absfactory/King.java b/abstract-factory/src/main/java/com/iluwatar/absfactory/King.java new file mode 100644 index 000000000000..9d9c35c827a1 --- /dev/null +++ b/abstract-factory/src/main/java/com/iluwatar/absfactory/King.java @@ -0,0 +1,5 @@ +package com.iluwatar.absfactory; + +public interface King { + +} diff --git a/abstract-factory/src/main/java/com/iluwatar/KingdomFactory.java b/abstract-factory/src/main/java/com/iluwatar/absfactory/KingdomFactory.java similarity index 80% rename from abstract-factory/src/main/java/com/iluwatar/KingdomFactory.java rename to abstract-factory/src/main/java/com/iluwatar/absfactory/KingdomFactory.java index d1818b62e306..045452e3f659 100644 --- a/abstract-factory/src/main/java/com/iluwatar/KingdomFactory.java +++ b/abstract-factory/src/main/java/com/iluwatar/absfactory/KingdomFactory.java @@ -1,14 +1,14 @@ -package com.iluwatar; - -/** - * - * The factory interface. - * - */ -public interface KingdomFactory { - - Castle createCastle(); - King createKing(); - Army createArmy(); - -} +package com.iluwatar.absfactory; + +/** + * + * The factory interface. + * + */ +public interface KingdomFactory { + + Castle createCastle(); + King createKing(); + Army createArmy(); + +} diff --git a/abstract-factory/src/main/java/com/iluwatar/OrcArmy.java b/abstract-factory/src/main/java/com/iluwatar/absfactory/OrcArmy.java similarity index 78% rename from abstract-factory/src/main/java/com/iluwatar/OrcArmy.java rename to abstract-factory/src/main/java/com/iluwatar/absfactory/OrcArmy.java index d4e2515f6311..9b76b7ae481e 100644 --- a/abstract-factory/src/main/java/com/iluwatar/OrcArmy.java +++ b/abstract-factory/src/main/java/com/iluwatar/absfactory/OrcArmy.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class OrcArmy implements Army { - - @Override - public String toString() { - return "This is the Orcish Army!"; - } - -} +package com.iluwatar.absfactory; + +public class OrcArmy implements Army { + + @Override + public String toString() { + return "This is the Orcish Army!"; + } + +} diff --git a/abstract-factory/src/main/java/com/iluwatar/OrcCastle.java b/abstract-factory/src/main/java/com/iluwatar/absfactory/OrcCastle.java similarity index 79% rename from abstract-factory/src/main/java/com/iluwatar/OrcCastle.java rename to abstract-factory/src/main/java/com/iluwatar/absfactory/OrcCastle.java index daa49f43f18f..8d9a30babef9 100644 --- a/abstract-factory/src/main/java/com/iluwatar/OrcCastle.java +++ b/abstract-factory/src/main/java/com/iluwatar/absfactory/OrcCastle.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class OrcCastle implements Castle { - - @Override - public String toString() { - return "This is the Orcish castle!"; - } - -} +package com.iluwatar.absfactory; + +public class OrcCastle implements Castle { + + @Override + public String toString() { + return "This is the Orcish castle!"; + } + +} diff --git a/abstract-factory/src/main/java/com/iluwatar/OrcKing.java b/abstract-factory/src/main/java/com/iluwatar/absfactory/OrcKing.java similarity index 78% rename from abstract-factory/src/main/java/com/iluwatar/OrcKing.java rename to abstract-factory/src/main/java/com/iluwatar/absfactory/OrcKing.java index b6ba989d7647..5c57618a57f6 100644 --- a/abstract-factory/src/main/java/com/iluwatar/OrcKing.java +++ b/abstract-factory/src/main/java/com/iluwatar/absfactory/OrcKing.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class OrcKing implements King { - - @Override - public String toString() { - return "This is the Orc king!"; - } - -} +package com.iluwatar.absfactory; + +public class OrcKing implements King { + + @Override + public String toString() { + return "This is the Orc king!"; + } + +} diff --git a/abstract-factory/src/main/java/com/iluwatar/OrcKingdomFactory.java b/abstract-factory/src/main/java/com/iluwatar/absfactory/OrcKingdomFactory.java similarity index 79% rename from abstract-factory/src/main/java/com/iluwatar/OrcKingdomFactory.java rename to abstract-factory/src/main/java/com/iluwatar/absfactory/OrcKingdomFactory.java index 1a0d6d713b7d..5fb97028a63e 100644 --- a/abstract-factory/src/main/java/com/iluwatar/OrcKingdomFactory.java +++ b/abstract-factory/src/main/java/com/iluwatar/absfactory/OrcKingdomFactory.java @@ -1,22 +1,26 @@ -package com.iluwatar; - -/** - * - * Concrete factory. - * - */ -public class OrcKingdomFactory implements KingdomFactory { - - public Castle createCastle() { - return new OrcCastle(); - } - - public King createKing() { - return new OrcKing(); - } - - public Army createArmy() { - return new OrcArmy(); - } - -} +package com.iluwatar.absfactory; + + +/** + * + * Concrete factory. + * + */ +public class OrcKingdomFactory implements KingdomFactory { + + @Override + public Castle createCastle() { + return new OrcCastle(); + } + + @Override + public King createKing() { + return new OrcKing(); + } + + @Override + public Army createArmy() { + return new OrcArmy(); + } + +} diff --git a/abstract-factory/src/test/com/iluwatar/AppTest.java b/abstract-factory/src/test/com/iluwatar/AppTest.java new file mode 100644 index 000000000000..b40ccdc7bdfb --- /dev/null +++ b/abstract-factory/src/test/com/iluwatar/AppTest.java @@ -0,0 +1,26 @@ +package com.iluwatar; + +import org.testng.annotations.Test; + +public class AppTest { + + @Test + public void createKingdom() { + try { + App.createKingdom(new ElfKingdomFactory()); + App.createKingdom(new ElfKingdomFactory()); + } catch (Exception e) { + throw new RuntimeException(); + } + + } + + @Test + public void main() { + try { + App.main(null); + } catch (Exception e) { + throw new RuntimeException(); + } + } +} diff --git a/abstract-factory/src/test/log/testResult.log b/abstract-factory/src/test/log/testResult.log new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/abstract-factory/src/test/log/uatError.log b/abstract-factory/src/test/log/uatError.log new file mode 100644 index 000000000000..b3fdd226a739 --- /dev/null +++ b/abstract-factory/src/test/log/uatError.log @@ -0,0 +1,56 @@ +[UAPUnit]09/30 14:26:28,842 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:28,856 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:26:28,985 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:28,986 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:26:29,085 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:29,086 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:26:35,064 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:35,065 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:28:38,096 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:28:38,109 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:28:38,232 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:28:38,233 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:28:38,327 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:28:38,328 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:29:27,268 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:29:27,269 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:31:25,945 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:25,959 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:31:26,087 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:26,088 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:31:26,177 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:26,178 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:31:41,282 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:41,283 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:32:43,107 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:32:43,121 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:32:53,259 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:32:53,260 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:32:53,363 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:32:53,364 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:33:02,088 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:02,090 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:33:28,019 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:28,033 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:33:29,154 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:29,155 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:33:29,262 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:29,263 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:33:32,699 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:32,700 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:34:04,767 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:04,780 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:34:24,774 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:24,775 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:34:24,885 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:24,886 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:34:33,715 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:33,716 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:35:19,412 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:35:19,427 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:35:21,409 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:35:21,410 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:35:21,519 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:35:21,520 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:37:01,536 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:37:01,536 ERROR [main] DBManage:66 - connection is null ! diff --git a/abstract-factory/src/test/log/uatLog.log b/abstract-factory/src/test/log/uatLog.log new file mode 100644 index 000000000000..d9efd856db56 --- /dev/null +++ b/abstract-factory/src/test/log/uatLog.log @@ -0,0 +1,98 @@ +[UAPUnit]09/30 14:26:28,643 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:26:28,746 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:26:28,842 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:28,844 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:26:28,856 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:26:28,985 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:28,986 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:26:29,038 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:26:29,082 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:26:29,085 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:29,086 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:26:29,086 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:26:35,064 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:26:35,065 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:28:37,915 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:28:38,011 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:28:38,096 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:28:38,097 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:28:38,109 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:28:38,232 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:28:38,233 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:28:38,286 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:28:38,325 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:28:38,327 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:28:38,328 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:28:38,328 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:29:27,268 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:29:27,269 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:31:25,747 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:31:25,849 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:31:25,945 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:25,947 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:31:25,959 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:31:26,087 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:26,088 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:31:26,137 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:31:26,174 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:31:26,177 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:26,177 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:31:26,178 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:31:41,282 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:31:41,283 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:32:42,897 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:32:43,005 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:32:43,107 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:32:43,109 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:32:43,121 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:32:53,259 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:32:53,260 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:32:53,323 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:32:53,360 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:32:53,363 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:32:53,364 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:32:53,364 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:33:02,088 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:02,090 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:33:27,817 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:33:27,922 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:33:28,019 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:28,021 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:33:28,033 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:33:29,154 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:29,155 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:33:29,221 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:33:29,260 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:33:29,262 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:29,263 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:33:29,263 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:33:32,699 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:33:32,700 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:34:04,566 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:34:04,669 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:34:04,767 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:04,769 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:34:04,780 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:34:24,774 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:24,775 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:34:24,846 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:34:24,882 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:34:24,885 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:24,885 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:34:24,886 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:34:33,715 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:34:33,716 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:35:19,213 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:35:19,314 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:35:19,412 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:35:19,414 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:35:19,427 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:35:21,409 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:35:21,410 ERROR [main] DBManage:66 - connection is null ! +[UAPUnit]09/30 14:35:21,460 INFO [main] ExcelDataProvider:34 - excelPath:F:\java-design-patterns\abstract-factory\out\bin\resources\data\excel\AppTest.xls +[UAPUnit]09/30 14:35:21,515 WARN [main] AppLogMgrImpl:178 - invalid log path(debug.log), verification of this file will be skipped +[UAPUnit]09/30 14:35:21,519 ERROR [main] DBManage:44 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:35:21,520 INFO [main] DBManage:51 - dataFile path:c:\temp\datafile.xml +[UAPUnit]09/30 14:35:21,520 ERROR [main] DBManage:56 - +[UAPUnit]09/30 14:37:01,536 ERROR [main] DBManage:91 - No suitable driver found for jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive +[UAPUnit]09/30 14:37:01,536 ERROR [main] DBManage:66 - connection is null ! diff --git a/abstract-factory/src/test/log4j.xml b/abstract-factory/src/test/log4j.xml new file mode 100644 index 000000000000..748d0c1a5271 --- /dev/null +++ b/abstract-factory/src/test/log4j.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/abstract-factory/src/test/nc/tc/com/iluwatar/AppTest.java b/abstract-factory/src/test/nc/tc/com/iluwatar/AppTest.java new file mode 100644 index 000000000000..9c673db00efa --- /dev/null +++ b/abstract-factory/src/test/nc/tc/com/iluwatar/AppTest.java @@ -0,0 +1,77 @@ +package nc.tc.com.iluwatar; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.testng.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import com.iluwatar.App; +import com.iluwatar.KingdomFactory; +import com.yonyou.uat.dbmanagement.DBManage; +import com.yonyou.uat.framework.BaseTestCase; + +public class AppTest extends BaseTestCase { + App app = null; + DBManage dbManage = null; + + @BeforeClass + public void BeforeClass() { + app = new App(); + } + + @AfterClass + public void AfterClass() { + } + + @BeforeMethod + public void BeforeMethod() { + List tableList = new ArrayList(); + tableList.add("pub_wfexptlog"); + dbManage = new DBManage(); + dbManage.setTableList(tableList); + dbManage.tableExport(); + } + + @AfterMethod + public void AfterMethod() { + dbManage.tableRollBack(); + } + + @Test(description = "", dependsOnMethods = {}, groups = "", timeOut = 100000, dataProvider = "dp") + public void main(Map> dp) { + + // Construct method parameters + String[] args = {}; + + // Invoke tested method + App.main(args); + + // Verify result is ok + + // Verify Object1 == Object2 + Assert.assertEquals("actual", "actual"); + Assert.assertNotNull("actual"); + } + + @Test(description = "", dependsOnMethods = {}, groups = "", timeOut = 100000, dataProvider = "dp") + public void createKingdom(Map> dp) { + + // Construct method parameters + KingdomFactory factory = null; + + // Invoke tested method + App.createKingdom(factory); + + // Verify result is ok + + // Verify Object1 == Object2 + Assert.assertEquals("actual", "actual"); + Assert.assertNotNull("actual"); + } +} diff --git a/abstract-factory/src/test/nc/tc/com/iluwatar/ArmyTest.java b/abstract-factory/src/test/nc/tc/com/iluwatar/ArmyTest.java new file mode 100644 index 000000000000..6a34e084fb90 --- /dev/null +++ b/abstract-factory/src/test/nc/tc/com/iluwatar/ArmyTest.java @@ -0,0 +1,45 @@ +package nc.tc.com.iluwatar; + +import java.util.ArrayList; +import java.util.List; + +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; + +import com.yonyou.uat.dbmanagement.DBManage; +import com.yonyou.uat.framework.BaseTestCase; + +public class ArmyTest extends BaseTestCase { + Class army = null; + DBManage dbManage = null; + + @BeforeClass + public void BeforeClass() { + try { + army = Class.forName("com.iluwatar.Army"); + } catch (ClassNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @AfterClass + public void AfterClass() { + } + + @BeforeMethod + public void BeforeMethod() { + List tableList = new ArrayList(); + tableList.add("pub_wfexptlog"); + dbManage = new DBManage(); + dbManage.setTableList(tableList); + dbManage.tableExport(); + } + + @AfterMethod + public void AfterMethod() { + dbManage.tableRollBack(); + } +} diff --git a/abstract-factory/src/test/nc/tc/com/iluwatar/CastleTest.java b/abstract-factory/src/test/nc/tc/com/iluwatar/CastleTest.java new file mode 100644 index 000000000000..6367fcb7aa92 --- /dev/null +++ b/abstract-factory/src/test/nc/tc/com/iluwatar/CastleTest.java @@ -0,0 +1,45 @@ +package nc.tc.com.iluwatar; + +import java.util.ArrayList; +import java.util.List; + +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; + +import com.yonyou.uat.dbmanagement.DBManage; +import com.yonyou.uat.framework.BaseTestCase; + +public class CastleTest extends BaseTestCase { + Class castle = null; + DBManage dbManage = null; + + @BeforeClass + public void BeforeClass() { + try { + castle = Class.forName("com.iluwatar.Castle"); + } catch (ClassNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @AfterClass + public void AfterClass() { + } + + @BeforeMethod + public void BeforeMethod() { + List tableList = new ArrayList(); + tableList.add("pub_wfexptlog"); + dbManage = new DBManage(); + dbManage.setTableList(tableList); + dbManage.tableExport(); + } + + @AfterMethod + public void AfterMethod() { + dbManage.tableRollBack(); + } +} diff --git a/abstract-factory/src/test/nc/tc/com/iluwatar/ElfArmyTest.java b/abstract-factory/src/test/nc/tc/com/iluwatar/ElfArmyTest.java new file mode 100644 index 000000000000..c55d86fc4893 --- /dev/null +++ b/abstract-factory/src/test/nc/tc/com/iluwatar/ElfArmyTest.java @@ -0,0 +1,67 @@ +package nc.tc.com.iluwatar; +import org.testng.*; +import java.util.ArrayList; +import java.io.IOException; +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; +import java.util.Iterator; +import java.util.Map; +import java.util.List; +import java.util.HashMap; +import java.io.Serializable; +import jxl.read.biff.BiffException; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import com.yonyou.uat.util.ExcelDataProvider; +import com.yonyou.uat.util.DBDataProvider; +import com.yonyou.uat.dbmanagement.DBManage; +import com.yonyou.uat.dbmanagement.QueryInfoVO; +import com.iluwatar.ElfArmy; +import com.yonyou.uat.framework.BaseTestCase; +import java.lang.String; +public class ElfArmyTest extends BaseTestCase { + ElfArmy elfArmy=null; + DBManage dbManage=null; + + @BeforeClass + public void BeforeClass(){ + elfArmy=new ElfArmy(); + } + + @AfterClass + public void AfterClass(){ + } + + @BeforeMethod + public void BeforeMethod(){ + List tableList=new ArrayList(); + tableList.add("pub_wfexptlog"); + dbManage=new DBManage(); + dbManage.setTableList(tableList); + dbManage.tableExport(); + } + + @AfterMethod + public void AfterMethod(){ + dbManage.tableRollBack(); + } + + @Test(description="",dependsOnMethods={},groups="",timeOut=100000,dataProvider="dp") + public void toString( Map> dp){ + + //Construct method parameters + + //Invoke tested method + String retObj=""; + retObj=elfArmy.toString(); + + //Verify result is ok + + //Verify Object1 == Object2 + Assert.assertEquals(retObj,"expectValue"); + } +} diff --git a/abstract-factory/src/test/nc/tc/com/iluwatar/ElfCastleTest.java b/abstract-factory/src/test/nc/tc/com/iluwatar/ElfCastleTest.java new file mode 100644 index 000000000000..a97cd700445a --- /dev/null +++ b/abstract-factory/src/test/nc/tc/com/iluwatar/ElfCastleTest.java @@ -0,0 +1,67 @@ +package nc.tc.com.iluwatar; +import org.testng.*; +import java.util.ArrayList; +import java.io.IOException; +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; +import java.util.Iterator; +import java.util.Map; +import java.util.List; +import java.util.HashMap; +import java.io.Serializable; +import jxl.read.biff.BiffException; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import com.yonyou.uat.util.ExcelDataProvider; +import com.yonyou.uat.util.DBDataProvider; +import com.yonyou.uat.dbmanagement.DBManage; +import com.yonyou.uat.dbmanagement.QueryInfoVO; +import com.iluwatar.ElfCastle; +import com.yonyou.uat.framework.BaseTestCase; +import java.lang.String; +public class ElfCastleTest extends BaseTestCase { + ElfCastle elfCastle=null; + DBManage dbManage=null; + + @BeforeClass + public void BeforeClass(){ + elfCastle=new ElfCastle(); + } + + @AfterClass + public void AfterClass(){ + } + + @BeforeMethod + public void BeforeMethod(){ + List tableList=new ArrayList(); + tableList.add("pub_wfexptlog"); + dbManage=new DBManage(); + dbManage.setTableList(tableList); + dbManage.tableExport(); + } + + @AfterMethod + public void AfterMethod(){ + dbManage.tableRollBack(); + } + + @Test(description="",dependsOnMethods={},groups="",timeOut=100000,dataProvider="dp") + public void toString( Map> dp){ + + //Construct method parameters + + //Invoke tested method + String retObj=""; + retObj=elfCastle.toString(); + + //Verify result is ok + + //Verify Object1 == Object2 + Assert.assertEquals(retObj,"expectValue"); + } +} diff --git a/abstract-factory/src/test/nc/tc/com/iluwatar/ElfKingTest.java b/abstract-factory/src/test/nc/tc/com/iluwatar/ElfKingTest.java new file mode 100644 index 000000000000..4a9c99b67a1e --- /dev/null +++ b/abstract-factory/src/test/nc/tc/com/iluwatar/ElfKingTest.java @@ -0,0 +1,67 @@ +package nc.tc.com.iluwatar; +import org.testng.*; +import java.util.ArrayList; +import java.io.IOException; +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; +import java.util.Iterator; +import java.util.Map; +import java.util.List; +import java.util.HashMap; +import java.io.Serializable; +import jxl.read.biff.BiffException; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import com.yonyou.uat.util.ExcelDataProvider; +import com.yonyou.uat.util.DBDataProvider; +import com.yonyou.uat.dbmanagement.DBManage; +import com.yonyou.uat.dbmanagement.QueryInfoVO; +import com.iluwatar.ElfKing; +import com.yonyou.uat.framework.BaseTestCase; +import java.lang.String; +public class ElfKingTest extends BaseTestCase { + ElfKing elfKing=null; + DBManage dbManage=null; + + @BeforeClass + public void BeforeClass(){ + elfKing=new ElfKing(); + } + + @AfterClass + public void AfterClass(){ + } + + @BeforeMethod + public void BeforeMethod(){ + List tableList=new ArrayList(); + tableList.add("pub_wfexptlog"); + dbManage=new DBManage(); + dbManage.setTableList(tableList); + dbManage.tableExport(); + } + + @AfterMethod + public void AfterMethod(){ + dbManage.tableRollBack(); + } + + @Test(description="",dependsOnMethods={},groups="",timeOut=100000,dataProvider="dp") + public void toString( Map> dp){ + + //Construct method parameters + + //Invoke tested method + String retObj=""; + retObj=elfKing.toString(); + + //Verify result is ok + + //Verify Object1 == Object2 + Assert.assertEquals(retObj,"expectValue"); + } +} diff --git a/abstract-factory/src/test/nc/tc/com/iluwatar/ElfKingdomFactoryTest.java b/abstract-factory/src/test/nc/tc/com/iluwatar/ElfKingdomFactoryTest.java new file mode 100644 index 000000000000..7e4275e1ffd0 --- /dev/null +++ b/abstract-factory/src/test/nc/tc/com/iluwatar/ElfKingdomFactoryTest.java @@ -0,0 +1,99 @@ +package nc.tc.com.iluwatar; +import org.testng.*; +import java.util.ArrayList; +import java.io.IOException; +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; +import java.util.Iterator; +import java.util.Map; +import java.util.List; +import java.util.HashMap; +import java.io.Serializable; +import jxl.read.biff.BiffException; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import com.yonyou.uat.util.ExcelDataProvider; +import com.yonyou.uat.util.DBDataProvider; +import com.yonyou.uat.dbmanagement.DBManage; +import com.yonyou.uat.dbmanagement.QueryInfoVO; +import com.iluwatar.ElfKingdomFactory; +import com.yonyou.uat.framework.BaseTestCase; +import com.iluwatar.Castle; +import com.iluwatar.King; +import com.iluwatar.Army; +public class ElfKingdomFactoryTest extends BaseTestCase { + ElfKingdomFactory elfKingdomFactory=null; + DBManage dbManage=null; + + @BeforeClass + public void BeforeClass(){ + elfKingdomFactory=new ElfKingdomFactory(); + } + + @AfterClass + public void AfterClass(){ + } + + @BeforeMethod + public void BeforeMethod(){ + List tableList=new ArrayList(); + tableList.add("pub_wfexptlog"); + dbManage=new DBManage(); + dbManage.setTableList(tableList); + dbManage.tableExport(); + } + + @AfterMethod + public void AfterMethod(){ + dbManage.tableRollBack(); + } + + @Test(description="",dependsOnMethods={},groups="",timeOut=100000,dataProvider="dp") + public void createCastle( Map> dp){ + + //Construct method parameters + + //Invoke tested method + Castle retObj=null; + retObj=elfKingdomFactory.createCastle(); + + //Verify result is ok + + //Verify Object1 == Object2 + Assert.assertNotNull(retObj); + } + + @Test(description="",dependsOnMethods={},groups="",timeOut=100000,dataProvider="dp") + public void createKing( Map> dp){ + + //Construct method parameters + + //Invoke tested method + King retObj=null; + retObj=elfKingdomFactory.createKing(); + + //Verify result is ok + + //Verify Object1 == Object2 + Assert.assertNotNull(retObj); + } + + @Test(description="",dependsOnMethods={},groups="",timeOut=100000,dataProvider="dp") + public void createArmy( Map> dp){ + + //Construct method parameters + + //Invoke tested method + Army retObj=null; + retObj=elfKingdomFactory.createArmy(); + + //Verify result is ok + + //Verify Object1 == Object2 + Assert.assertNotNull(retObj); + } +} diff --git a/abstract-factory/src/test/nc/tc/com/iluwatar/KingTest.java b/abstract-factory/src/test/nc/tc/com/iluwatar/KingTest.java new file mode 100644 index 000000000000..4bea14683e7d --- /dev/null +++ b/abstract-factory/src/test/nc/tc/com/iluwatar/KingTest.java @@ -0,0 +1,45 @@ +package nc.tc.com.iluwatar; + +import java.util.ArrayList; +import java.util.List; + +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; + +import com.yonyou.uat.dbmanagement.DBManage; +import com.yonyou.uat.framework.BaseTestCase; + +public class KingTest extends BaseTestCase { + Class king = null; + DBManage dbManage = null; + + @BeforeClass + public void BeforeClass() { + try { + king = Class.forName("com.iluwatar.King"); + } catch (ClassNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @AfterClass + public void AfterClass() { + } + + @BeforeMethod + public void BeforeMethod() { + List tableList = new ArrayList(); + tableList.add("pub_wfexptlog"); + dbManage = new DBManage(); + dbManage.setTableList(tableList); + dbManage.tableExport(); + } + + @AfterMethod + public void AfterMethod() { + dbManage.tableRollBack(); + } +} diff --git a/abstract-factory/src/test/nc/tc/com/iluwatar/KingdomFactoryTest.java b/abstract-factory/src/test/nc/tc/com/iluwatar/KingdomFactoryTest.java new file mode 100644 index 000000000000..6d10383db28e --- /dev/null +++ b/abstract-factory/src/test/nc/tc/com/iluwatar/KingdomFactoryTest.java @@ -0,0 +1,45 @@ +package nc.tc.com.iluwatar; + +import java.util.ArrayList; +import java.util.List; + +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; + +import com.yonyou.uat.dbmanagement.DBManage; +import com.yonyou.uat.framework.BaseTestCase; + +public class KingdomFactoryTest extends BaseTestCase { + Class kingdomFactory = null; + DBManage dbManage = null; + + @BeforeClass + public void BeforeClass() { + try { + kingdomFactory = Class.forName("com.iluwatar.KingdomFactory"); + } catch (ClassNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @AfterClass + public void AfterClass() { + } + + @BeforeMethod + public void BeforeMethod() { + List tableList = new ArrayList(); + tableList.add("pub_wfexptlog"); + dbManage = new DBManage(); + dbManage.setTableList(tableList); + dbManage.tableExport(); + } + + @AfterMethod + public void AfterMethod() { + dbManage.tableRollBack(); + } +} diff --git a/abstract-factory/src/test/nc/tc/com/iluwatar/OrcArmyTest.java b/abstract-factory/src/test/nc/tc/com/iluwatar/OrcArmyTest.java new file mode 100644 index 000000000000..464056719361 --- /dev/null +++ b/abstract-factory/src/test/nc/tc/com/iluwatar/OrcArmyTest.java @@ -0,0 +1,67 @@ +package nc.tc.com.iluwatar; +import org.testng.*; +import java.util.ArrayList; +import java.io.IOException; +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; +import java.util.Iterator; +import java.util.Map; +import java.util.List; +import java.util.HashMap; +import java.io.Serializable; +import jxl.read.biff.BiffException; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import com.yonyou.uat.util.ExcelDataProvider; +import com.yonyou.uat.util.DBDataProvider; +import com.yonyou.uat.dbmanagement.DBManage; +import com.yonyou.uat.dbmanagement.QueryInfoVO; +import com.iluwatar.OrcArmy; +import com.yonyou.uat.framework.BaseTestCase; +import java.lang.String; +public class OrcArmyTest extends BaseTestCase { + OrcArmy orcArmy=null; + DBManage dbManage=null; + + @BeforeClass + public void BeforeClass(){ + orcArmy=new OrcArmy(); + } + + @AfterClass + public void AfterClass(){ + } + + @BeforeMethod + public void BeforeMethod(){ + List tableList=new ArrayList(); + tableList.add("pub_wfexptlog"); + dbManage=new DBManage(); + dbManage.setTableList(tableList); + dbManage.tableExport(); + } + + @AfterMethod + public void AfterMethod(){ + dbManage.tableRollBack(); + } + + @Test(description="",dependsOnMethods={},groups="",timeOut=100000,dataProvider="dp") + public void toString( Map> dp){ + + //Construct method parameters + + //Invoke tested method + String retObj=""; + retObj=orcArmy.toString(); + + //Verify result is ok + + //Verify Object1 == Object2 + Assert.assertEquals(retObj,"expectValue"); + } +} diff --git a/abstract-factory/src/test/nc/tc/com/iluwatar/OrcCastleTest.java b/abstract-factory/src/test/nc/tc/com/iluwatar/OrcCastleTest.java new file mode 100644 index 000000000000..d4a46e49ed1b --- /dev/null +++ b/abstract-factory/src/test/nc/tc/com/iluwatar/OrcCastleTest.java @@ -0,0 +1,67 @@ +package nc.tc.com.iluwatar; +import org.testng.*; +import java.util.ArrayList; +import java.io.IOException; +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; +import java.util.Iterator; +import java.util.Map; +import java.util.List; +import java.util.HashMap; +import java.io.Serializable; +import jxl.read.biff.BiffException; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import com.yonyou.uat.util.ExcelDataProvider; +import com.yonyou.uat.util.DBDataProvider; +import com.yonyou.uat.dbmanagement.DBManage; +import com.yonyou.uat.dbmanagement.QueryInfoVO; +import com.iluwatar.OrcCastle; +import com.yonyou.uat.framework.BaseTestCase; +import java.lang.String; +public class OrcCastleTest extends BaseTestCase { + OrcCastle orcCastle=null; + DBManage dbManage=null; + + @BeforeClass + public void BeforeClass(){ + orcCastle=new OrcCastle(); + } + + @AfterClass + public void AfterClass(){ + } + + @BeforeMethod + public void BeforeMethod(){ + List tableList=new ArrayList(); + tableList.add("pub_wfexptlog"); + dbManage=new DBManage(); + dbManage.setTableList(tableList); + dbManage.tableExport(); + } + + @AfterMethod + public void AfterMethod(){ + dbManage.tableRollBack(); + } + + @Test(description="",dependsOnMethods={},groups="",timeOut=100000,dataProvider="dp") + public void toString( Map> dp){ + + //Construct method parameters + + //Invoke tested method + String retObj=""; + retObj=orcCastle.toString(); + + //Verify result is ok + + //Verify Object1 == Object2 + Assert.assertEquals(retObj,"expectValue"); + } +} diff --git a/abstract-factory/src/test/nc/tc/com/iluwatar/OrcKingTest.java b/abstract-factory/src/test/nc/tc/com/iluwatar/OrcKingTest.java new file mode 100644 index 000000000000..7436f388ab91 --- /dev/null +++ b/abstract-factory/src/test/nc/tc/com/iluwatar/OrcKingTest.java @@ -0,0 +1,67 @@ +package nc.tc.com.iluwatar; +import org.testng.*; +import java.util.ArrayList; +import java.io.IOException; +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; +import java.util.Iterator; +import java.util.Map; +import java.util.List; +import java.util.HashMap; +import java.io.Serializable; +import jxl.read.biff.BiffException; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import com.yonyou.uat.util.ExcelDataProvider; +import com.yonyou.uat.util.DBDataProvider; +import com.yonyou.uat.dbmanagement.DBManage; +import com.yonyou.uat.dbmanagement.QueryInfoVO; +import com.iluwatar.OrcKing; +import com.yonyou.uat.framework.BaseTestCase; +import java.lang.String; +public class OrcKingTest extends BaseTestCase { + OrcKing orcKing=null; + DBManage dbManage=null; + + @BeforeClass + public void BeforeClass(){ + orcKing=new OrcKing(); + } + + @AfterClass + public void AfterClass(){ + } + + @BeforeMethod + public void BeforeMethod(){ + List tableList=new ArrayList(); + tableList.add("pub_wfexptlog"); + dbManage=new DBManage(); + dbManage.setTableList(tableList); + dbManage.tableExport(); + } + + @AfterMethod + public void AfterMethod(){ + dbManage.tableRollBack(); + } + + @Test(description="",dependsOnMethods={},groups="",timeOut=100000,dataProvider="dp") + public void toString( Map> dp){ + + //Construct method parameters + + //Invoke tested method + String retObj=""; + retObj=orcKing.toString(); + + //Verify result is ok + + //Verify Object1 == Object2 + Assert.assertEquals(retObj,"expectValue"); + } +} diff --git a/abstract-factory/src/test/nc/tc/com/iluwatar/OrcKingdomFactoryTest.java b/abstract-factory/src/test/nc/tc/com/iluwatar/OrcKingdomFactoryTest.java new file mode 100644 index 000000000000..b0b3507eda01 --- /dev/null +++ b/abstract-factory/src/test/nc/tc/com/iluwatar/OrcKingdomFactoryTest.java @@ -0,0 +1,99 @@ +package nc.tc.com.iluwatar; +import org.testng.*; +import java.util.ArrayList; +import java.io.IOException; +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; +import java.util.Iterator; +import java.util.Map; +import java.util.List; +import java.util.HashMap; +import java.io.Serializable; +import jxl.read.biff.BiffException; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.AfterClass; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import com.yonyou.uat.util.ExcelDataProvider; +import com.yonyou.uat.util.DBDataProvider; +import com.yonyou.uat.dbmanagement.DBManage; +import com.yonyou.uat.dbmanagement.QueryInfoVO; +import com.iluwatar.OrcKingdomFactory; +import com.yonyou.uat.framework.BaseTestCase; +import com.iluwatar.Castle; +import com.iluwatar.King; +import com.iluwatar.Army; +public class OrcKingdomFactoryTest extends BaseTestCase { + OrcKingdomFactory orcKingdomFactory=null; + DBManage dbManage=null; + + @BeforeClass + public void BeforeClass(){ + orcKingdomFactory=new OrcKingdomFactory(); + } + + @AfterClass + public void AfterClass(){ + } + + @BeforeMethod + public void BeforeMethod(){ + List tableList=new ArrayList(); + tableList.add("pub_wfexptlog"); + dbManage=new DBManage(); + dbManage.setTableList(tableList); + dbManage.tableExport(); + } + + @AfterMethod + public void AfterMethod(){ + dbManage.tableRollBack(); + } + + @Test(description="",dependsOnMethods={},groups="",timeOut=100000,dataProvider="dp") + public void createCastle( Map> dp){ + + //Construct method parameters + + //Invoke tested method + Castle retObj=null; + retObj=orcKingdomFactory.createCastle(); + + //Verify result is ok + + //Verify Object1 == Object2 + Assert.assertNotNull(retObj); + } + + @Test(description="",dependsOnMethods={},groups="",timeOut=100000,dataProvider="dp") + public void createKing( Map> dp){ + + //Construct method parameters + + //Invoke tested method + King retObj=null; + retObj=orcKingdomFactory.createKing(); + + //Verify result is ok + + //Verify Object1 == Object2 + Assert.assertNotNull(retObj); + } + + @Test(description="",dependsOnMethods={},groups="",timeOut=100000,dataProvider="dp") + public void createArmy( Map> dp){ + + //Construct method parameters + + //Invoke tested method + Army retObj=null; + retObj=orcKingdomFactory.createArmy(); + + //Verify result is ok + + //Verify Object1 == Object2 + Assert.assertNotNull(retObj); + } +} diff --git a/abstract-factory/src/test/resources/configure/UATApplicationContext.xml b/abstract-factory/src/test/resources/configure/UATApplicationContext.xml new file mode 100644 index 000000000000..818ef52f909e --- /dev/null +++ b/abstract-factory/src/test/resources/configure/UATApplicationContext.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/abstract-factory/src/test/resources/configure/prop.xml b/abstract-factory/src/test/resources/configure/prop.xml new file mode 100644 index 000000000000..c7afbd60d256 --- /dev/null +++ b/abstract-factory/src/test/resources/configure/prop.xml @@ -0,0 +1,133 @@ + + + false + + + $JAVA_HOME + server + -server -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -Duser.timezone=GMT+8 -Djava.awt.headless=true + 8005 + + 80 + + + + true + + StartTomcat + nc.bs.tomcat.startup.BootStrapTomcatService + 15 + true + false + start|stop + + + EJB_SERVICE + nc.bs.mw.naming.EJBContainerService + 15 + true + false + start|stop + + nc.bs.mw.tran.IerpTransactionManagerProxy + nc.bs.mw.tran.IerpUserTransaction + nc.bs.mw.tran.IerpTransactionManager + nc.bs.mw.sql.UFSqlObject + nc.bs.mw.ejbsql.IerpXADataSource + + design + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + baptest807 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + bafi + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + bafi + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + iufo6103312 + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + iufo6103312 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + batm + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + batm + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + bap8 + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + bap8 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + foodmart + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + foodmart + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + \ No newline at end of file diff --git a/abstract-factory/src/test/resources/configure/test_data_source.xml b/abstract-factory/src/test/resources/configure/test_data_source.xml new file mode 100644 index 000000000000..2e45d5ee869c --- /dev/null +++ b/abstract-factory/src/test/resources/configure/test_data_source.xml @@ -0,0 +1,19 @@ + + + + design + Z + jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive + sa + sasasa + com.microsoft.sqlserver.jdbc.SQLServerDriver + SQLSERVER2008 + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + \ No newline at end of file diff --git a/abstract-factory/src/test/resources/configure/uat.properties b/abstract-factory/src/test/resources/configure/uat.properties new file mode 100644 index 000000000000..f0b076c2de77 --- /dev/null +++ b/abstract-factory/src/test/resources/configure/uat.properties @@ -0,0 +1,33 @@ +#project information +app_name=App Name +app_version=V6.5 + +#Common Configure +##UAPHOME path, USE '/' for path separator +nc_home= +##verify log path, USE '/' for path separator +log_file=debug.log + +# 0 don't print app log information on test result log +# 1 only print app log information on test result log for fail testcase +# 2 print application log information on test result log for all testcase +uatlog_switch=2 + +#dataFile Configure ,backup database data and restore database data +data_backup_file = c:/temp/datafile.xml + +#default datasource +default_datasource=design + +#BusinessServer configure +serverstart=off +login_username= +login_password= + +#resources settings +nc_configure_dir=resources/configure/ +testdata_config_dir=resources/data/conf/ +testdata_springfile_dir=resources/data/spring/ +testdata_objectfile_dir=resources/data/object/ +testdata_excelfile_dir=resources/data/excel/ +testdata_backup_dir=resources/data/backup/ diff --git a/abstract-factory/src/test/resources/configure/uat_spring_conf.xml b/abstract-factory/src/test/resources/configure/uat_spring_conf.xml new file mode 100644 index 000000000000..169a91514700 --- /dev/null +++ b/abstract-factory/src/test/resources/configure/uat_spring_conf.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/abstract-factory/src/test/resources/data/backup/README b/abstract-factory/src/test/resources/data/backup/README new file mode 100644 index 000000000000..a5b99861a7dc --- /dev/null +++ b/abstract-factory/src/test/resources/data/backup/README @@ -0,0 +1 @@ +ļ \ No newline at end of file diff --git a/abstract-factory/src/test/resources/data/config/README b/abstract-factory/src/test/resources/data/config/README new file mode 100644 index 000000000000..4849e2aef709 --- /dev/null +++ b/abstract-factory/src/test/resources/data/config/README @@ -0,0 +1 @@ +Objectļ \ No newline at end of file diff --git a/abstract-factory/src/test/resources/data/excel/AppTest.xls b/abstract-factory/src/test/resources/data/excel/AppTest.xls new file mode 100644 index 0000000000000000000000000000000000000000..4aa3a04a78f7919e9aa2c2b3f11a09ec47c14630 GIT binary patch literal 4608 zcmeHKOKVe65dQA%jeXeGG_6&uwlP&~+Ndokh(((UE<^+=h=P?gZGr}EDrsD}GCsOf z5Zth+tsxy?=66pIp2GGWf+n>lCZ%sDgMym{R; zd-rkM92QVNs_@gU#VQYOc*gKUWrF>*ZCgauWDYCz4@F=I6Z~Zn#37{FXK+cb^0%oK zKEpk3(fe3t2hp3ZaTHF_dIsk(s(zeXX4TT70L*#&;>Xfji_xoj`->$jLrki>=U<8a zm02mR{ipV8Yb23?{hHm$eLjbd?F9yg5ZgZ@$~rFV0q}E`Vcq7hy8}d z*1#QNjo6@m@!p9wYx_{Oo;$h-;H=ST4DWlCL+~4Jn!|hfFWHZ4Z2G`HuI}pvxN<2(ZU-A zzS<1OJWU4$mrGXsiz`?jm-n`mekojbT}uCd#tnIP^W?^}$BDx?SK#8|5_qHp-dzH( zU4-8@E%6E7`{$5ZJkX6jn`s6hk9 zGRb&0c_fuSlb9I4K?Q@q2P{nNt#vF*@(dgj$#?WK2W2B*HIPkCX2;@_$yh4ESt2<( zmPuX6rY6#SgncZ)A`g0C8+BYhMqlc=K^@tt(|$Z_cvU^axzy>^rt`WvoHzfGf(ET^ z^=uPZqvIx(`?=@$`=8$)9X&P>Q@mU89&N8Gl2f;3M_?PH$9jk>l+0LSiU8x?W_C2BP$k4`daLnvyjQA}iB?1x4GJd2Ps zGdL4HnMp6_bY~)~;_N-Gj<9dRCLAyWcp^bVRGK_(&TDcin+UBW*oS$lO0Y`=Tca7( z)@e!v+xzuY8J9Z(POd@oMY3JWpQMSDJt<(dWJw8@Ev-cj>?MyS7bSa}$N_RQ*{u+* z9Iqp@~ literal 0 HcmV?d00001 diff --git a/abstract-factory/src/test/resources/data/excel/AppTest.xls_2014_09_30_141708 b/abstract-factory/src/test/resources/data/excel/AppTest.xls_2014_09_30_141708 new file mode 100644 index 0000000000000000000000000000000000000000..4aa3a04a78f7919e9aa2c2b3f11a09ec47c14630 GIT binary patch literal 4608 zcmeHKOKVe65dQA%jeXeGG_6&uwlP&~+Ndokh(((UE<^+=h=P?gZGr}EDrsD}GCsOf z5Zth+tsxy?=66pIp2GGWf+n>lCZ%sDgMym{R; zd-rkM92QVNs_@gU#VQYOc*gKUWrF>*ZCgauWDYCz4@F=I6Z~Zn#37{FXK+cb^0%oK zKEpk3(fe3t2hp3ZaTHF_dIsk(s(zeXX4TT70L*#&;>Xfji_xoj`->$jLrki>=U<8a zm02mR{ipV8Yb23?{hHm$eLjbd?F9yg5ZgZ@$~rFV0q}E`Vcq7hy8}d z*1#QNjo6@m@!p9wYx_{Oo;$h-;H=ST4DWlCL+~4Jn!|hfFWHZ4Z2G`HuI}pvxN<2(ZU-A zzS<1OJWU4$mrGXsiz`?jm-n`mekojbT}uCd#tnIP^W?^}$BDx?SK#8|5_qHp-dzH( zU4-8@E%6E7`{$5ZJkX6jn`s6hk9 zGRb&0c_fuSlb9I4K?Q@q2P{nNt#vF*@(dgj$#?WK2W2B*HIPkCX2;@_$yh4ESt2<( zmPuX6rY6#SgncZ)A`g0C8+BYhMqlc=K^@tt(|$Z_cvU^axzy>^rt`WvoHzfGf(ET^ z^=uPZqvIx(`?=@$`=8$)9X&P>Q@mU89&N8Gl2f;3M_?PH$9jk>l+0LSiU8x?W_C2BP$k4`daLnvyjQA}iB?1x4GJd2Ps zGdL4HnMp6_bY~)~;_N-Gj<9dRCLAyWcp^bVRGK_(&TDcin+UBW*oS$lO0Y`=Tca7( z)@e!v+xzuY8J9Z(POd@oMY3JWpQMSDJt<(dWJw8@Ev-cj>?MyS7bSa}$N_RQ*{u+* z9Iqp@~ literal 0 HcmV?d00001 diff --git a/abstract-factory/src/test/resources/data/excel/ArmyTest.xls b/abstract-factory/src/test/resources/data/excel/ArmyTest.xls new file mode 100644 index 0000000000000000000000000000000000000000..6bbc76a94fc0514eef3378bc43a9a82907f79546 GIT binary patch literal 3584 zcmeHJOKTHR6#gceynMtwTEz%;NEDMaY6=QsC~XCIuIfU;N=#`WQmqo|!j-dery#g> z;~(&`awDQU7lML2SFOK6!G(1E&Yj%Mq;^VzBBb#Q=iYO_d+s^sp8J|lAJc13U*^`a ziE0RA!$~0O!wsK|6kxI~*oNac(iI_7{7*xafqC5Gw+ajAvBJ8IyRwvh(|$w@J>8!D zv5f`Mvt_f8F421%%UD!#EW6+UWd@LG)cku(<0zA2ochTKksAWxly|)vsb9hC`mpiE57x zHfiQ4;;=UB^jdNiD=6a_P%oA(9gfIF)hN|O&L7V+$a-A*lIRcrylVC#^CqNP_=o02di^A;3s8G4sVb+ zcCqPy2ZlwK8ObgVljVO-o<(^BVq}?Pf-G~}P2NM^OO{OSBlG1znw%kL$#UL!zp4Mh XVVVD^$0`5rdi_P#JnDHFmHGbyyCo?j literal 0 HcmV?d00001 diff --git a/abstract-factory/src/test/resources/data/excel/ArmyTest.xls_2014_09_30_141708 b/abstract-factory/src/test/resources/data/excel/ArmyTest.xls_2014_09_30_141708 new file mode 100644 index 0000000000000000000000000000000000000000..6bbc76a94fc0514eef3378bc43a9a82907f79546 GIT binary patch literal 3584 zcmeHJOKTHR6#gceynMtwTEz%;NEDMaY6=QsC~XCIuIfU;N=#`WQmqo|!j-dery#g> z;~(&`awDQU7lML2SFOK6!G(1E&Yj%Mq;^VzBBb#Q=iYO_d+s^sp8J|lAJc13U*^`a ziE0RA!$~0O!wsK|6kxI~*oNac(iI_7{7*xafqC5Gw+ajAvBJ8IyRwvh(|$w@J>8!D zv5f`Mvt_f8F421%%UD!#EW6+UWd@LG)cku(<0zA2ochTKksAWxly|)vsb9hC`mpiE57x zHfiQ4;;=UB^jdNiD=6a_P%oA(9gfIF)hN|O&L7V+$a-A*lIRcrylVC#^CqNP_=o02di^A;3s8G4sVb+ zcCqPy2ZlwK8ObgVljVO-o<(^BVq}?Pf-G~}P2NM^OO{OSBlG1znw%kL$#UL!zp4Mh XVVVD^$0`5rdi_P#JnDHFmHGbyyCo?j literal 0 HcmV?d00001 diff --git a/abstract-factory/src/test/resources/data/excel/CastleTest.xls b/abstract-factory/src/test/resources/data/excel/CastleTest.xls new file mode 100644 index 0000000000000000000000000000000000000000..6bbc76a94fc0514eef3378bc43a9a82907f79546 GIT binary patch literal 3584 zcmeHJOKTHR6#gceynMtwTEz%;NEDMaY6=QsC~XCIuIfU;N=#`WQmqo|!j-dery#g> z;~(&`awDQU7lML2SFOK6!G(1E&Yj%Mq;^VzBBb#Q=iYO_d+s^sp8J|lAJc13U*^`a ziE0RA!$~0O!wsK|6kxI~*oNac(iI_7{7*xafqC5Gw+ajAvBJ8IyRwvh(|$w@J>8!D zv5f`Mvt_f8F421%%UD!#EW6+UWd@LG)cku(<0zA2ochTKksAWxly|)vsb9hC`mpiE57x zHfiQ4;;=UB^jdNiD=6a_P%oA(9gfIF)hN|O&L7V+$a-A*lIRcrylVC#^CqNP_=o02di^A;3s8G4sVb+ zcCqPy2ZlwK8ObgVljVO-o<(^BVq}?Pf-G~}P2NM^OO{OSBlG1znw%kL$#UL!zp4Mh XVVVD^$0`5rdi_P#JnDHFmHGbyyCo?j literal 0 HcmV?d00001 diff --git a/abstract-factory/src/test/resources/data/excel/CastleTest.xls_2014_09_30_141708 b/abstract-factory/src/test/resources/data/excel/CastleTest.xls_2014_09_30_141708 new file mode 100644 index 0000000000000000000000000000000000000000..6bbc76a94fc0514eef3378bc43a9a82907f79546 GIT binary patch literal 3584 zcmeHJOKTHR6#gceynMtwTEz%;NEDMaY6=QsC~XCIuIfU;N=#`WQmqo|!j-dery#g> z;~(&`awDQU7lML2SFOK6!G(1E&Yj%Mq;^VzBBb#Q=iYO_d+s^sp8J|lAJc13U*^`a ziE0RA!$~0O!wsK|6kxI~*oNac(iI_7{7*xafqC5Gw+ajAvBJ8IyRwvh(|$w@J>8!D zv5f`Mvt_f8F421%%UD!#EW6+UWd@LG)cku(<0zA2ochTKksAWxly|)vsb9hC`mpiE57x zHfiQ4;;=UB^jdNiD=6a_P%oA(9gfIF)hN|O&L7V+$a-A*lIRcrylVC#^CqNP_=o02di^A;3s8G4sVb+ zcCqPy2ZlwK8ObgVljVO-o<(^BVq}?Pf-G~}P2NM^OO{OSBlG1znw%kL$#UL!zp4Mh XVVVD^$0`5rdi_P#JnDHFmHGbyyCo?j literal 0 HcmV?d00001 diff --git a/abstract-factory/src/test/resources/data/excel/ElfArmyTest.xls b/abstract-factory/src/test/resources/data/excel/ElfArmyTest.xls new file mode 100644 index 0000000000000000000000000000000000000000..3cd3e9710e6d445506c08fb181c5dbbc20bee5cb GIT binary patch literal 4096 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 AHvj+t literal 0 HcmV?d00001 diff --git a/abstract-factory/src/test/resources/data/excel/ElfKingdomFactoryTest.xls_2014_09_30_141708 b/abstract-factory/src/test/resources/data/excel/ElfKingdomFactoryTest.xls_2014_09_30_141708 new file mode 100644 index 0000000000000000000000000000000000000000..94630e96280217c43407a54bb8b5f471a919dbd6 GIT binary patch literal 5120 zcmeHLOKVe65dQ9M(x8sUMy;SwEZS6YC4vZ|pb}#fH1tUt7hM^jD+R%= zn=V|q@v+f`B6cSzD7p|`RsVsY;6lBAGdH)nu}!h~Ldk?Vk8kFjnKS3yIfp!d);KeD zr~NIyqdrvNt5t(a7jC%P@Bvlq3-;BrED=?c*(}pP6oLI1<1dQHn6vi9kNLIcqW--7xst^pCe@wwFUJ1j ztd!RNS^G8B{E#cXcJTl^7j48Td1_Q+-Gn;=^`B zyfTPfBR8N;J>$+3ZPN0V>OHWv;m1j%!8o$*VW^iHGV+iaQ@zVt2DNNpY2coYd85c? zEW=~!Tc@w&kFpm7nRH_K7YaH&?eNkLf@_1JXeiVZkMxC|cBI3znvrfVk{;flN*;Bq z1ekbN6jV0$6wSddr|D!e4t%duJd>>$MHkis@o-nbaYx!=?L_*d9o!J4lkspY&WX1o zf*#SQ&+Z}GEsWA`(ZDT;Vw1~|?RLSIxZ{}X?=KkKj&5)p-3FbZE}Qw$j@iNlGic_H z0v|1gW0oET1eZ-#{DUJ{7?<-lpMEJ^W}Q#}f5r_tcC+Nfv)hitCr9AmkrH^c1m0Bw zubG2iH9hd|kOd6;CJGOQt3UGwJbcdTf;Xo0+3U9&o`HjaK6#os~)CHnUT?5BKYzR!y@n zNwdzhk3XB5;-t1HsAtdMNE1mc)pn!GeVp_2jrTA19^cm=SG-H{ZY|F$lGBHt%mj2Y zyqpndD4F(%Ev7b{Q|6k7O*cG0dOrscF$l>^rR=Xtkda%Eq~=DlpWH-t(tiuvt>oq8HZtF{@?d3(l`kCV zAg?9|$ZN(!-0P_ri AHvj+t literal 0 HcmV?d00001 diff --git a/abstract-factory/src/test/resources/data/excel/KingTest.xls b/abstract-factory/src/test/resources/data/excel/KingTest.xls new file mode 100644 index 0000000000000000000000000000000000000000..6bbc76a94fc0514eef3378bc43a9a82907f79546 GIT binary patch literal 3584 zcmeHJOKTHR6#gceynMtwTEz%;NEDMaY6=QsC~XCIuIfU;N=#`WQmqo|!j-dery#g> z;~(&`awDQU7lML2SFOK6!G(1E&Yj%Mq;^VzBBb#Q=iYO_d+s^sp8J|lAJc13U*^`a ziE0RA!$~0O!wsK|6kxI~*oNac(iI_7{7*xafqC5Gw+ajAvBJ8IyRwvh(|$w@J>8!D zv5f`Mvt_f8F421%%UD!#EW6+UWd@LG)cku(<0zA2ochTKksAWxly|)vsb9hC`mpiE57x zHfiQ4;;=UB^jdNiD=6a_P%oA(9gfIF)hN|O&L7V+$a-A*lIRcrylVC#^CqNP_=o02di^A;3s8G4sVb+ zcCqPy2ZlwK8ObgVljVO-o<(^BVq}?Pf-G~}P2NM^OO{OSBlG1znw%kL$#UL!zp4Mh XVVVD^$0`5rdi_P#JnDHFmHGbyyCo?j literal 0 HcmV?d00001 diff --git a/abstract-factory/src/test/resources/data/excel/KingTest.xls_2014_09_30_141708 b/abstract-factory/src/test/resources/data/excel/KingTest.xls_2014_09_30_141708 new file mode 100644 index 0000000000000000000000000000000000000000..6bbc76a94fc0514eef3378bc43a9a82907f79546 GIT binary patch literal 3584 zcmeHJOKTHR6#gceynMtwTEz%;NEDMaY6=QsC~XCIuIfU;N=#`WQmqo|!j-dery#g> z;~(&`awDQU7lML2SFOK6!G(1E&Yj%Mq;^VzBBb#Q=iYO_d+s^sp8J|lAJc13U*^`a ziE0RA!$~0O!wsK|6kxI~*oNac(iI_7{7*xafqC5Gw+ajAvBJ8IyRwvh(|$w@J>8!D zv5f`Mvt_f8F421%%UD!#EW6+UWd@LG)cku(<0zA2ochTKksAWxly|)vsb9hC`mpiE57x zHfiQ4;;=UB^jdNiD=6a_P%oA(9gfIF)hN|O&L7V+$a-A*lIRcrylVC#^CqNP_=o02di^A;3s8G4sVb+ zcCqPy2ZlwK8ObgVljVO-o<(^BVq}?Pf-G~}P2NM^OO{OSBlG1znw%kL$#UL!zp4Mh XVVVD^$0`5rdi_P#JnDHFmHGbyyCo?j literal 0 HcmV?d00001 diff --git a/abstract-factory/src/test/resources/data/excel/KingdomFactoryTest.xls b/abstract-factory/src/test/resources/data/excel/KingdomFactoryTest.xls new file mode 100644 index 0000000000000000000000000000000000000000..6bbc76a94fc0514eef3378bc43a9a82907f79546 GIT binary patch literal 3584 zcmeHJOKTHR6#gceynMtwTEz%;NEDMaY6=QsC~XCIuIfU;N=#`WQmqo|!j-dery#g> z;~(&`awDQU7lML2SFOK6!G(1E&Yj%Mq;^VzBBb#Q=iYO_d+s^sp8J|lAJc13U*^`a ziE0RA!$~0O!wsK|6kxI~*oNac(iI_7{7*xafqC5Gw+ajAvBJ8IyRwvh(|$w@J>8!D zv5f`Mvt_f8F421%%UD!#EW6+UWd@LG)cku(<0zA2ochTKksAWxly|)vsb9hC`mpiE57x zHfiQ4;;=UB^jdNiD=6a_P%oA(9gfIF)hN|O&L7V+$a-A*lIRcrylVC#^CqNP_=o02di^A;3s8G4sVb+ zcCqPy2ZlwK8ObgVljVO-o<(^BVq}?Pf-G~}P2NM^OO{OSBlG1znw%kL$#UL!zp4Mh XVVVD^$0`5rdi_P#JnDHFmHGbyyCo?j literal 0 HcmV?d00001 diff --git a/abstract-factory/src/test/resources/data/excel/KingdomFactoryTest.xls_2014_09_30_141708 b/abstract-factory/src/test/resources/data/excel/KingdomFactoryTest.xls_2014_09_30_141708 new file mode 100644 index 0000000000000000000000000000000000000000..6bbc76a94fc0514eef3378bc43a9a82907f79546 GIT binary patch literal 3584 zcmeHJOKTHR6#gceynMtwTEz%;NEDMaY6=QsC~XCIuIfU;N=#`WQmqo|!j-dery#g> z;~(&`awDQU7lML2SFOK6!G(1E&Yj%Mq;^VzBBb#Q=iYO_d+s^sp8J|lAJc13U*^`a ziE0RA!$~0O!wsK|6kxI~*oNac(iI_7{7*xafqC5Gw+ajAvBJ8IyRwvh(|$w@J>8!D zv5f`Mvt_f8F421%%UD!#EW6+UWd@LG)cku(<0zA2ochTKksAWxly|)vsb9hC`mpiE57x zHfiQ4;;=UB^jdNiD=6a_P%oA(9gfIF)hN|O&L7V+$a-A*lIRcrylVC#^CqNP_=o02di^A;3s8G4sVb+ zcCqPy2ZlwK8ObgVljVO-o<(^BVq}?Pf-G~}P2NM^OO{OSBlG1znw%kL$#UL!zp4Mh XVVVD^$0`5rdi_P#JnDHFmHGbyyCo?j literal 0 HcmV?d00001 diff --git a/abstract-factory/src/test/resources/data/excel/OrcArmyTest.xls b/abstract-factory/src/test/resources/data/excel/OrcArmyTest.xls new file mode 100644 index 0000000000000000000000000000000000000000..3cd3e9710e6d445506c08fb181c5dbbc20bee5cb GIT binary patch literal 4096 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 AHvj+t literal 0 HcmV?d00001 diff --git a/abstract-factory/src/test/resources/data/excel/OrcKingdomFactoryTest.xls_2014_09_30_141708 b/abstract-factory/src/test/resources/data/excel/OrcKingdomFactoryTest.xls_2014_09_30_141708 new file mode 100644 index 0000000000000000000000000000000000000000..94630e96280217c43407a54bb8b5f471a919dbd6 GIT binary patch literal 5120 zcmeHLOKVe65dQ9M(x8sUMy;SwEZS6YC4vZ|pb}#fH1tUt7hM^jD+R%= zn=V|q@v+f`B6cSzD7p|`RsVsY;6lBAGdH)nu}!h~Ldk?Vk8kFjnKS3yIfp!d);KeD zr~NIyqdrvNt5t(a7jC%P@Bvlq3-;BrED=?c*(}pP6oLI1<1dQHn6vi9kNLIcqW--7xst^pCe@wwFUJ1j ztd!RNS^G8B{E#cXcJTl^7j48Td1_Q+-Gn;=^`B zyfTPfBR8N;J>$+3ZPN0V>OHWv;m1j%!8o$*VW^iHGV+iaQ@zVt2DNNpY2coYd85c? zEW=~!Tc@w&kFpm7nRH_K7YaH&?eNkLf@_1JXeiVZkMxC|cBI3znvrfVk{;flN*;Bq z1ekbN6jV0$6wSddr|D!e4t%duJd>>$MHkis@o-nbaYx!=?L_*d9o!J4lkspY&WX1o zf*#SQ&+Z}GEsWA`(ZDT;Vw1~|?RLSIxZ{}X?=KkKj&5)p-3FbZE}Qw$j@iNlGic_H z0v|1gW0oET1eZ-#{DUJ{7?<-lpMEJ^W}Q#}f5r_tcC+Nfv)hitCr9AmkrH^c1m0Bw zubG2iH9hd|kOd6;CJGOQt3UGwJbcdTf;Xo0+3U9&o`HjaK6#os~)CHnUT?5BKYzR!y@n zNwdzhk3XB5;-t1HsAtdMNE1mc)pn!GeVp_2jrTA19^cm=SG-H{ZY|F$lGBHt%mj2Y zyqpndD4F(%Ev7b{Q|6k7O*cG0dOrscF$l>^rR=Xtkda%Eq~=DlpWH-t(tiuvt>oq8HZtF{@?d3(l`kCV zAg?9|$ZN(!-0P_ri AHvj+t literal 0 HcmV?d00001 diff --git a/abstract-factory/src/test/resources/data/excel/README b/abstract-factory/src/test/resources/data/excel/README new file mode 100644 index 000000000000..4849e2aef709 --- /dev/null +++ b/abstract-factory/src/test/resources/data/excel/README @@ -0,0 +1 @@ +Objectļ \ No newline at end of file diff --git a/abstract-factory/src/test/resources/data/object/README b/abstract-factory/src/test/resources/data/object/README new file mode 100644 index 000000000000..271c286f3687 --- /dev/null +++ b/abstract-factory/src/test/resources/data/object/README @@ -0,0 +1 @@ +̻ļ \ No newline at end of file diff --git a/abstract-factory/src/test/resources/data/spring/README b/abstract-factory/src/test/resources/data/spring/README new file mode 100644 index 000000000000..961ee7009fd2 --- /dev/null +++ b/abstract-factory/src/test/resources/data/spring/README @@ -0,0 +1 @@ +spring ļ \ No newline at end of file diff --git a/abstract-factory/src/test/resources/temp/README b/abstract-factory/src/test/resources/temp/README new file mode 100644 index 000000000000..ccffba66ffdd --- /dev/null +++ b/abstract-factory/src/test/resources/temp/README @@ -0,0 +1 @@ +ʱļ \ No newline at end of file diff --git a/abstract-factory/src/test/testng.xml b/abstract-factory/src/test/testng.xml new file mode 100644 index 000000000000..1fa0f7461a59 --- /dev/null +++ b/abstract-factory/src/test/testng.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/abstract-factory/test-output/Default suite/Default test.html b/abstract-factory/test-output/Default suite/Default test.html new file mode 100644 index 000000000000..bf78f072e55b --- /dev/null +++ b/abstract-factory/test-output/Default suite/Default test.html @@ -0,0 +1,89 @@ + + +TestNG: Default test + + + + + + + + +

Default test

+ + + + + + + + + + + +
Tests passed/Failed/Skipped:2/0/0
Started on:Tue Sep 30 14:44:17 CST 2014
Total time:11 seconds (11176 ms)
Included groups:
Excluded groups:

+(Hover the method name to see the test class name)

+ + + + + + + + + + + + + + + + + +
PASSED TESTS
Test methodExceptionTime (seconds)Instance
createKingdom
Test class: com.iluwatar.AppTest
0com.iluwatar.AppTest@e2ecc7
main
Test class: com.iluwatar.AppTest
11com.iluwatar.AppTest@e2ecc7

+ + \ No newline at end of file diff --git a/abstract-factory/test-output/Default suite/Default test.xml b/abstract-factory/test-output/Default suite/Default test.xml new file mode 100644 index 000000000000..57a5121ca811 --- /dev/null +++ b/abstract-factory/test-output/Default suite/Default test.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/abstract-factory/test-output/Default suite/testng-failed.xml b/abstract-factory/test-output/Default suite/testng-failed.xml new file mode 100644 index 000000000000..f72314e6397a --- /dev/null +++ b/abstract-factory/test-output/Default suite/testng-failed.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/abstract-factory/test-output/bullet_point.png b/abstract-factory/test-output/bullet_point.png new file mode 100644 index 0000000000000000000000000000000000000000..176e6d5b3d64d032e76c493e5811a1cf839220b5 GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqoCO|{#S9GG!XV7ZFl&wkP>?0v z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0 zx&hVR@^o z&n}1RKn7{UjfWZCs($|cfA#bKkH7!F`St(Z@BiQa{{Qv=|DXRL zz<>l4f3h$#FmN;IfW$y%FtB(Pob+71*X+evXI>YLE;&}Fj8#mRE%&W?B30shyu13% zpT6C#3k-fJGjKF52@24V6I?%GvcZa|)%y<^9(-F=IB9W`k6g3(YLhfsMh0sDZC^x! literal 0 HcmV?d00001 diff --git a/abstract-factory/test-output/emailable-report.html b/abstract-factory/test-output/emailable-report.html new file mode 100644 index 000000000000..3e81c2b55223 --- /dev/null +++ b/abstract-factory/test-output/emailable-report.html @@ -0,0 +1,46 @@ + + + +TestNG: Unit Test + + + + + + +
TestMethods
Passed
Scenarios
Passed
# skipped# failedTotal
Time
Included
Groups
Excluded
Groups
Default test220011.2 seconds
+ + + + +
ClassMethod# of
Scenarios
StartTime
(ms)
Default test — passed
com.iluwatar.AppTestcreateKingdom 1141205945783073
main 1141205945790411093
+

Default test

+

com.iluwatar.AppTest:createKingdom

+

back to summary

+

com.iluwatar.AppTest:main

+

back to summary

+ diff --git a/abstract-factory/test-output/failed.png b/abstract-factory/test-output/failed.png new file mode 100644 index 0000000000000000000000000000000000000000..c117be59a9ecd1da15ebf48f6b7f53496302a7cd GIT binary patch literal 977 zcmV;?11|iDP)4Tx0C)j~RNrgUP!#^!Wu36$i#lf!2|j3%Ze&w*L!7p2SGvtw>Nd9_NSmf@ zT$;ut?S8Na*^6&F#dq-sKKTa>*@JI;k`2ZbVfd_wB24xov!0tYO(#d#()tZ$I5%3%!zLYh@BH>w}XODA7?mkV}ap}jU$$3 zG&Mk)3Bm`(LOM&hKscCb;PVaG&Vdx+MpZJHTQ(R_;DA31$+jOGBoLXk_De?ey1m!ik&_4G zH9n^))_*|$z4!HUisgBd@awc5jn(v9k~&t~+vLrrBg4dZQ9lDnLV}JQWGLW~LJVP= zW5lZXOcog;N~F?hbX0k=IMzETla}oqM|jC!4!B+x^;@#I_Tc-T-6hwKycLDTx1-om z?X`jFy0R0R8-I0SrK4`)H@W4T8*Qr#2vPou<*`U!Wy(*2QP*`g=8#jD{B;Y@GL-Hm zb`n?&x~%YC_$q7)PlXr4m%r4=&fcvN%Ybn#KC7Nn&Bp8{(oE9pWVpYI^+LuN`H(R~ zTAjWmO`M83^4d@fCkA(d>*nHIFV_d2yUbnT`nd?LE^;G|!WZ>Ld?E0@Grm4ww{M7H zr`x{MWb30bTI;*hk-DO>dX$gbC-yy#suLNqvA(f>RtPJ!qGM`Gvvf}Y10`)vm-7Xa z?-7Ixe2A_siI1ydSCCID3U8SVUY86>uSnT0use_K1GZDvUFKY)t}F* z)!pahe+zh{{06Bb3f97*Uorpy0B%V{K~yLeW4y>F|DS;bz(j&tuu`}Ny`K+o>P41= zYq-R&z$-w|z14sZ}6S`uM8b)lMhS`K{GDtB9px6Kr!cSsofH?!*c`##8 zG{6+YB(Z6NYd}|wOA}U4!xUqq;Wl8C#3lv+hIuOk>aOmJ00000NkvXXu0mjfn+D0# literal 0 HcmV?d00001 diff --git a/abstract-factory/test-output/index.html b/abstract-factory/test-output/index.html new file mode 100644 index 000000000000..21d7e51c966c --- /dev/null +++ b/abstract-factory/test-output/index.html @@ -0,0 +1,251 @@ + + + + + TestNG reports + + + + + + + + + + +
+ Test results +
+ 1 suite +
+ +
+
+
+
+
+ + com.iluwatar.AppTest +
+
+
+
+ + + createKingdom +
+
+
+
+ + + main +
+
+
+
+
+
+
+ C:\Users\duanmh\AppData\Local\Temp\testng-eclipse--61379382\testng-customsuite.xml +
+
+
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
+<suite name="Default suite">
+  <test verbose="2" name="Default test">
+    <classes>
+      <class name="com.iluwatar.AppTest"/>
+    </classes>
+  </test> <!-- Default test -->
+</suite> <!-- Default suite -->
+            
+
+
+
+
+ Tests for Default suite +
+
+
    +
  • + Default test (1 class) +
  • +
+
+
+
+
+ Groups for Default suite +
+
+
+
+
+
+ Times for Default suite +
+
+
+ + Total running time: 11 seconds +
+
+
+
+
+
+
+ Reporter output for Default suite +
+
+
+
+
+
+ 0 ignored methods +
+
+
+
+
+
+ Methods in chronological order +
+
+
+
com.iluwatar.AppTest
+
+ createKingdom + 0 ms +
+
+ main + 74 ms +
+
+
+
+
+ + diff --git a/abstract-factory/test-output/jquery-1.7.1.min.js b/abstract-factory/test-output/jquery-1.7.1.min.js new file mode 100644 index 000000000000..198b3ff07d80 --- /dev/null +++ b/abstract-factory/test-output/jquery-1.7.1.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/abstract-factory/test-output/junitreports/TEST-com.iluwatar.AppTest.xml b/abstract-factory/test-output/junitreports/TEST-com.iluwatar.AppTest.xml new file mode 100644 index 000000000000..0ace922a1037 --- /dev/null +++ b/abstract-factory/test-output/junitreports/TEST-com.iluwatar.AppTest.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/abstract-factory/test-output/junitreports/TEST-nc.tc.com.iluwatar.AppTest.xml b/abstract-factory/test-output/junitreports/TEST-nc.tc.com.iluwatar.AppTest.xml new file mode 100644 index 000000000000..bd0c16626099 --- /dev/null +++ b/abstract-factory/test-output/junitreports/TEST-nc.tc.com.iluwatar.AppTest.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + diff --git a/abstract-factory/test-output/navigator-bullet.png b/abstract-factory/test-output/navigator-bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..36d90d395c51912e718b89dd88b4a3fb53aa1d85 GIT binary patch literal 352 zcmV-m0iXVfP)G5@hw44>$jtc^drBsEhr7 z^X9?-KzfCWMC0vWtek#CBxB+XG+nX0$0e)!py)g%*!C9F3xb^$q9zV zJJ-RS;)J3Q3>X<0IJnsvq?E-OUUR%-Sh{}$*!>`a1>MbzjEoGd?5qriD%uRz5+)#_ z=~xvqF)}e2@@p|@3aYFDDdOf=+lQf0fP;_0P2842gi~-LkXsB?^cOvN)>U@o{(tlO y5-4a&(SrsYdr*b0AjKdWn<5ZqBsQ)A0t^5xc9&6bK}yU30000 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Class nameMethod nameGroups
com.iluwatar.AppTest  
@Test
 createKingdom 
 main 
@BeforeClass
@BeforeMethod
@AfterMethod
@AfterClass
diff --git a/abstract-factory/test-output/old/Default suite/groups.html b/abstract-factory/test-output/old/Default suite/groups.html new file mode 100644 index 000000000000..199cb3f11888 --- /dev/null +++ b/abstract-factory/test-output/old/Default suite/groups.html @@ -0,0 +1 @@ +

Groups used for this test run

\ No newline at end of file diff --git a/abstract-factory/test-output/old/Default suite/index.html b/abstract-factory/test-output/old/Default suite/index.html new file mode 100644 index 000000000000..8ed202c3be37 --- /dev/null +++ b/abstract-factory/test-output/old/Default suite/index.html @@ -0,0 +1,6 @@ +Results for Default suite + + + + + diff --git a/abstract-factory/test-output/old/Default suite/main.html b/abstract-factory/test-output/old/Default suite/main.html new file mode 100644 index 000000000000..5888ae0744dd --- /dev/null +++ b/abstract-factory/test-output/old/Default suite/main.html @@ -0,0 +1,2 @@ +Results for Default suite +Select a result on the left-hand pane. diff --git a/abstract-factory/test-output/old/Default suite/methods-alphabetical.html b/abstract-factory/test-output/old/Default suite/methods-alphabetical.html new file mode 100644 index 000000000000..c6fdd1b53648 --- /dev/null +++ b/abstract-factory/test-output/old/Default suite/methods-alphabetical.html @@ -0,0 +1,8 @@ +

Methods run, sorted chronologically

>> means before, << means after


Default suite

(Hover the method name to see the test class name)

+ + + + + + +
TimeDelta (ms)Suite
configuration
Test
configuration
Class
configuration
Groups
configuration
Method
configuration
Test
method
ThreadInstances
14/09/30 14:44:17 0      createKingdommain@1957306
14/09/30 14:44:17 74      mainmain@1957306
diff --git a/abstract-factory/test-output/old/Default suite/methods-not-run.html b/abstract-factory/test-output/old/Default suite/methods-not-run.html new file mode 100644 index 000000000000..54b14cb854b6 --- /dev/null +++ b/abstract-factory/test-output/old/Default suite/methods-not-run.html @@ -0,0 +1,2 @@ +

Methods that were not run

+
\ No newline at end of file diff --git a/abstract-factory/test-output/old/Default suite/methods.html b/abstract-factory/test-output/old/Default suite/methods.html new file mode 100644 index 000000000000..c6fdd1b53648 --- /dev/null +++ b/abstract-factory/test-output/old/Default suite/methods.html @@ -0,0 +1,8 @@ +

Methods run, sorted chronologically

>> means before, << means after


Default suite

(Hover the method name to see the test class name)

+ + + + + + +
TimeDelta (ms)Suite
configuration
Test
configuration
Class
configuration
Groups
configuration
Method
configuration
Test
method
ThreadInstances
14/09/30 14:44:17 0      createKingdommain@1957306
14/09/30 14:44:17 74      mainmain@1957306
diff --git a/abstract-factory/test-output/old/Default suite/reporter-output.html b/abstract-factory/test-output/old/Default suite/reporter-output.html new file mode 100644 index 000000000000..063bc2e96fd0 --- /dev/null +++ b/abstract-factory/test-output/old/Default suite/reporter-output.html @@ -0,0 +1 @@ +

Reporter output

\ No newline at end of file diff --git a/abstract-factory/test-output/old/Default suite/testng.xml.html b/abstract-factory/test-output/old/Default suite/testng.xml.html new file mode 100644 index 000000000000..fb746ab57551 --- /dev/null +++ b/abstract-factory/test-output/old/Default suite/testng.xml.html @@ -0,0 +1 @@ +testng.xml for Default suite<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Default suite">
  <test verbose="2" name="Default test">
    <classes>
      <class name="com.iluwatar.AppTest"/>
    </classes>
  </test> <!-- Default test -->
</suite> <!-- Default suite -->
\ No newline at end of file diff --git a/abstract-factory/test-output/old/Default suite/toc.html b/abstract-factory/test-output/old/Default suite/toc.html new file mode 100644 index 000000000000..4211d4ca09e3 --- /dev/null +++ b/abstract-factory/test-output/old/Default suite/toc.html @@ -0,0 +1,30 @@ + + +Results for Default suite + + + + +

Results for
Default suite

+ + + + + + + + + + +
1 test1 class2 methods:
+  chronological
+  alphabetical
+  not run (0)
0 groupreporter outputtestng.xml
+ +

+

+
Default test (2/0/0) + Results +
+
+ \ No newline at end of file diff --git a/abstract-factory/test-output/old/index.html b/abstract-factory/test-output/old/index.html new file mode 100644 index 000000000000..593955c38cc9 --- /dev/null +++ b/abstract-factory/test-output/old/index.html @@ -0,0 +1,9 @@ + +Test results + + +

Test results

+ + + +
SuitePassedFailedSkippedtestng.xml
Total200 
Default suite200Link
diff --git a/abstract-factory/test-output/passed.png b/abstract-factory/test-output/passed.png new file mode 100644 index 0000000000000000000000000000000000000000..45e85bbfd0f5e85def14b896cfd4331675be2759 GIT binary patch literal 1019 zcmV4Tx0C)j~RNrgUP!#^!Wu36$i#lf!2|j3%Ze&w*L!7p2SGvtw>Nd9_NSmf@ zT$;ut?S8Na*^6&F#dq-sKKTa>*@JI;k`2ZbVfd_wB24xov!0tYO(#d#()tZ$I5%3%!zLYh@BH>w}XODA7?mkV}ap}jU$$3 zG&Mk)3Bm`(LOM&hKscCb;PVaG&Vdx+MpZJHTQ(R_;DA31$+jOGBoLXk_De?ey1m!ik&_4G zH9n^))_*|$z4!HUisgBd@awc5jn(v9k~&t~+vLrrBg4dZQ9lDnLV}JQWGLW~LJVP= zW5lZXOcog;N~F?hbX0k=IMzETla}oqM|jC!4!B+x^;@#I_Tc-T-6hwKycLDTx1-om z?X`jFy0R0R8-I0SrK4`)H@W4T8*Qr#2vPou<*`U!Wy(*2QP*`g=8#jD{B;Y@GL-Hm zb`n?&x~%YC_$q7)PlXr4m%r4=&fcvN%Ybn#KC7Nn&Bp8{(oE9pWVpYI^+LuN`H(R~ zTAjWmO`M83^4d@fCkA(d>*nHIFV_d2yUbnT`nd?LE^;G|!WZ>Ld?E0@Grm4ww{M7H zr`x{MWb30bTI;*hk-DO>dX$gbC-yy#suLNqvA(f>RtPJ!qGM`Gvvf}Y10`)vm-7Xa z?-7Ixe2A_siI1ydSCCID3U8SVUY86>uSnT0use_K1GZDvUFKY)t}F* z)!pahe+zh{{06Bb3f97*Uorpy0GLTcK~yLeW0ahz`=5aXz(j&tuu_sWu%O#uE8~VD zl&lrR;HF{4AT>#kuni$fu3*LaYg^!kpg8GS-X(?~-@n6gsDV2}@4opAtDmldYd~=l z$fS+YQyErY*vatm`)9DCL(k8^6@wTk8o(y4Wnh>XTmx2AyLA%7m+#+DG@v*MBy;8c pT?UXs5IFYyJeWo%7zba(0RWt9G$oT4y{G^H002ovPDHLkV1nS74Tx0C)j~RNrgUP!#^!Wu36$i#lf!2|j3%Ze&w*L!7p2SGvtw>Nd9_NSmf@ zT$;ut?S8Na*^6&F#dq-sKKTa>*@JI;k`2ZbVfd_wB24xov!0tYO(#d#()tZ$I5%3%!zLYh@BH>w}XODA7?mkV}ap}jU$$3 zG&Mk)3Bm`(LOM&hKscCb;PVaG&Vdx+MpZJHTQ(R_;DA31$+jOGBoLXk_De?ey1m!ik&_4G zH9n^))_*|$z4!HUisgBd@awc5jn(v9k~&t~+vLrrBg4dZQ9lDnLV}JQWGLW~LJVP= zW5lZXOcog;N~F?hbX0k=IMzETla}oqM|jC!4!B+x^;@#I_Tc-T-6hwKycLDTx1-om z?X`jFy0R0R8-I0SrK4`)H@W4T8*Qr#2vPou<*`U!Wy(*2QP*`g=8#jD{B;Y@GL-Hm zb`n?&x~%YC_$q7)PlXr4m%r4=&fcvN%Ybn#KC7Nn&Bp8{(oE9pWVpYI^+LuN`H(R~ zTAjWmO`M83^4d@fCkA(d>*nHIFV_d2yUbnT`nd?LE^;G|!WZ>Ld?E0@Grm4ww{M7H zr`x{MWb30bTI;*hk-DO>dX$gbC-yy#suLNqvA(f>RtPJ!qGM`Gvvf}Y10`)vm-7Xa z?-7Ixe2A_siI1ydSCCID3U8SVUY86>uSnT0use_K1GZDvUFKY)t}F* z)!pahe+zh{{06Bb3f97*Uorpy0Axu-K~yLeV|;sz;XeZjfQbaPV5M*kLYBBKLY9MT zcz2wU0a*fOGe`_12Lo^oAOUnu=!!vVSU?0aK-Pq8GE5DM4KP7`G=>J4GmvdUHULEf pOfgIWHcfC1=!$V^Vx)OY0{~v*D#slo71{s*002ovPDHLkV1jLYy!8M8 literal 0 HcmV?d00001 diff --git a/abstract-factory/test-output/testng-failed.xml b/abstract-factory/test-output/testng-failed.xml new file mode 100644 index 000000000000..f72314e6397a --- /dev/null +++ b/abstract-factory/test-output/testng-failed.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/abstract-factory/test-output/testng-reports.css b/abstract-factory/test-output/testng-reports.css new file mode 100644 index 000000000000..16dfbdcf1c62 --- /dev/null +++ b/abstract-factory/test-output/testng-reports.css @@ -0,0 +1,304 @@ +body { + margin: 0px 0px 5px 5px; +} + +ul { + margin: 0px; +} + +li { + list-style-type: none; +} + +a { + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +.navigator-selected { + background: #ffa500; +} + +.wrapper { + overflow: hidden; +} + +.navigator-root { + margin-top: 60px; + float: left; + width: 400px; + height: 100%; + overflow-y: auto; +} + +.main-panel-root { + margin-top: 60px; +} + +.suite { + margin: 0px 10px 10px 0px; + background-color: #fff8dc; +} + +.suite-name { + padding-left: 10px; + font-size: 25px; + font-family: Times; +} + +.main-panel-header { + padding: 5px; + background-color: #9FB4D9; //afeeee; + font-family: monospace; + font-size: 18px; +} + +.main-panel-content { + padding: 5px; + margin-bottom: 10px; + background-color: #DEE8FC; //d0ffff; +} + +.rounded-window { + border-radius: 10px; + border-style: solid; + border-width: 1px; +} + +.rounded-window-top { + border-top-right-radius: 10px 10px; + border-top-left-radius: 10px 10px; + border-style: solid; + border-width: 1px; + overflow: auto; +} + +.light-rounded-window-top { + border-top-right-radius: 10px 10px; + border-top-left-radius: 10px 10px; +} + +.rounded-window-bottom { + border-style: solid; + border-width: 0px 1px 1px 1px; + border-bottom-right-radius: 10px 10px; + border-bottom-left-radius: 10px 10px; + overflow: auto; +} + +.method-name { + font-size: 12px; + font-family: monospace; +} + +.method-content { + border-style: solid; + border-width: 0px 0px 1px 0px; + margin-bottom: 10; + padding-bottom: 5px; + width: 80%; +} + +.parameters { + font-size: 14px; + font-family: monospace; +} + +.stack-trace { + white-space: pre; + font-family: monospace; + font-size: 12px; + margin-top: 0px; + margin-left: 20px; +} + +.testng-xml { + font-family: monospace; +} + +.method-list-content { + margin-left: 10px; +} + +.navigator-suite-content { + margin-left: 10px; + font: 12px 'Lucida Grande'; +} + +.suite-section-title { + margin-top: 10px; + width: 80%; + border-style: solid; + border-width: 1px 0px 0px 0px; + font-family: Times; + font-size: 18px; + font-weight: bold; +} + +.suite-section-content { + list-style-image: url(bullet_point.png); +} + +.top-banner-root { + position: fixed; + width: 100%; + padding: 5px; + margin: 0px 0px 5px 0px; + height: 45px; + background-color: #0066ff; + font-family: Times; + color: #fff; + text-align: center; +} + +.top-banner-title-font { + font-size: 25px; +} + +.test-name { + font-family: 'Lucida Grande'; + font-size: 16px; +} + +.suite-icon { + padding: 5px; + float: right; + height: 20; +} + +.test-group { + font: 20px 'Lucida Grande'; + margin: 5px 5px 10px 5px; + border-width: 0px 0px 1px 0px; + border-style: solid; + padding: 5px; +} + +.test-group-name { + font-weight: bold; +} + +.method-in-group { + font-size: 16px; + margin-left: 80px; +} + +table.google-visualization-table-table { + width: 100%; +} + +.reporter-method-name { + font-size: 14px; + font-family: monospace; +} + +.reporter-method-output-div { + padding: 5px; + margin: 0px 0px 5px 20px; + font-size: 12px; + font-family: monospace; + border-width: 0px 0px 0px 1px; + border-style: solid; +} + +.ignored-class-div { + font-size: 14px; + font-family: monospace; +} + +.ignored-methods-div { + padding: 5px; + margin: 0px 0px 5px 20px; + font-size: 12px; + font-family: monospace; + border-width: 0px 0px 0px 1px; + border-style: solid; +} + +.border-failed { + border-top-left-radius: 10px 10px; + border-bottom-left-radius: 10px 10px; + border-style: solid; + border-width: 0px 0px 0px 10px; + border-color: #f00; +} + +.border-skipped { + border-top-left-radius: 10px 10px; + border-bottom-left-radius: 10px 10px; + border-style: solid; + border-width: 0px 0px 0px 10px; + border-color: #edc600; +} + +.border-passed { + border-top-left-radius: 10px 10px; + border-bottom-left-radius: 10px 10px; + border-style: solid; + border-width: 0px 0px 0px 10px; + border-color: #19f52d; +} + +.times-div { + text-align: center; + padding: 5px; +} + +.suite-total-time { + font: 16px 'Lucida Grande'; +} + +.configuration-suite { + margin-left: 20px; +} + +.configuration-test { + margin-left: 40px; +} + +.configuration-class { + margin-left: 60px; +} + +.configuration-method { + margin-left: 80px; +} + +.test-method { + margin-left: 100px; +} + +.chronological-class { + background-color: #0ccff; + border-style: solid; + border-width: 0px 0px 1px 1px; +} + +.method-start { + float: right; +} + +.chronological-class-name { + padding: 0px 0px 0px 5px; + color: #008; +} + +.after, .before, .test-method { + font-family: monospace; + font-size: 14px; +} + +.navigator-suite-header { + font-size: 22px; + margin: 0px 10px 5px 0px; + background-color: #deb887; + text-align: center; +} + +.collapse-all-icon { + padding: 5px; + float: right; +} diff --git a/abstract-factory/test-output/testng-reports.js b/abstract-factory/test-output/testng-reports.js new file mode 100644 index 000000000000..c2ba487e6c70 --- /dev/null +++ b/abstract-factory/test-output/testng-reports.js @@ -0,0 +1,130 @@ +$(document).ready(function() { + $('a.navigator-link').click(function() { + // Extract the panel for this link + var panel = getPanelName($(this)); + + // Mark this link as currently selected + $('.navigator-link').parent().removeClass('navigator-selected'); + $(this).parent().addClass('navigator-selected'); + + showPanel(panel); + }); + + installMethodHandlers('failed'); + installMethodHandlers('skipped'); + installMethodHandlers('passed', true); // hide passed methods by default + + $('a.method').click(function() { + showMethod($(this)); + return false; + }); + + // Hide all the panels and display the first one (do this last + // to make sure the click() will invoke the listeners) + $('.panel').hide(); + $('.navigator-link').first().click(); + + // Collapse/expand the suites + $('a.collapse-all-link').click(function() { + var contents = $('.navigator-suite-content'); + if (contents.css('display') == 'none') { + contents.show(); + } else { + contents.hide(); + } + }); + + // Keep the navigator div always visible + var $scrollingDiv = $(".navigator-root"); + $(window).scroll(function() { + $scrollingDiv.css('height', $(window).height() - 65); + $scrollingDiv.stop() + .animate({"marginTop": ($(window).scrollTop() + 60) + "px"} ); + }); +}); + +// The handlers that take care of showing/hiding the methods +function installMethodHandlers(name, hide) { + function getContent(t) { + return $('.method-list-content.' + name + "." + t.attr('panel-name')); + } + + function getHideLink(t, name) { + var s = 'a.hide-methods.' + name + "." + t.attr('panel-name'); + return $(s); + } + + function getShowLink(t, name) { + return $('a.show-methods.' + name + "." + t.attr('panel-name')); + } + + function getMethodPanelClassSel(element, name) { + var panelName = getPanelName(element); + var sel = '.' + panelName + "-class-" + name; + return $(sel); + } + + $('a.hide-methods.' + name).click(function() { + var w = getContent($(this)); + w.hide(); + getHideLink($(this), name).hide(); + getShowLink($(this), name).show(); + getMethodPanelClassSel($(this), name).hide(); + }); + + $('a.show-methods.' + name).click(function() { + var w = getContent($(this)); + w.show(); + getHideLink($(this), name).show(); + getShowLink($(this), name).hide(); + showPanel(getPanelName($(this))); + getMethodPanelClassSel($(this), name).show(); + }); + + if (hide) { + $('a.hide-methods.' + name).click(); + } else { + $('a.show-methods.' + name).click(); + } +} + +function getHashForMethod(element) { + return element.attr('hash-for-method'); +} + +function getPanelName(element) { + return element.attr('panel-name'); +} + +function showPanel(panelName) { + $('.panel').hide(); + var panel = $('.panel[panel-name="' + panelName + '"]'); + panel.show(); +} + +function showMethod(element) { + var hashTag = getHashForMethod(element); + var panelName = getPanelName(element); + showPanel(panelName); + var current = document.location.href; + var base = current.substring(0, current.indexOf('#')) + document.location.href = base + '#' + hashTag; + var newPosition = $(document).scrollTop() - 65; + $(document).scrollTop(newPosition); +} + +function drawTable() { + for (var i = 0; i < suiteTableInitFunctions.length; i++) { + window[suiteTableInitFunctions[i]](); + } + + for (var k in window.suiteTableData) { + var v = window.suiteTableData[k]; + var div = v.tableDiv; + var data = v.tableData + var table = new google.visualization.Table(document.getElementById(div)); + table.draw(data, { + showRowNumber : false + }); + } +} diff --git a/abstract-factory/test-output/testng-results.xml b/abstract-factory/test-output/testng-results.xml new file mode 100644 index 000000000000..ff2094a5652b --- /dev/null +++ b/abstract-factory/test-output/testng-results.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/abstract-factory/test-output/testng.css b/abstract-factory/test-output/testng.css new file mode 100644 index 000000000000..5124ba863b37 --- /dev/null +++ b/abstract-factory/test-output/testng.css @@ -0,0 +1,9 @@ +.invocation-failed, .test-failed { background-color: #DD0000; } +.invocation-percent, .test-percent { background-color: #006600; } +.invocation-passed, .test-passed { background-color: #00AA00; } +.invocation-skipped, .test-skipped { background-color: #CCCC00; } + +.main-page { + font-size: x-large; +} + diff --git a/adapter/(default package).ucd b/adapter/(default package).ucd new file mode 100644 index 000000000000..4923fdc4d502 --- /dev/null +++ b/adapter/(default package).ucd @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/adapter/.euml2 b/adapter/.euml2 new file mode 100644 index 000000000000..42ca20e2ffde --- /dev/null +++ b/adapter/.euml2 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/adapter/.gitignore b/adapter/.gitignore new file mode 100644 index 000000000000..5e56e040ec09 --- /dev/null +++ b/adapter/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/adapter/.umlproject b/adapter/.umlproject new file mode 100644 index 000000000000..e348ac9b6238 --- /dev/null +++ b/adapter/.umlproject @@ -0,0 +1,7 @@ + + + + + + + diff --git a/adapter/adapter.usd b/adapter/adapter.usd new file mode 100644 index 000000000000..a173ee83e2c9 --- /dev/null +++ b/adapter/adapter.usd @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/adapter/out/.gitignore b/adapter/out/.gitignore new file mode 100644 index 000000000000..5e56e040ec09 --- /dev/null +++ b/adapter/out/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/adapter/src/java.usd b/adapter/src/java.usd new file mode 100644 index 000000000000..a173ee83e2c9 --- /dev/null +++ b/adapter/src/java.usd @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/adapter/src/main/java/com/iluwatar/App.java b/adapter/src/main/java/com/iluwatar/adapter/App.java similarity index 93% rename from adapter/src/main/java/com/iluwatar/App.java rename to adapter/src/main/java/com/iluwatar/adapter/App.java index 41e2495a9f72..0677b04f8adc 100644 --- a/adapter/src/main/java/com/iluwatar/App.java +++ b/adapter/src/main/java/com/iluwatar/adapter/App.java @@ -1,23 +1,23 @@ -package com.iluwatar; - -/** - * - * There are two variations of the Adapter pattern: The - * class adapter implements the adaptee's interface whereas - * the object adapter uses composition to contain the adaptee - * in the adapter object. This example uses the object adapter - * approach. - * - * The Adapter (GnomeEngineer) converts the interface of the - * target class (GoblinGlider) into a suitable one expected - * by the client (GnomeEngineeringManager). - * - */ -public class App -{ - public static void main( String[] args ) - { - GnomeEngineeringManager manager = new GnomeEngineeringManager(); - manager.operateDevice(); - } -} +package com.iluwatar.adapter; + +/** + * + * There are two variations of the Adapter pattern: The + * class adapter implements the adaptee's interface whereas + * the object adapter uses composition to contain the adaptee + * in the adapter object. This example uses the object adapter + * approach. + * + * The Adapter (GnomeEngineer) converts the interface of the + * target class (GoblinGlider) into a suitable one expected + * by the client (GnomeEngineeringManager). + * + */ +public class App +{ + public static void main( String[] args ) + { + GnomeEngineeringManager manager = new GnomeEngineeringManager(); + manager.operateDevice(); + } +} diff --git a/adapter/src/main/java/com/iluwatar/Engineer.java b/adapter/src/main/java/com/iluwatar/adapter/Engineer.java similarity index 75% rename from adapter/src/main/java/com/iluwatar/Engineer.java rename to adapter/src/main/java/com/iluwatar/adapter/Engineer.java index d8289df7d95e..1ec0a69bdc9b 100644 --- a/adapter/src/main/java/com/iluwatar/Engineer.java +++ b/adapter/src/main/java/com/iluwatar/adapter/Engineer.java @@ -1,12 +1,12 @@ -package com.iluwatar; - -/** - * - * Engineers can operate devices. - * - */ -public interface Engineer { - - void operateDevice(); - -} +package com.iluwatar.adapter; + +/** + * + * Engineers can operate devices. + * + */ +public interface Engineer { + + void operateDevice(); + +} diff --git a/adapter/src/main/java/com/iluwatar/GnomeEngineer.java b/adapter/src/main/java/com/iluwatar/adapter/GnomeEngineer.java similarity index 78% rename from adapter/src/main/java/com/iluwatar/GnomeEngineer.java rename to adapter/src/main/java/com/iluwatar/adapter/GnomeEngineer.java index 92fc5aea82b9..edd67de764fe 100644 --- a/adapter/src/main/java/com/iluwatar/GnomeEngineer.java +++ b/adapter/src/main/java/com/iluwatar/adapter/GnomeEngineer.java @@ -1,25 +1,29 @@ -package com.iluwatar; - -/** - * - * Adapter class. Adapts the interface of the device - * (GoblinGlider) into Engineer interface expected - * by the client (GnomeEngineeringManager). - * - */ -public class GnomeEngineer implements Engineer { - - private GoblinGlider glider; - - public GnomeEngineer() { - glider = new GoblinGlider(); - } - - @Override - public void operateDevice() { - glider.attachGlider(); - glider.gainSpeed(); - glider.takeOff(); - } - -} +package com.iluwatar.adapter; + +/** + * + * Adapter class. Adapts the interface of the device + * (GoblinGlider) into Engineer interface expected + * by the client (GnomeEngineeringManager). + * + */ +public class GnomeEngineer implements Engineer { + + /** + * @uml.property name="glider" + * @uml.associationEnd multiplicity="(1 1)" + */ + private GoblinGlider glider; + + public GnomeEngineer() { + glider = new GoblinGlider(); + } + + @Override + public void operateDevice() { + glider.attachGlider(); + glider.gainSpeed(); + glider.takeOff(); + } + +} diff --git a/adapter/src/main/java/com/iluwatar/GnomeEngineeringManager.java b/adapter/src/main/java/com/iluwatar/adapter/GnomeEngineeringManager.java similarity index 72% rename from adapter/src/main/java/com/iluwatar/GnomeEngineeringManager.java rename to adapter/src/main/java/com/iluwatar/adapter/GnomeEngineeringManager.java index af3467d30409..dd8ee0e4da5b 100644 --- a/adapter/src/main/java/com/iluwatar/GnomeEngineeringManager.java +++ b/adapter/src/main/java/com/iluwatar/adapter/GnomeEngineeringManager.java @@ -1,21 +1,25 @@ -package com.iluwatar; - -/** - * - * GnomeEngineering manager uses Engineer to - * operate devices. - * - */ -public class GnomeEngineeringManager implements Engineer { - - private Engineer engineer; - - public GnomeEngineeringManager() { - engineer = new GnomeEngineer(); - } - - @Override - public void operateDevice() { - engineer.operateDevice(); - } -} +package com.iluwatar.adapter; + +/** + * + * GnomeEngineering manager uses Engineer to + * operate devices. + * + */ +public class GnomeEngineeringManager implements Engineer { + + /** + * @uml.property name="engineer" + * @uml.associationEnd multiplicity="(1 1)" + */ + private Engineer engineer; + + public GnomeEngineeringManager() { + engineer = new GnomeEngineer(); + } + + @Override + public void operateDevice() { + engineer.operateDevice(); + } +} diff --git a/adapter/src/main/java/com/iluwatar/GoblinGlider.java b/adapter/src/main/java/com/iluwatar/adapter/GoblinGlider.java similarity index 87% rename from adapter/src/main/java/com/iluwatar/GoblinGlider.java rename to adapter/src/main/java/com/iluwatar/adapter/GoblinGlider.java index a5bcd0722dc2..a97d4c384197 100644 --- a/adapter/src/main/java/com/iluwatar/GoblinGlider.java +++ b/adapter/src/main/java/com/iluwatar/adapter/GoblinGlider.java @@ -1,21 +1,21 @@ -package com.iluwatar; - -/** - * - * Device class (adaptee in the pattern). - * - */ -public class GoblinGlider { - - public void attachGlider() { - System.out.println("Glider attached."); - } - - public void gainSpeed() { - System.out.println("Gaining speed."); - } - - public void takeOff() { - System.out.println("Lift-off!"); - } -} +package com.iluwatar.adapter; + +/** + * + * Device class (adaptee in the pattern). + * + */ +public class GoblinGlider { + + public void attachGlider() { + System.out.println("Glider attached."); + } + + public void gainSpeed() { + System.out.println("Gaining speed."); + } + + public void takeOff() { + System.out.println("Lift-off!"); + } +} diff --git a/adapter/src/test/log4j.xml b/adapter/src/test/log4j.xml new file mode 100644 index 000000000000..748d0c1a5271 --- /dev/null +++ b/adapter/src/test/log4j.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/adapter/src/test/resources/configure/UATApplicationContext.xml b/adapter/src/test/resources/configure/UATApplicationContext.xml new file mode 100644 index 000000000000..818ef52f909e --- /dev/null +++ b/adapter/src/test/resources/configure/UATApplicationContext.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/adapter/src/test/resources/configure/prop.xml b/adapter/src/test/resources/configure/prop.xml new file mode 100644 index 000000000000..c7afbd60d256 --- /dev/null +++ b/adapter/src/test/resources/configure/prop.xml @@ -0,0 +1,133 @@ + + + false + + + $JAVA_HOME + server + -server -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -Duser.timezone=GMT+8 -Djava.awt.headless=true + 8005 + + 80 + + + + true + + StartTomcat + nc.bs.tomcat.startup.BootStrapTomcatService + 15 + true + false + start|stop + + + EJB_SERVICE + nc.bs.mw.naming.EJBContainerService + 15 + true + false + start|stop + + nc.bs.mw.tran.IerpTransactionManagerProxy + nc.bs.mw.tran.IerpUserTransaction + nc.bs.mw.tran.IerpTransactionManager + nc.bs.mw.sql.UFSqlObject + nc.bs.mw.ejbsql.IerpXADataSource + + design + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + baptest807 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + bafi + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + bafi + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + iufo6103312 + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + iufo6103312 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + batm + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + batm + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + bap8 + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + bap8 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + foodmart + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + foodmart + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + \ No newline at end of file diff --git a/adapter/src/test/resources/configure/test_data_source.xml b/adapter/src/test/resources/configure/test_data_source.xml new file mode 100644 index 000000000000..2e45d5ee869c --- /dev/null +++ b/adapter/src/test/resources/configure/test_data_source.xml @@ -0,0 +1,19 @@ + + + + design + Z + jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive + sa + sasasa + com.microsoft.sqlserver.jdbc.SQLServerDriver + SQLSERVER2008 + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + \ No newline at end of file diff --git a/adapter/src/test/resources/configure/uat.properties b/adapter/src/test/resources/configure/uat.properties new file mode 100644 index 000000000000..f0b076c2de77 --- /dev/null +++ b/adapter/src/test/resources/configure/uat.properties @@ -0,0 +1,33 @@ +#project information +app_name=App Name +app_version=V6.5 + +#Common Configure +##UAPHOME path, USE '/' for path separator +nc_home= +##verify log path, USE '/' for path separator +log_file=debug.log + +# 0 don't print app log information on test result log +# 1 only print app log information on test result log for fail testcase +# 2 print application log information on test result log for all testcase +uatlog_switch=2 + +#dataFile Configure ,backup database data and restore database data +data_backup_file = c:/temp/datafile.xml + +#default datasource +default_datasource=design + +#BusinessServer configure +serverstart=off +login_username= +login_password= + +#resources settings +nc_configure_dir=resources/configure/ +testdata_config_dir=resources/data/conf/ +testdata_springfile_dir=resources/data/spring/ +testdata_objectfile_dir=resources/data/object/ +testdata_excelfile_dir=resources/data/excel/ +testdata_backup_dir=resources/data/backup/ diff --git a/adapter/src/test/resources/configure/uat_spring_conf.xml b/adapter/src/test/resources/configure/uat_spring_conf.xml new file mode 100644 index 000000000000..169a91514700 --- /dev/null +++ b/adapter/src/test/resources/configure/uat_spring_conf.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/adapter/src/test/resources/data/backup/README b/adapter/src/test/resources/data/backup/README new file mode 100644 index 000000000000..a5b99861a7dc --- /dev/null +++ b/adapter/src/test/resources/data/backup/README @@ -0,0 +1 @@ +ļ \ No newline at end of file diff --git a/adapter/src/test/resources/data/config/README b/adapter/src/test/resources/data/config/README new file mode 100644 index 000000000000..4849e2aef709 --- /dev/null +++ b/adapter/src/test/resources/data/config/README @@ -0,0 +1 @@ +Objectļ \ No newline at end of file diff --git a/adapter/src/test/resources/data/excel/README b/adapter/src/test/resources/data/excel/README new file mode 100644 index 000000000000..4849e2aef709 --- /dev/null +++ b/adapter/src/test/resources/data/excel/README @@ -0,0 +1 @@ +Objectļ \ No newline at end of file diff --git a/adapter/src/test/resources/data/object/README b/adapter/src/test/resources/data/object/README new file mode 100644 index 000000000000..271c286f3687 --- /dev/null +++ b/adapter/src/test/resources/data/object/README @@ -0,0 +1 @@ +̻ļ \ No newline at end of file diff --git a/adapter/src/test/resources/data/spring/README b/adapter/src/test/resources/data/spring/README new file mode 100644 index 000000000000..961ee7009fd2 --- /dev/null +++ b/adapter/src/test/resources/data/spring/README @@ -0,0 +1 @@ +spring ļ \ No newline at end of file diff --git a/adapter/src/test/resources/temp/README b/adapter/src/test/resources/temp/README new file mode 100644 index 000000000000..ccffba66ffdd --- /dev/null +++ b/adapter/src/test/resources/temp/README @@ -0,0 +1 @@ +ʱļ \ No newline at end of file diff --git a/adapter/src/test/testng.xml b/adapter/src/test/testng.xml new file mode 100644 index 000000000000..1fa0f7461a59 --- /dev/null +++ b/adapter/src/test/testng.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/bridge/src/main/java/com/iluwatar/App.java b/bridge/src/main/java/com/iluwatar/bridge/App.java similarity index 94% rename from bridge/src/main/java/com/iluwatar/App.java rename to bridge/src/main/java/com/iluwatar/bridge/App.java index 800b9815cd0a..a91cc1eaa363 100644 --- a/bridge/src/main/java/com/iluwatar/App.java +++ b/bridge/src/main/java/com/iluwatar/bridge/App.java @@ -1,35 +1,35 @@ -package com.iluwatar; - -/** - * - * In Bridge pattern both abstraction (MagicWeapon) - * and implementation (MagicWeaponImp) have their - * own class hierarchies. The interface of the - * implementations can be changed without affecting - * the clients. - * - */ -public class App -{ - public static void main( String[] args ) - { - BlindingMagicWeapon blindingMagicWeapon = new BlindingMagicWeapon(new Excalibur()); - blindingMagicWeapon.wield(); - blindingMagicWeapon.blind(); - blindingMagicWeapon.swing(); - blindingMagicWeapon.unwield(); - - FlyingMagicWeapon flyingMagicWeapon = new FlyingMagicWeapon(new Mjollnir()); - flyingMagicWeapon.wield(); - flyingMagicWeapon.fly(); - flyingMagicWeapon.swing(); - flyingMagicWeapon.unwield(); - - SoulEatingMagicWeapon soulEatingMagicWeapon = new SoulEatingMagicWeapon(new Stormbringer()); - soulEatingMagicWeapon.wield(); - soulEatingMagicWeapon.swing(); - soulEatingMagicWeapon.eatSoul(); - soulEatingMagicWeapon.unwield(); - - } -} +package com.iluwatar.bridge; + +/** + * + * In Bridge pattern both abstraction (MagicWeapon) + * and implementation (MagicWeaponImp) have their + * own class hierarchies. The interface of the + * implementations can be changed without affecting + * the clients. + * + */ +public class App +{ + public static void main( String[] args ) + { + BlindingMagicWeapon blindingMagicWeapon = new BlindingMagicWeapon(new Excalibur()); + blindingMagicWeapon.wield(); + blindingMagicWeapon.blind(); + blindingMagicWeapon.swing(); + blindingMagicWeapon.unwield(); + + FlyingMagicWeapon flyingMagicWeapon = new FlyingMagicWeapon(new Mjollnir()); + flyingMagicWeapon.wield(); + flyingMagicWeapon.fly(); + flyingMagicWeapon.swing(); + flyingMagicWeapon.unwield(); + + SoulEatingMagicWeapon soulEatingMagicWeapon = new SoulEatingMagicWeapon(new Stormbringer()); + soulEatingMagicWeapon.wield(); + soulEatingMagicWeapon.swing(); + soulEatingMagicWeapon.eatSoul(); + soulEatingMagicWeapon.unwield(); + + } +} diff --git a/bridge/src/main/java/com/iluwatar/BlindingMagicWeapon.java b/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeapon.java similarity index 89% rename from bridge/src/main/java/com/iluwatar/BlindingMagicWeapon.java rename to bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeapon.java index 9e61acfb2bcc..d4d3088876f4 100644 --- a/bridge/src/main/java/com/iluwatar/BlindingMagicWeapon.java +++ b/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeapon.java @@ -1,33 +1,33 @@ -package com.iluwatar; - -public class BlindingMagicWeapon extends MagicWeapon { - - public BlindingMagicWeapon(BlindingMagicWeaponImp imp) { - super(imp); - } - - @Override - public BlindingMagicWeaponImp getImp() { - return (BlindingMagicWeaponImp) imp; - } - - @Override - public void wield() { - getImp().wieldImp(); - } - - @Override - public void swing() { - getImp().swingImp(); - } - - @Override - public void unwield() { - getImp().unwieldImp(); - } - - public void blind() { - getImp().blindImp(); - } - -} +package com.iluwatar.bridge; + +public class BlindingMagicWeapon extends MagicWeapon { + + public BlindingMagicWeapon(BlindingMagicWeaponImp imp) { + super(imp); + } + + @Override + public BlindingMagicWeaponImp getImp() { + return (BlindingMagicWeaponImp) imp; + } + + @Override + public void wield() { + getImp().wieldImp(); + } + + @Override + public void swing() { + getImp().swingImp(); + } + + @Override + public void unwield() { + getImp().unwieldImp(); + } + + public void blind() { + getImp().blindImp(); + } + +} diff --git a/bridge/src/main/java/com/iluwatar/BlindingMagicWeaponImp.java b/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeaponImp.java similarity index 78% rename from bridge/src/main/java/com/iluwatar/BlindingMagicWeaponImp.java rename to bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeaponImp.java index 5f8cc7bb7dd8..c241dcc43f39 100644 --- a/bridge/src/main/java/com/iluwatar/BlindingMagicWeaponImp.java +++ b/bridge/src/main/java/com/iluwatar/bridge/BlindingMagicWeaponImp.java @@ -1,7 +1,7 @@ -package com.iluwatar; - -public abstract class BlindingMagicWeaponImp extends MagicWeaponImp { - - public abstract void blindImp(); - -} +package com.iluwatar.bridge; + +public abstract class BlindingMagicWeaponImp extends MagicWeaponImp { + + public abstract void blindImp(); + +} diff --git a/bridge/src/main/java/com/iluwatar/Excalibur.java b/bridge/src/main/java/com/iluwatar/bridge/Excalibur.java similarity index 90% rename from bridge/src/main/java/com/iluwatar/Excalibur.java rename to bridge/src/main/java/com/iluwatar/bridge/Excalibur.java index 83f3e02accc3..0da14c6172a9 100644 --- a/bridge/src/main/java/com/iluwatar/Excalibur.java +++ b/bridge/src/main/java/com/iluwatar/bridge/Excalibur.java @@ -1,25 +1,25 @@ -package com.iluwatar; - -public class Excalibur extends BlindingMagicWeaponImp { - - @Override - public void wieldImp() { - System.out.println("wielding Excalibur"); - } - - @Override - public void swingImp() { - System.out.println("swinging Excalibur"); - } - - @Override - public void unwieldImp() { - System.out.println("unwielding Excalibur"); - } - - @Override - public void blindImp() { - System.out.println("bright light streams from Excalibur blinding the enemy"); - } - -} +package com.iluwatar.bridge; + +public class Excalibur extends BlindingMagicWeaponImp { + + @Override + public void wieldImp() { + System.out.println("wielding Excalibur"); + } + + @Override + public void swingImp() { + System.out.println("swinging Excalibur"); + } + + @Override + public void unwieldImp() { + System.out.println("unwielding Excalibur"); + } + + @Override + public void blindImp() { + System.out.println("bright light streams from Excalibur blinding the enemy"); + } + +} diff --git a/bridge/src/main/java/com/iluwatar/FlyingMagicWeapon.java b/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeapon.java similarity index 89% rename from bridge/src/main/java/com/iluwatar/FlyingMagicWeapon.java rename to bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeapon.java index 2912cb7fc068..bf7fedf50540 100644 --- a/bridge/src/main/java/com/iluwatar/FlyingMagicWeapon.java +++ b/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeapon.java @@ -1,32 +1,32 @@ -package com.iluwatar; - -public class FlyingMagicWeapon extends MagicWeapon { - - public FlyingMagicWeapon(FlyingMagicWeaponImp imp) { - super(imp); - } - - public FlyingMagicWeaponImp getImp() { - return (FlyingMagicWeaponImp) imp; - } - - @Override - public void wield() { - getImp().wieldImp(); - } - - @Override - public void swing() { - getImp().swingImp(); - } - - @Override - public void unwield() { - getImp().unwieldImp(); - } - - public void fly() { - getImp().flyImp(); - } - -} +package com.iluwatar.bridge; + +public class FlyingMagicWeapon extends MagicWeapon { + + public FlyingMagicWeapon(FlyingMagicWeaponImp imp) { + super(imp); + } + + public FlyingMagicWeaponImp getImp() { + return (FlyingMagicWeaponImp) imp; + } + + @Override + public void wield() { + getImp().wieldImp(); + } + + @Override + public void swing() { + getImp().swingImp(); + } + + @Override + public void unwield() { + getImp().unwieldImp(); + } + + public void fly() { + getImp().flyImp(); + } + +} diff --git a/bridge/src/main/java/com/iluwatar/FlyingMagicWeaponImp.java b/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeaponImp.java similarity index 78% rename from bridge/src/main/java/com/iluwatar/FlyingMagicWeaponImp.java rename to bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeaponImp.java index 5860f110dd6b..83648f622c83 100644 --- a/bridge/src/main/java/com/iluwatar/FlyingMagicWeaponImp.java +++ b/bridge/src/main/java/com/iluwatar/bridge/FlyingMagicWeaponImp.java @@ -1,7 +1,7 @@ -package com.iluwatar; - -public abstract class FlyingMagicWeaponImp extends MagicWeaponImp { - - public abstract void flyImp(); - -} +package com.iluwatar.bridge; + +public abstract class FlyingMagicWeaponImp extends MagicWeaponImp { + + public abstract void flyImp(); + +} diff --git a/bridge/src/main/java/com/iluwatar/MagicWeapon.java b/bridge/src/main/java/com/iluwatar/bridge/MagicWeapon.java similarity index 87% rename from bridge/src/main/java/com/iluwatar/MagicWeapon.java rename to bridge/src/main/java/com/iluwatar/bridge/MagicWeapon.java index 0773a09fc921..252f42104550 100644 --- a/bridge/src/main/java/com/iluwatar/MagicWeapon.java +++ b/bridge/src/main/java/com/iluwatar/bridge/MagicWeapon.java @@ -1,26 +1,26 @@ -package com.iluwatar; - -/** - * - * Abstraction interface. - * - */ -public abstract class MagicWeapon { - - protected MagicWeaponImp imp; - - public MagicWeapon(MagicWeaponImp imp) { - this.imp = imp; - } - - public abstract void wield(); - - public abstract void swing(); - - public abstract void unwield(); - - public MagicWeaponImp getImp() { - return imp; - } - -} +package com.iluwatar.bridge; + +/** + * + * Abstraction interface. + * + */ +public abstract class MagicWeapon { + + protected MagicWeaponImp imp; + + public MagicWeapon(MagicWeaponImp imp) { + this.imp = imp; + } + + public abstract void wield(); + + public abstract void swing(); + + public abstract void unwield(); + + public MagicWeaponImp getImp() { + return imp; + } + +} diff --git a/bridge/src/main/java/com/iluwatar/MagicWeaponImp.java b/bridge/src/main/java/com/iluwatar/bridge/MagicWeaponImp.java similarity index 83% rename from bridge/src/main/java/com/iluwatar/MagicWeaponImp.java rename to bridge/src/main/java/com/iluwatar/bridge/MagicWeaponImp.java index d657e517718d..1ee64f54677a 100644 --- a/bridge/src/main/java/com/iluwatar/MagicWeaponImp.java +++ b/bridge/src/main/java/com/iluwatar/bridge/MagicWeaponImp.java @@ -1,16 +1,16 @@ -package com.iluwatar; - -/** - * - * Implementation interface. - * - */ -public abstract class MagicWeaponImp { - - public abstract void wieldImp(); - - public abstract void swingImp(); - - public abstract void unwieldImp(); - -} +package com.iluwatar.bridge; + +/** + * + * Implementation interface. + * + */ +public abstract class MagicWeaponImp { + + public abstract void wieldImp(); + + public abstract void swingImp(); + + public abstract void unwieldImp(); + +} diff --git a/bridge/src/main/java/com/iluwatar/Mjollnir.java b/bridge/src/main/java/com/iluwatar/bridge/Mjollnir.java similarity index 90% rename from bridge/src/main/java/com/iluwatar/Mjollnir.java rename to bridge/src/main/java/com/iluwatar/bridge/Mjollnir.java index 4ba68ab6cda7..d0209bdc28ae 100644 --- a/bridge/src/main/java/com/iluwatar/Mjollnir.java +++ b/bridge/src/main/java/com/iluwatar/bridge/Mjollnir.java @@ -1,25 +1,25 @@ -package com.iluwatar; - -public class Mjollnir extends FlyingMagicWeaponImp { - - @Override - public void wieldImp() { - System.out.println("wielding Mjollnir"); - } - - @Override - public void swingImp() { - System.out.println("swinging Mjollnir"); - } - - @Override - public void unwieldImp() { - System.out.println("unwielding Mjollnir"); - } - - @Override - public void flyImp() { - System.out.println("Mjollnir hits the enemy in the air and returns back to the owner's hand"); - } - -} +package com.iluwatar.bridge; + +public class Mjollnir extends FlyingMagicWeaponImp { + + @Override + public void wieldImp() { + System.out.println("wielding Mjollnir"); + } + + @Override + public void swingImp() { + System.out.println("swinging Mjollnir"); + } + + @Override + public void unwieldImp() { + System.out.println("unwielding Mjollnir"); + } + + @Override + public void flyImp() { + System.out.println("Mjollnir hits the enemy in the air and returns back to the owner's hand"); + } + +} diff --git a/bridge/src/main/java/com/iluwatar/SoulEatingMagicWeapon.java b/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeapon.java similarity index 89% rename from bridge/src/main/java/com/iluwatar/SoulEatingMagicWeapon.java rename to bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeapon.java index 20e55294e0f2..6d8b553ba05d 100644 --- a/bridge/src/main/java/com/iluwatar/SoulEatingMagicWeapon.java +++ b/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeapon.java @@ -1,33 +1,33 @@ -package com.iluwatar; - -public class SoulEatingMagicWeapon extends MagicWeapon { - - public SoulEatingMagicWeapon(SoulEatingMagicWeaponImp imp) { - super(imp); - } - - @Override - public SoulEatingMagicWeaponImp getImp() { - return (SoulEatingMagicWeaponImp) imp; - } - - @Override - public void wield() { - getImp().wieldImp(); - } - - @Override - public void swing() { - getImp().swingImp(); - } - - @Override - public void unwield() { - getImp().unwieldImp(); - } - - public void eatSoul() { - getImp().eatSoulImp(); - } - -} +package com.iluwatar.bridge; + +public class SoulEatingMagicWeapon extends MagicWeapon { + + public SoulEatingMagicWeapon(SoulEatingMagicWeaponImp imp) { + super(imp); + } + + @Override + public SoulEatingMagicWeaponImp getImp() { + return (SoulEatingMagicWeaponImp) imp; + } + + @Override + public void wield() { + getImp().wieldImp(); + } + + @Override + public void swing() { + getImp().swingImp(); + } + + @Override + public void unwield() { + getImp().unwieldImp(); + } + + public void eatSoul() { + getImp().eatSoulImp(); + } + +} diff --git a/bridge/src/main/java/com/iluwatar/SoulEatingMagicWeaponImp.java b/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeaponImp.java similarity index 79% rename from bridge/src/main/java/com/iluwatar/SoulEatingMagicWeaponImp.java rename to bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeaponImp.java index 761a1a8749ae..5549ebecb414 100644 --- a/bridge/src/main/java/com/iluwatar/SoulEatingMagicWeaponImp.java +++ b/bridge/src/main/java/com/iluwatar/bridge/SoulEatingMagicWeaponImp.java @@ -1,7 +1,7 @@ -package com.iluwatar; - -public abstract class SoulEatingMagicWeaponImp extends MagicWeaponImp { - - public abstract void eatSoulImp(); - -} +package com.iluwatar.bridge; + +public abstract class SoulEatingMagicWeaponImp extends MagicWeaponImp { + + public abstract void eatSoulImp(); + +} diff --git a/bridge/src/main/java/com/iluwatar/Stormbringer.java b/bridge/src/main/java/com/iluwatar/bridge/Stormbringer.java similarity index 90% rename from bridge/src/main/java/com/iluwatar/Stormbringer.java rename to bridge/src/main/java/com/iluwatar/bridge/Stormbringer.java index 673ed99a7218..6e41ae0f33c1 100644 --- a/bridge/src/main/java/com/iluwatar/Stormbringer.java +++ b/bridge/src/main/java/com/iluwatar/bridge/Stormbringer.java @@ -1,25 +1,25 @@ -package com.iluwatar; - -public class Stormbringer extends SoulEatingMagicWeaponImp { - - @Override - public void wieldImp() { - System.out.println("wielding Stormbringer"); - } - - @Override - public void swingImp() { - System.out.println("swinging Stormbringer"); - } - - @Override - public void unwieldImp() { - System.out.println("unwielding Stormbringer"); - } - - @Override - public void eatSoulImp() { - System.out.println("Stormbringer devours the enemy's soul"); - } - -} +package com.iluwatar.bridge; + +public class Stormbringer extends SoulEatingMagicWeaponImp { + + @Override + public void wieldImp() { + System.out.println("wielding Stormbringer"); + } + + @Override + public void swingImp() { + System.out.println("swinging Stormbringer"); + } + + @Override + public void unwieldImp() { + System.out.println("unwielding Stormbringer"); + } + + @Override + public void eatSoulImp() { + System.out.println("Stormbringer devours the enemy's soul"); + } + +} diff --git a/builder/.gitignore b/builder/.gitignore index b83d22266ac8..e2540458518e 100644 --- a/builder/.gitignore +++ b/builder/.gitignore @@ -1 +1,2 @@ /target/ +/bin diff --git a/builder/src/main/java/com/iluwatar/App.java b/builder/src/main/java/com/iluwatar/builder/App.java similarity index 56% rename from builder/src/main/java/com/iluwatar/App.java rename to builder/src/main/java/com/iluwatar/builder/App.java index 1eea20c10e08..0d8f587adf0d 100644 --- a/builder/src/main/java/com/iluwatar/App.java +++ b/builder/src/main/java/com/iluwatar/builder/App.java @@ -1,47 +1,49 @@ -package com.iluwatar; - -import com.iluwatar.Hero.HeroBuilder; - -/** - * - * This is the Builder pattern variation as described by - * Joshua Bloch in Effective Java 2nd Edition. - * - * We want to build Hero objects, but its construction - * is complex because of the many parameters needed. To - * aid the user we introduce HeroBuilder class. HeroBuilder - * takes the minimum parameters to build Hero object in - * its constructor. After that additional configuration - * for the Hero object can be done using the fluent - * HeroBuilder interface. When configuration is ready - * the build method is called to receive the final Hero - * object. - * - */ -public class App -{ - public static void main( String[] args ) - { - - Hero mage = new HeroBuilder(Profession.MAGE, "Riobard") - .withHairColor(HairColor.BLACK) - .withWeapon(Weapon.DAGGER) - .build(); - System.out.println(mage); - - Hero warrior = new HeroBuilder(Profession.WARRIOR, "Amberjill") - .withHairColor(HairColor.BLOND) - .withHairType(HairType.LONG_CURLY) - .withArmor(Armor.CHAIN_MAIL) - .withWeapon(Weapon.SWORD) - .build(); - System.out.println(warrior); - - Hero thief = new HeroBuilder(Profession.THIEF, "Desmond") - .withHairType(HairType.BOLD) - .withWeapon(Weapon.BOW) - .build(); - System.out.println(thief); - - } -} +package com.iluwatar.builder; + +import com.iluwatar.builder.Hero.HeroBuilder; + + + +/** + * + * This is the Builder pattern variation as described by + * Joshua Bloch in Effective Java 2nd Edition. + * + * We want to build Hero objects, but its construction + * is complex because of the many parameters needed. To + * aid the user we introduce HeroBuilder class. HeroBuilder + * takes the minimum parameters to build Hero object in + * its constructor. After that additional configuration + * for the Hero object can be done using the fluent + * HeroBuilder interface. When configuration is ready + * the build method is called to receive the final Hero + * object. + * + */ +public class App +{ + public static void main( String[] args ) + { + + Hero mage = new HeroBuilder(Profession.MAGE, "Riobard") + .withHairColor(HairColor.BLACK) + .withWeapon(Weapon.DAGGER) + .build(); + System.out.println(mage); + + Hero warrior = new HeroBuilder(Profession.WARRIOR, "Amberjill") + .withHairColor(HairColor.BLOND) + .withHairType(HairType.LONG_CURLY) + .withArmor(Armor.CHAIN_MAIL) + .withWeapon(Weapon.SWORD) + .build(); + System.out.println(warrior); + + Hero thief = new HeroBuilder(Profession.THIEF, "Desmond") + .withHairType(HairType.BOLD) + .withWeapon(Weapon.BOW) + .build(); + System.out.println(thief); + + } +} diff --git a/builder/src/main/java/com/iluwatar/Armor.java b/builder/src/main/java/com/iluwatar/builder/Armor.java similarity index 89% rename from builder/src/main/java/com/iluwatar/Armor.java rename to builder/src/main/java/com/iluwatar/builder/Armor.java index 0c7c753b2424..a3f4d289dd32 100644 --- a/builder/src/main/java/com/iluwatar/Armor.java +++ b/builder/src/main/java/com/iluwatar/builder/Armor.java @@ -1,19 +1,19 @@ -package com.iluwatar; - -public enum Armor { - - CLOTHES, LEATHER, CHAIN_MAIL, PLATE_MAIL; - - @Override - public String toString() { - String s = ""; - switch(this) { - case CLOTHES: s = "clothes"; break; - case LEATHER: s = "leather armor"; break; - case CHAIN_MAIL: s = "chain mail"; break; - case PLATE_MAIL: s = "plate mail"; break; - } - return s; - } - -} +package com.iluwatar.builder; + +public enum Armor { + + CLOTHES, LEATHER, CHAIN_MAIL, PLATE_MAIL; + + @Override + public String toString() { + String s = ""; + switch(this) { + case CLOTHES: s = "clothes"; break; + case LEATHER: s = "leather armor"; break; + case CHAIN_MAIL: s = "chain mail"; break; + case PLATE_MAIL: s = "plate mail"; break; + } + return s; + } + +} diff --git a/builder/src/main/java/com/iluwatar/HairColor.java b/builder/src/main/java/com/iluwatar/builder/HairColor.java similarity index 88% rename from builder/src/main/java/com/iluwatar/HairColor.java rename to builder/src/main/java/com/iluwatar/builder/HairColor.java index ffac28906872..16d74db207ca 100644 --- a/builder/src/main/java/com/iluwatar/HairColor.java +++ b/builder/src/main/java/com/iluwatar/builder/HairColor.java @@ -1,20 +1,20 @@ -package com.iluwatar; - -public enum HairColor { - - WHITE, BLOND, RED, BROWN, BLACK; - - @Override - public String toString() { - String s = ""; - switch(this) { - case WHITE: s = "white"; break; - case BLOND: s = "blond"; break; - case RED: s = "red"; break; - case BROWN: s = "brown"; break; - case BLACK: s = "black"; break; - } - return s; - } - -} +package com.iluwatar.builder; + +public enum HairColor { + + WHITE, BLOND, RED, BROWN, BLACK; + + @Override + public String toString() { + String s = ""; + switch(this) { + case WHITE: s = "white"; break; + case BLOND: s = "blond"; break; + case RED: s = "red"; break; + case BROWN: s = "brown"; break; + case BLACK: s = "black"; break; + } + return s; + } + +} diff --git a/builder/src/main/java/com/iluwatar/HairType.java b/builder/src/main/java/com/iluwatar/builder/HairType.java similarity index 89% rename from builder/src/main/java/com/iluwatar/HairType.java rename to builder/src/main/java/com/iluwatar/builder/HairType.java index 9766b29e27c3..8d28683ff23e 100644 --- a/builder/src/main/java/com/iluwatar/HairType.java +++ b/builder/src/main/java/com/iluwatar/builder/HairType.java @@ -1,20 +1,20 @@ -package com.iluwatar; - -public enum HairType { - - BOLD, SHORT, CURLY, LONG_STRAIGHT, LONG_CURLY; - - @Override - public String toString() { - String s = ""; - switch(this) { - case BOLD: s = "bold"; break; - case SHORT: s = "short"; break; - case CURLY: s = "curly"; break; - case LONG_STRAIGHT: s = "long straight"; break; - case LONG_CURLY: s = "long curly"; break; - } - return s; - } - -} +package com.iluwatar.builder; + +public enum HairType { + + BOLD, SHORT, CURLY, LONG_STRAIGHT, LONG_CURLY; + + @Override + public String toString() { + String s = ""; + switch(this) { + case BOLD: s = "bold"; break; + case SHORT: s = "short"; break; + case CURLY: s = "curly"; break; + case LONG_STRAIGHT: s = "long straight"; break; + case LONG_CURLY: s = "long curly"; break; + } + return s; + } + +} diff --git a/builder/src/main/java/com/iluwatar/Hero.java b/builder/src/main/java/com/iluwatar/builder/Hero.java similarity index 85% rename from builder/src/main/java/com/iluwatar/Hero.java rename to builder/src/main/java/com/iluwatar/builder/Hero.java index e728fab7a99b..19239d07956a 100644 --- a/builder/src/main/java/com/iluwatar/Hero.java +++ b/builder/src/main/java/com/iluwatar/builder/Hero.java @@ -1,127 +1,128 @@ -package com.iluwatar; - -/** - * - * The class with many parameters. - * - */ -public class Hero { - - private final Profession profession; - private final String name; - private final HairType hairType; - private final HairColor hairColor; - private final Armor armor; - private final Weapon weapon; - - public Profession getProfession() { - return profession; - } - - public String getName() { - return name; - } - - public HairType getHairType() { - return hairType; - } - - public HairColor getHairColor() { - return hairColor; - } - - public Armor getArmor() { - return armor; - } - - public Weapon getWeapon() { - return weapon; - } - - @Override - public String toString() { - - StringBuilder sb = new StringBuilder(); - sb.append(profession); - sb.append(" named "); - sb.append(name); - if (hairColor != null || hairType != null) { - sb.append(" with "); - if (hairColor != null) { - sb.append(hairColor); - sb.append(" "); - } - if (hairType != null) { - sb.append(hairType); - sb.append(" "); - } - sb.append(hairType != HairType.BOLD ? "hair" : "head"); - } - if (armor != null) { - sb.append(" wearing "); - sb.append(armor); - } - if (weapon != null) { - sb.append(" and wielding "); - sb.append(weapon); - } - sb.append("."); - 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. - * - */ - public static class HeroBuilder { - - private final Profession profession; - private final String name; - private HairType hairType; - private HairColor hairColor; - private Armor armor; - private Weapon weapon; - - public HeroBuilder(Profession profession, String name) { - if (profession == null || name == null) { - throw new NullPointerException("profession and name can not be null"); - } - this.profession = profession; - this.name = name; - } - - public HeroBuilder withHairType(HairType hairType) { - this.hairType = hairType; - return this; - } - - public HeroBuilder withHairColor(HairColor hairColor) { - this.hairColor = hairColor; - return this; - } - - public HeroBuilder withArmor(Armor armor) { - this.armor = armor; - return this; - } - - public HeroBuilder withWeapon(Weapon weapon) { - this.weapon = weapon; - return this; - } - - public Hero build() { - return new Hero(this); - } - } -} +package com.iluwatar.builder; + + +/** + * + * The class with many parameters. + * + */ +public class Hero { + + private final Profession profession; + private final String name; + private final HairType hairType; + private final HairColor hairColor; + private final Armor armor; + private final Weapon weapon; + + public Profession getProfession() { + return profession; + } + + public String getName() { + return name; + } + + public HairType getHairType() { + return hairType; + } + + public HairColor getHairColor() { + return hairColor; + } + + public Armor getArmor() { + return armor; + } + + public Weapon getWeapon() { + return weapon; + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append(profession); + sb.append(" named "); + sb.append(name); + if (hairColor != null || hairType != null) { + sb.append(" with "); + if (hairColor != null) { + sb.append(hairColor); + sb.append(" "); + } + if (hairType != null) { + sb.append(hairType); + sb.append(" "); + } + sb.append(hairType != HairType.BOLD ? "hair" : "head"); + } + if (armor != null) { + sb.append(" wearing "); + sb.append(armor); + } + if (weapon != null) { + sb.append(" and wielding "); + sb.append(weapon); + } + sb.append("."); + return sb.toString(); + } + + private Hero(HeroBuilder builder) { + profession = builder.profession; + name = builder.name; + hairColor = builder.hairColor; + hairType = builder.hairType; + weapon = builder.weapon; + armor = builder.armor; + } + + /** + * + * The builder class. + * + */ + public static class HeroBuilder { + + private final Profession profession; + private final String name; + private HairType hairType; + private HairColor hairColor; + private Armor armor; + private Weapon weapon; + + public HeroBuilder(Profession profession, String name) { + if (profession == null || name == null) { + throw new NullPointerException("profession and name can not be null"); + } + this.profession = profession; + this.name = name; + } + + public HeroBuilder withHairType(HairType hairType) { + this.hairType = hairType; + return this; + } + + public HeroBuilder withHairColor(HairColor hairColor) { + this.hairColor = hairColor; + return this; + } + + public HeroBuilder withArmor(Armor armor) { + this.armor = armor; + return this; + } + + public HeroBuilder withWeapon(Weapon weapon) { + this.weapon = weapon; + return this; + } + + public Hero build() { + return new Hero(this); + } + } +} diff --git a/builder/src/main/java/com/iluwatar/Profession.java b/builder/src/main/java/com/iluwatar/builder/Profession.java similarity index 87% rename from builder/src/main/java/com/iluwatar/Profession.java rename to builder/src/main/java/com/iluwatar/builder/Profession.java index a0e02a994e86..27de558d46e5 100644 --- a/builder/src/main/java/com/iluwatar/Profession.java +++ b/builder/src/main/java/com/iluwatar/builder/Profession.java @@ -1,19 +1,19 @@ -package com.iluwatar; - -public enum Profession { - - WARRIOR, THIEF, MAGE, PRIEST; - - @Override - public String toString() { - String s = ""; - switch(this) { - case WARRIOR: s = "Warrior"; break; - case THIEF: s = "Thief"; break; - case MAGE: s = "Mage"; break; - case PRIEST: s = "Priest"; break; - } - return s; - } - -} +package com.iluwatar.builder; + +public enum Profession { + + WARRIOR, THIEF, MAGE, PRIEST; + + @Override + public String toString() { + String s = ""; + switch(this) { + case WARRIOR: s = "Warrior"; break; + case THIEF: s = "Thief"; break; + case MAGE: s = "Mage"; break; + case PRIEST: s = "Priest"; break; + } + return s; + } + +} diff --git a/builder/src/main/java/com/iluwatar/Weapon.java b/builder/src/main/java/com/iluwatar/builder/Weapon.java similarity index 88% rename from builder/src/main/java/com/iluwatar/Weapon.java rename to builder/src/main/java/com/iluwatar/builder/Weapon.java index b48977b50154..6efa21ca6319 100644 --- a/builder/src/main/java/com/iluwatar/Weapon.java +++ b/builder/src/main/java/com/iluwatar/builder/Weapon.java @@ -1,20 +1,20 @@ -package com.iluwatar; - -public enum Weapon { - - DAGGER, SWORD, AXE, WARHAMMER, BOW; - - @Override - public String toString() { - String s = ""; - switch(this) { - case DAGGER: s = "dagger"; break; - case SWORD: s = "sword"; break; - case AXE: s = "axe"; break; - case WARHAMMER: s = "warhammer"; break; - case BOW: s = "bow"; break; - } - return s; - } - -} +package com.iluwatar.builder; + +public enum Weapon { + + DAGGER, SWORD, AXE, WARHAMMER, BOW; + + @Override + public String toString() { + String s = ""; + switch(this) { + case DAGGER: s = "dagger"; break; + case SWORD: s = "sword"; break; + case AXE: s = "axe"; break; + case WARHAMMER: s = "warhammer"; break; + case BOW: s = "bow"; break; + } + return s; + } + +} diff --git a/chain/src/main/java/com/iluwatar/App.java b/chain/src/main/java/com/iluwatar/App.java deleted file mode 100644 index 92b85b54d0da..000000000000 --- a/chain/src/main/java/com/iluwatar/App.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.iluwatar; - -/** - * - * Chain of Responsibility organizes request handlers (RequestHandler) into - * a chain where each handler has a chance to act on the request on its - * turn. In this example the king (OrcKing) makes requests and the military - * orcs (OrcCommander, OrcOfficer, OrcSoldier) form the handler chain. - * - */ -public class App -{ - public static void main( String[] args ) - { - - OrcKing king = new OrcKing(); - king.makeRequest(new Request(RequestType.DEFEND_CASTLE, "defend castle")); - king.makeRequest(new Request(RequestType.TORTURE_PRISONER, "torture prisoner")); - king.makeRequest(new Request(RequestType.COLLECT_TAX, "collect tax")); - - } -} diff --git a/chain/src/main/java/com/iluwatar/chain/App.java b/chain/src/main/java/com/iluwatar/chain/App.java new file mode 100644 index 000000000000..2b846f9314ed --- /dev/null +++ b/chain/src/main/java/com/iluwatar/chain/App.java @@ -0,0 +1,23 @@ +package com.iluwatar.chain; + + +/** + * + * Chain of Responsibility organizes request handlers (RequestHandler) into + * a chain where each handler has a chance to act on the request on its + * turn. In this example the king (OrcKing) makes requests and the military + * orcs (OrcCommander, OrcOfficer, OrcSoldier) form the handler chain. + * + */ +public class App +{ + public static void main( String[] args ) + { + + OrcKing king = new OrcKing(); + king.makeRequest(new Request(RequestType.DEFEND_CASTLE, "defend castle")); + king.makeRequest(new Request(RequestType.TORTURE_PRISONER, "torture prisoner")); + king.makeRequest(new Request(RequestType.COLLECT_TAX, "collect tax")); + + } +} diff --git a/chain/src/main/java/com/iluwatar/OrcCommander.java b/chain/src/main/java/com/iluwatar/chain/OrcCommander.java similarity index 89% rename from chain/src/main/java/com/iluwatar/OrcCommander.java rename to chain/src/main/java/com/iluwatar/chain/OrcCommander.java index dc0c403d047e..6407c09f6a6b 100644 --- a/chain/src/main/java/com/iluwatar/OrcCommander.java +++ b/chain/src/main/java/com/iluwatar/chain/OrcCommander.java @@ -1,22 +1,22 @@ -package com.iluwatar; - -public class OrcCommander extends RequestHandler { - - public OrcCommander(RequestHandler handler) { - super(handler); - } - - @Override - public void handleRequest(Request req) { - if (req.getRequestType().equals(RequestType.DEFEND_CASTLE)) { - printHandling(req); - } else { - super.handleRequest(req); - } - } - - @Override - public String toString() { - return "Orc commander"; - } -} +package com.iluwatar.chain; + +public class OrcCommander extends RequestHandler { + + public OrcCommander(RequestHandler handler) { + super(handler); + } + + @Override + public void handleRequest(Request req) { + if (req.getRequestType().equals(RequestType.DEFEND_CASTLE)) { + printHandling(req); + } else { + super.handleRequest(req); + } + } + + @Override + public String toString() { + return "Orc commander"; + } +} diff --git a/chain/src/main/java/com/iluwatar/OrcKing.java b/chain/src/main/java/com/iluwatar/chain/OrcKing.java similarity index 87% rename from chain/src/main/java/com/iluwatar/OrcKing.java rename to chain/src/main/java/com/iluwatar/chain/OrcKing.java index dc70494ef39c..5feff1796868 100644 --- a/chain/src/main/java/com/iluwatar/OrcKing.java +++ b/chain/src/main/java/com/iluwatar/chain/OrcKing.java @@ -1,24 +1,24 @@ -package com.iluwatar; - -/** - * - * Makes requests that are handled by the chain. - * - */ -public class OrcKing { - - RequestHandler chain; - - public OrcKing() { - buildChain(); - } - - private void buildChain() { - chain = new OrcCommander(new OrcOfficer(new OrcSoldier(null))); - } - - public void makeRequest(Request req) { - chain.handleRequest(req); - } - -} +package com.iluwatar.chain; + +/** + * + * Makes requests that are handled by the chain. + * + */ +public class OrcKing { + + RequestHandler chain; + + public OrcKing() { + buildChain(); + } + + private void buildChain() { + chain = new OrcCommander(new OrcOfficer(new OrcSoldier(null))); + } + + public void makeRequest(Request req) { + chain.handleRequest(req); + } + +} diff --git a/chain/src/main/java/com/iluwatar/OrcOfficer.java b/chain/src/main/java/com/iluwatar/chain/OrcOfficer.java similarity index 89% rename from chain/src/main/java/com/iluwatar/OrcOfficer.java rename to chain/src/main/java/com/iluwatar/chain/OrcOfficer.java index dfe414182502..4e3b618c5c84 100644 --- a/chain/src/main/java/com/iluwatar/OrcOfficer.java +++ b/chain/src/main/java/com/iluwatar/chain/OrcOfficer.java @@ -1,23 +1,23 @@ -package com.iluwatar; - -public class OrcOfficer extends RequestHandler { - - public OrcOfficer(RequestHandler handler) { - super(handler); - } - - @Override - public void handleRequest(Request req) { - if (req.getRequestType().equals(RequestType.TORTURE_PRISONER)) { - printHandling(req); - } else { - super.handleRequest(req); - } - } - - @Override - public String toString() { - return "Orc officer"; - } - -} +package com.iluwatar.chain; + +public class OrcOfficer extends RequestHandler { + + public OrcOfficer(RequestHandler handler) { + super(handler); + } + + @Override + public void handleRequest(Request req) { + if (req.getRequestType().equals(RequestType.TORTURE_PRISONER)) { + printHandling(req); + } else { + super.handleRequest(req); + } + } + + @Override + public String toString() { + return "Orc officer"; + } + +} diff --git a/chain/src/main/java/com/iluwatar/OrcSoldier.java b/chain/src/main/java/com/iluwatar/chain/OrcSoldier.java similarity index 89% rename from chain/src/main/java/com/iluwatar/OrcSoldier.java rename to chain/src/main/java/com/iluwatar/chain/OrcSoldier.java index 0e5a5a603477..294888f9b4e4 100644 --- a/chain/src/main/java/com/iluwatar/OrcSoldier.java +++ b/chain/src/main/java/com/iluwatar/chain/OrcSoldier.java @@ -1,22 +1,22 @@ -package com.iluwatar; - -public class OrcSoldier extends RequestHandler { - - public OrcSoldier(RequestHandler handler) { - super(handler); - } - - @Override - public void handleRequest(Request req) { - if (req.getRequestType().equals(RequestType.COLLECT_TAX)) { - printHandling(req); - } else { - super.handleRequest(req); - } - } - - @Override - public String toString() { - return "Orc soldier"; - } -} +package com.iluwatar.chain; + +public class OrcSoldier extends RequestHandler { + + public OrcSoldier(RequestHandler handler) { + super(handler); + } + + @Override + public void handleRequest(Request req) { + if (req.getRequestType().equals(RequestType.COLLECT_TAX)) { + printHandling(req); + } else { + super.handleRequest(req); + } + } + + @Override + public String toString() { + return "Orc soldier"; + } +} diff --git a/chain/src/main/java/com/iluwatar/Request.java b/chain/src/main/java/com/iluwatar/chain/Request.java similarity index 92% rename from chain/src/main/java/com/iluwatar/Request.java rename to chain/src/main/java/com/iluwatar/chain/Request.java index 00cd239723d1..14ecd08a4d16 100644 --- a/chain/src/main/java/com/iluwatar/Request.java +++ b/chain/src/main/java/com/iluwatar/chain/Request.java @@ -1,33 +1,33 @@ -package com.iluwatar; - -public class Request { - - private String requestDescription; - private RequestType requestType; - - public Request(RequestType requestType, String requestDescription) { - this.setRequestType(requestType); - this.setRequestDescription(requestDescription); - } - - public String getRequestDescription() { - return requestDescription; - } - - public void setRequestDescription(String requestDescription) { - this.requestDescription = requestDescription; - } - - public RequestType getRequestType() { - return requestType; - } - - public void setRequestType(RequestType requestType) { - this.requestType = requestType; - } - - @Override - public String toString() { - return getRequestDescription(); - } -} +package com.iluwatar.chain; + +public class Request { + + private String requestDescription; + private RequestType requestType; + + public Request(RequestType requestType, String requestDescription) { + this.setRequestType(requestType); + this.setRequestDescription(requestDescription); + } + + public String getRequestDescription() { + return requestDescription; + } + + public void setRequestDescription(String requestDescription) { + this.requestDescription = requestDescription; + } + + public RequestType getRequestType() { + return requestType; + } + + public void setRequestType(RequestType requestType) { + this.requestType = requestType; + } + + @Override + public String toString() { + return getRequestDescription(); + } +} diff --git a/chain/src/main/java/com/iluwatar/RequestHandler.java b/chain/src/main/java/com/iluwatar/chain/RequestHandler.java similarity index 90% rename from chain/src/main/java/com/iluwatar/RequestHandler.java rename to chain/src/main/java/com/iluwatar/chain/RequestHandler.java index 2eb5176c0ae4..ad7386edc5cf 100644 --- a/chain/src/main/java/com/iluwatar/RequestHandler.java +++ b/chain/src/main/java/com/iluwatar/chain/RequestHandler.java @@ -1,23 +1,23 @@ -package com.iluwatar; - -public abstract class RequestHandler { - - private RequestHandler next; - - public RequestHandler(RequestHandler next) { - this.next = next; - } - - public void handleRequest(Request req) { - if (next != null) { - next.handleRequest(req); - } - } - - protected void printHandling(Request req) { - System.out.println(this + " handling request \"" + req + "\""); - } - - @Override - public abstract String toString(); -} +package com.iluwatar.chain; + +public abstract class RequestHandler { + + private RequestHandler next; + + public RequestHandler(RequestHandler next) { + this.next = next; + } + + public void handleRequest(Request req) { + if (next != null) { + next.handleRequest(req); + } + } + + protected void printHandling(Request req) { + System.out.println(this + " handling request \"" + req + "\""); + } + + @Override + public abstract String toString(); +} diff --git a/chain/src/main/java/com/iluwatar/RequestType.java b/chain/src/main/java/com/iluwatar/chain/RequestType.java similarity index 72% rename from chain/src/main/java/com/iluwatar/RequestType.java rename to chain/src/main/java/com/iluwatar/chain/RequestType.java index 9f896a54d542..16bbe1ade19a 100644 --- a/chain/src/main/java/com/iluwatar/RequestType.java +++ b/chain/src/main/java/com/iluwatar/chain/RequestType.java @@ -1,9 +1,9 @@ -package com.iluwatar; - -public enum RequestType { - - DEFEND_CASTLE, - TORTURE_PRISONER, - COLLECT_TAX - -} +package com.iluwatar.chain; + +public enum RequestType { + + DEFEND_CASTLE, + TORTURE_PRISONER, + COLLECT_TAX + +} diff --git a/command/.gitignore b/command/.gitignore new file mode 100644 index 000000000000..5e56e040ec09 --- /dev/null +++ b/command/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/command/out/.gitignore b/command/out/.gitignore new file mode 100644 index 000000000000..5e56e040ec09 --- /dev/null +++ b/command/out/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/command/src/main/java/com/iluwatar/App.java b/command/src/main/java/com/iluwatar/App.java index 0648f8f41620..c0eb867e8a4b 100644 --- a/command/src/main/java/com/iluwatar/App.java +++ b/command/src/main/java/com/iluwatar/App.java @@ -1,27 +1,29 @@ -package com.iluwatar; - -/** - * - * In Command pattern actions are objects that can - * be executed and undone. The commands in this example - * are spells cast by the wizard on the goblin. - * - */ -public class App -{ - public static void main( String[] args ) - { - Wizard wizard = new Wizard(); - Goblin goblin = new Goblin(); - - goblin.printStatus(); - - wizard.castSpell(new ShrinkSpell(), goblin); - goblin.printStatus(); - - wizard.castSpell(new InvisibilitySpell(), goblin); - goblin.printStatus(); - wizard.undoLastSpell(); - goblin.printStatus(); - } -} +package com.iluwatar; + + + +/** + * + * In Command pattern actions are objects that can + * be executed and undone. The commands in this example + * are spells cast by the wizard on the goblin. + * + */ +public class App +{ + public static void main( String[] args ) + { + Wizard wizard = new Wizard(); + Goblin goblin = new Goblin(); + + goblin.printStatus(); + + wizard.castSpell(new ShrinkSpell(), goblin); + goblin.printStatus(); + + wizard.castSpell(new InvisibilitySpell(), goblin); + goblin.printStatus(); + wizard.undoLastSpell(); + goblin.printStatus(); + } +} diff --git a/command/src/test/log4j.xml b/command/src/test/log4j.xml new file mode 100644 index 000000000000..748d0c1a5271 --- /dev/null +++ b/command/src/test/log4j.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/command/src/test/resources/configure/UATApplicationContext.xml b/command/src/test/resources/configure/UATApplicationContext.xml new file mode 100644 index 000000000000..818ef52f909e --- /dev/null +++ b/command/src/test/resources/configure/UATApplicationContext.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/command/src/test/resources/configure/prop.xml b/command/src/test/resources/configure/prop.xml new file mode 100644 index 000000000000..c7afbd60d256 --- /dev/null +++ b/command/src/test/resources/configure/prop.xml @@ -0,0 +1,133 @@ + + + false + + + $JAVA_HOME + server + -server -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -Duser.timezone=GMT+8 -Djava.awt.headless=true + 8005 + + 80 + + + + true + + StartTomcat + nc.bs.tomcat.startup.BootStrapTomcatService + 15 + true + false + start|stop + + + EJB_SERVICE + nc.bs.mw.naming.EJBContainerService + 15 + true + false + start|stop + + nc.bs.mw.tran.IerpTransactionManagerProxy + nc.bs.mw.tran.IerpUserTransaction + nc.bs.mw.tran.IerpTransactionManager + nc.bs.mw.sql.UFSqlObject + nc.bs.mw.ejbsql.IerpXADataSource + + design + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + baptest807 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + bafi + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + bafi + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + iufo6103312 + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + iufo6103312 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + batm + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + batm + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + bap8 + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + bap8 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + foodmart + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + foodmart + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + \ No newline at end of file diff --git a/command/src/test/resources/configure/test_data_source.xml b/command/src/test/resources/configure/test_data_source.xml new file mode 100644 index 000000000000..2e45d5ee869c --- /dev/null +++ b/command/src/test/resources/configure/test_data_source.xml @@ -0,0 +1,19 @@ + + + + design + Z + jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive + sa + sasasa + com.microsoft.sqlserver.jdbc.SQLServerDriver + SQLSERVER2008 + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + \ No newline at end of file diff --git a/command/src/test/resources/configure/uat.properties b/command/src/test/resources/configure/uat.properties new file mode 100644 index 000000000000..f0b076c2de77 --- /dev/null +++ b/command/src/test/resources/configure/uat.properties @@ -0,0 +1,33 @@ +#project information +app_name=App Name +app_version=V6.5 + +#Common Configure +##UAPHOME path, USE '/' for path separator +nc_home= +##verify log path, USE '/' for path separator +log_file=debug.log + +# 0 don't print app log information on test result log +# 1 only print app log information on test result log for fail testcase +# 2 print application log information on test result log for all testcase +uatlog_switch=2 + +#dataFile Configure ,backup database data and restore database data +data_backup_file = c:/temp/datafile.xml + +#default datasource +default_datasource=design + +#BusinessServer configure +serverstart=off +login_username= +login_password= + +#resources settings +nc_configure_dir=resources/configure/ +testdata_config_dir=resources/data/conf/ +testdata_springfile_dir=resources/data/spring/ +testdata_objectfile_dir=resources/data/object/ +testdata_excelfile_dir=resources/data/excel/ +testdata_backup_dir=resources/data/backup/ diff --git a/command/src/test/resources/configure/uat_spring_conf.xml b/command/src/test/resources/configure/uat_spring_conf.xml new file mode 100644 index 000000000000..169a91514700 --- /dev/null +++ b/command/src/test/resources/configure/uat_spring_conf.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/command/src/test/resources/data/backup/README b/command/src/test/resources/data/backup/README new file mode 100644 index 000000000000..a5b99861a7dc --- /dev/null +++ b/command/src/test/resources/data/backup/README @@ -0,0 +1 @@ +ļ \ No newline at end of file diff --git a/command/src/test/resources/data/config/README b/command/src/test/resources/data/config/README new file mode 100644 index 000000000000..4849e2aef709 --- /dev/null +++ b/command/src/test/resources/data/config/README @@ -0,0 +1 @@ +Objectļ \ No newline at end of file diff --git a/command/src/test/resources/data/excel/README b/command/src/test/resources/data/excel/README new file mode 100644 index 000000000000..4849e2aef709 --- /dev/null +++ b/command/src/test/resources/data/excel/README @@ -0,0 +1 @@ +Objectļ \ No newline at end of file diff --git a/command/src/test/resources/data/object/README b/command/src/test/resources/data/object/README new file mode 100644 index 000000000000..271c286f3687 --- /dev/null +++ b/command/src/test/resources/data/object/README @@ -0,0 +1 @@ +̻ļ \ No newline at end of file diff --git a/command/src/test/resources/data/spring/README b/command/src/test/resources/data/spring/README new file mode 100644 index 000000000000..961ee7009fd2 --- /dev/null +++ b/command/src/test/resources/data/spring/README @@ -0,0 +1 @@ +spring ļ \ No newline at end of file diff --git a/command/src/test/resources/temp/README b/command/src/test/resources/temp/README new file mode 100644 index 000000000000..ccffba66ffdd --- /dev/null +++ b/command/src/test/resources/temp/README @@ -0,0 +1 @@ +ʱļ \ No newline at end of file diff --git a/command/src/test/testng.xml b/command/src/test/testng.xml new file mode 100644 index 000000000000..1fa0f7461a59 --- /dev/null +++ b/command/src/test/testng.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/composite/.gitignore b/composite/.gitignore new file mode 100644 index 000000000000..5e56e040ec09 --- /dev/null +++ b/composite/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/composite/out/.gitignore b/composite/out/.gitignore new file mode 100644 index 000000000000..5e56e040ec09 --- /dev/null +++ b/composite/out/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/composite/src/main/java/com/iluwatar/App.java b/composite/src/main/java/com/iluwatar/composite/App.java similarity index 92% rename from composite/src/main/java/com/iluwatar/App.java rename to composite/src/main/java/com/iluwatar/composite/App.java index 99229fdb0442..d6e5a95d8531 100644 --- a/composite/src/main/java/com/iluwatar/App.java +++ b/composite/src/main/java/com/iluwatar/composite/App.java @@ -1,26 +1,26 @@ -package com.iluwatar; - -/** - * - * With Composite we can treat tree hierarchies of objects - * with uniform interface (LetterComposite). In this example - * we have sentences composed of words composed of letters. - * - */ -public class App -{ - public static void main( String[] args ) - { - System.out.println("Message from the orcs: "); - - LetterComposite orcMessage = new Messenger().messageFromOrcs(); - orcMessage.print(); - - System.out.println("\n"); - - System.out.println("Message from the elves: "); - - LetterComposite elfMessage = new Messenger().messageFromElves(); - elfMessage.print(); - } -} +package com.iluwatar.composite; + +/** + * + * With Composite we can treat tree hierarchies of objects + * with uniform interface (LetterComposite). In this example + * we have sentences composed of words composed of letters. + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println("Message from the orcs: "); + + LetterComposite orcMessage = new Messenger().messageFromOrcs(); + orcMessage.print(); + + System.out.println("\n"); + + System.out.println("Message from the elves: "); + + LetterComposite elfMessage = new Messenger().messageFromElves(); + elfMessage.print(); + } +} diff --git a/composite/src/main/java/com/iluwatar/Letter.java b/composite/src/main/java/com/iluwatar/composite/Letter.java similarity index 85% rename from composite/src/main/java/com/iluwatar/Letter.java rename to composite/src/main/java/com/iluwatar/composite/Letter.java index f0a25b6d4791..5b184b809524 100644 --- a/composite/src/main/java/com/iluwatar/Letter.java +++ b/composite/src/main/java/com/iluwatar/composite/Letter.java @@ -1,21 +1,21 @@ -package com.iluwatar; - -public class Letter extends LetterComposite { - - private char c; - - public Letter(char c) { - this.c = c; - } - - @Override - protected void printThisBefore() { - System.out.print(c); - } - - @Override - protected void printThisAfter() { - // nop - } - -} +package com.iluwatar.composite; + +public class Letter extends LetterComposite { + + private char c; + + public Letter(char c) { + this.c = c; + } + + @Override + protected void printThisBefore() { + System.out.print(c); + } + + @Override + protected void printThisAfter() { + // nop + } + +} diff --git a/composite/src/main/java/com/iluwatar/LetterComposite.java b/composite/src/main/java/com/iluwatar/composite/LetterComposite.java similarity index 90% rename from composite/src/main/java/com/iluwatar/LetterComposite.java rename to composite/src/main/java/com/iluwatar/composite/LetterComposite.java index 850c410ffea6..81c5f7039f6f 100644 --- a/composite/src/main/java/com/iluwatar/LetterComposite.java +++ b/composite/src/main/java/com/iluwatar/composite/LetterComposite.java @@ -1,34 +1,34 @@ -package com.iluwatar; - -import java.util.ArrayList; -import java.util.List; - -/** - * - * Composite interface. - * - */ -public abstract class LetterComposite { - - private List children = new ArrayList(); - - public void add(LetterComposite letter) { - children.add(letter); - } - - public int count() { - return children.size(); - } - - protected abstract void printThisBefore(); - - protected abstract void printThisAfter(); - - public void print() { - printThisBefore(); - for (LetterComposite letter: children) { - letter.print(); - } - printThisAfter(); - } -} +package com.iluwatar.composite; + +import java.util.ArrayList; +import java.util.List; + +/** + * + * Composite interface. + * + */ +public abstract class LetterComposite { + + private List children = new ArrayList(); + + public void add(LetterComposite letter) { + children.add(letter); + } + + public int count() { + return children.size(); + } + + protected abstract void printThisBefore(); + + protected abstract void printThisAfter(); + + public void print() { + printThisBefore(); + for (LetterComposite letter: children) { + letter.print(); + } + printThisAfter(); + } +} diff --git a/composite/src/main/java/com/iluwatar/Messenger.java b/composite/src/main/java/com/iluwatar/composite/Messenger.java similarity index 96% rename from composite/src/main/java/com/iluwatar/Messenger.java rename to composite/src/main/java/com/iluwatar/composite/Messenger.java index d87a94b0d723..5b892fe110d7 100644 --- a/composite/src/main/java/com/iluwatar/Messenger.java +++ b/composite/src/main/java/com/iluwatar/composite/Messenger.java @@ -1,42 +1,42 @@ -package com.iluwatar; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class Messenger { - - LetterComposite messageFromOrcs() { - - 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')))); - words.add(new Word(Arrays.asList(new Letter('t'), new Letter('h'), new Letter('e'), new Letter('r'), new Letter('e')))); - words.add(new Word(Arrays.asList(new Letter('i'), new Letter('s')))); - words.add(new Word(Arrays.asList(new Letter('a')))); - words.add(new Word(Arrays.asList(new Letter('w'), new Letter('h'), new Letter('i'), new Letter('p')))); - words.add(new Word(Arrays.asList(new Letter('t'), new Letter('h'), new Letter('e'), new Letter('r'), new Letter('e')))); - words.add(new Word(Arrays.asList(new Letter('i'), new Letter('s')))); - words.add(new Word(Arrays.asList(new Letter('a')))); - words.add(new Word(Arrays.asList(new Letter('w'), new Letter('a'), new Letter('y')))); - - return new Sentence(words); - - } - - LetterComposite messageFromElves() { - - List words = new ArrayList(); - - words.add(new Word(Arrays.asList(new Letter('M'), new Letter('u'), new Letter('c'), new Letter('h')))); - words.add(new Word(Arrays.asList(new Letter('w'), new Letter('i'), new Letter('n'), new Letter('d')))); - words.add(new Word(Arrays.asList(new Letter('p'), new Letter('o'), new Letter('u'), new Letter('r'), new Letter('s')))); - words.add(new Word(Arrays.asList(new Letter('f'), new Letter('r'), new Letter('o'), new Letter('m')))); - words.add(new Word(Arrays.asList(new Letter('y'), new Letter('o'), new Letter('u'), new Letter('r')))); - words.add(new Word(Arrays.asList(new Letter('m'), new Letter('o'), new Letter('u'), new Letter('t'), new Letter('h')))); - - return new Sentence(words); - - } - -} +package com.iluwatar.composite; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class Messenger { + + LetterComposite messageFromOrcs() { + + 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')))); + words.add(new Word(Arrays.asList(new Letter('t'), new Letter('h'), new Letter('e'), new Letter('r'), new Letter('e')))); + words.add(new Word(Arrays.asList(new Letter('i'), new Letter('s')))); + words.add(new Word(Arrays.asList(new Letter('a')))); + words.add(new Word(Arrays.asList(new Letter('w'), new Letter('h'), new Letter('i'), new Letter('p')))); + words.add(new Word(Arrays.asList(new Letter('t'), new Letter('h'), new Letter('e'), new Letter('r'), new Letter('e')))); + words.add(new Word(Arrays.asList(new Letter('i'), new Letter('s')))); + words.add(new Word(Arrays.asList(new Letter('a')))); + words.add(new Word(Arrays.asList(new Letter('w'), new Letter('a'), new Letter('y')))); + + return new Sentence(words); + + } + + LetterComposite messageFromElves() { + + List words = new ArrayList(); + + words.add(new Word(Arrays.asList(new Letter('M'), new Letter('u'), new Letter('c'), new Letter('h')))); + words.add(new Word(Arrays.asList(new Letter('w'), new Letter('i'), new Letter('n'), new Letter('d')))); + words.add(new Word(Arrays.asList(new Letter('p'), new Letter('o'), new Letter('u'), new Letter('r'), new Letter('s')))); + words.add(new Word(Arrays.asList(new Letter('f'), new Letter('r'), new Letter('o'), new Letter('m')))); + words.add(new Word(Arrays.asList(new Letter('y'), new Letter('o'), new Letter('u'), new Letter('r')))); + words.add(new Word(Arrays.asList(new Letter('m'), new Letter('o'), new Letter('u'), new Letter('t'), new Letter('h')))); + + return new Sentence(words); + + } + +} diff --git a/composite/src/main/java/com/iluwatar/Sentence.java b/composite/src/main/java/com/iluwatar/composite/Sentence.java similarity index 86% rename from composite/src/main/java/com/iluwatar/Sentence.java rename to composite/src/main/java/com/iluwatar/composite/Sentence.java index 6eb97bc4b14f..b09a9a486bfb 100644 --- a/composite/src/main/java/com/iluwatar/Sentence.java +++ b/composite/src/main/java/com/iluwatar/composite/Sentence.java @@ -1,24 +1,24 @@ -package com.iluwatar; - -import java.util.List; - -public class Sentence extends LetterComposite { - - public Sentence(List words) { - for (Word w: words) { - this.add(w); - } - } - - @Override - protected void printThisBefore() { - // nop - } - - @Override - protected void printThisAfter() { - System.out.print("."); - } - - -} +package com.iluwatar.composite; + +import java.util.List; + +public class Sentence extends LetterComposite { + + public Sentence(List words) { + for (Word w: words) { + this.add(w); + } + } + + @Override + protected void printThisBefore() { + // nop + } + + @Override + protected void printThisAfter() { + System.out.print("."); + } + + +} diff --git a/composite/src/main/java/com/iluwatar/Word.java b/composite/src/main/java/com/iluwatar/composite/Word.java similarity index 86% rename from composite/src/main/java/com/iluwatar/Word.java rename to composite/src/main/java/com/iluwatar/composite/Word.java index ef8ea3b6ab46..1cb131602202 100644 --- a/composite/src/main/java/com/iluwatar/Word.java +++ b/composite/src/main/java/com/iluwatar/composite/Word.java @@ -1,23 +1,23 @@ -package com.iluwatar; - -import java.util.List; - -public class Word extends LetterComposite { - - public Word(List letters) { - for (Letter l: letters) { - this.add(l); - } - } - - @Override - protected void printThisBefore() { - System.out.print(" "); - } - - @Override - protected void printThisAfter() { - // nop - } - -} +package com.iluwatar.composite; + +import java.util.List; + +public class Word extends LetterComposite { + + public Word(List letters) { + for (Letter l: letters) { + this.add(l); + } + } + + @Override + protected void printThisBefore() { + System.out.print(" "); + } + + @Override + protected void printThisAfter() { + // nop + } + +} diff --git a/composite/src/test/log4j.xml b/composite/src/test/log4j.xml new file mode 100644 index 000000000000..748d0c1a5271 --- /dev/null +++ b/composite/src/test/log4j.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/composite/src/test/resources/configure/UATApplicationContext.xml b/composite/src/test/resources/configure/UATApplicationContext.xml new file mode 100644 index 000000000000..818ef52f909e --- /dev/null +++ b/composite/src/test/resources/configure/UATApplicationContext.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/composite/src/test/resources/configure/prop.xml b/composite/src/test/resources/configure/prop.xml new file mode 100644 index 000000000000..c7afbd60d256 --- /dev/null +++ b/composite/src/test/resources/configure/prop.xml @@ -0,0 +1,133 @@ + + + false + + + $JAVA_HOME + server + -server -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -Duser.timezone=GMT+8 -Djava.awt.headless=true + 8005 + + 80 + + + + true + + StartTomcat + nc.bs.tomcat.startup.BootStrapTomcatService + 15 + true + false + start|stop + + + EJB_SERVICE + nc.bs.mw.naming.EJBContainerService + 15 + true + false + start|stop + + nc.bs.mw.tran.IerpTransactionManagerProxy + nc.bs.mw.tran.IerpUserTransaction + nc.bs.mw.tran.IerpTransactionManager + nc.bs.mw.sql.UFSqlObject + nc.bs.mw.ejbsql.IerpXADataSource + + design + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + baptest807 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + bafi + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + bafi + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + iufo6103312 + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + iufo6103312 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + batm + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + batm + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + bap8 + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + bap8 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + foodmart + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + foodmart + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + \ No newline at end of file diff --git a/composite/src/test/resources/configure/test_data_source.xml b/composite/src/test/resources/configure/test_data_source.xml new file mode 100644 index 000000000000..2e45d5ee869c --- /dev/null +++ b/composite/src/test/resources/configure/test_data_source.xml @@ -0,0 +1,19 @@ + + + + design + Z + jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive + sa + sasasa + com.microsoft.sqlserver.jdbc.SQLServerDriver + SQLSERVER2008 + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + \ No newline at end of file diff --git a/composite/src/test/resources/configure/uat.properties b/composite/src/test/resources/configure/uat.properties new file mode 100644 index 000000000000..f0b076c2de77 --- /dev/null +++ b/composite/src/test/resources/configure/uat.properties @@ -0,0 +1,33 @@ +#project information +app_name=App Name +app_version=V6.5 + +#Common Configure +##UAPHOME path, USE '/' for path separator +nc_home= +##verify log path, USE '/' for path separator +log_file=debug.log + +# 0 don't print app log information on test result log +# 1 only print app log information on test result log for fail testcase +# 2 print application log information on test result log for all testcase +uatlog_switch=2 + +#dataFile Configure ,backup database data and restore database data +data_backup_file = c:/temp/datafile.xml + +#default datasource +default_datasource=design + +#BusinessServer configure +serverstart=off +login_username= +login_password= + +#resources settings +nc_configure_dir=resources/configure/ +testdata_config_dir=resources/data/conf/ +testdata_springfile_dir=resources/data/spring/ +testdata_objectfile_dir=resources/data/object/ +testdata_excelfile_dir=resources/data/excel/ +testdata_backup_dir=resources/data/backup/ diff --git a/composite/src/test/resources/configure/uat_spring_conf.xml b/composite/src/test/resources/configure/uat_spring_conf.xml new file mode 100644 index 000000000000..169a91514700 --- /dev/null +++ b/composite/src/test/resources/configure/uat_spring_conf.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/composite/src/test/resources/data/backup/README b/composite/src/test/resources/data/backup/README new file mode 100644 index 000000000000..a5b99861a7dc --- /dev/null +++ b/composite/src/test/resources/data/backup/README @@ -0,0 +1 @@ +ļ \ No newline at end of file diff --git a/composite/src/test/resources/data/config/README b/composite/src/test/resources/data/config/README new file mode 100644 index 000000000000..4849e2aef709 --- /dev/null +++ b/composite/src/test/resources/data/config/README @@ -0,0 +1 @@ +Objectļ \ No newline at end of file diff --git a/composite/src/test/resources/data/excel/README b/composite/src/test/resources/data/excel/README new file mode 100644 index 000000000000..4849e2aef709 --- /dev/null +++ b/composite/src/test/resources/data/excel/README @@ -0,0 +1 @@ +Objectļ \ No newline at end of file diff --git a/composite/src/test/resources/data/object/README b/composite/src/test/resources/data/object/README new file mode 100644 index 000000000000..271c286f3687 --- /dev/null +++ b/composite/src/test/resources/data/object/README @@ -0,0 +1 @@ +̻ļ \ No newline at end of file diff --git a/composite/src/test/resources/data/spring/README b/composite/src/test/resources/data/spring/README new file mode 100644 index 000000000000..961ee7009fd2 --- /dev/null +++ b/composite/src/test/resources/data/spring/README @@ -0,0 +1 @@ +spring ļ \ No newline at end of file diff --git a/composite/src/test/resources/temp/README b/composite/src/test/resources/temp/README new file mode 100644 index 000000000000..ccffba66ffdd --- /dev/null +++ b/composite/src/test/resources/temp/README @@ -0,0 +1 @@ +ʱļ \ No newline at end of file diff --git a/composite/src/test/testng.xml b/composite/src/test/testng.xml new file mode 100644 index 000000000000..1fa0f7461a59 --- /dev/null +++ b/composite/src/test/testng.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/decorator/src/main/java/com/iluwatar/App.java b/decorator/src/main/java/com/iluwatar/decorator/App.java similarity index 92% rename from decorator/src/main/java/com/iluwatar/App.java rename to decorator/src/main/java/com/iluwatar/decorator/App.java index 77978844d016..71e55a448b4d 100644 --- a/decorator/src/main/java/com/iluwatar/App.java +++ b/decorator/src/main/java/com/iluwatar/decorator/App.java @@ -1,26 +1,26 @@ -package com.iluwatar; - -/** - * - * Decorator pattern is more flexible alternative to - * subclassing. The decorator class implements the same - * interface as the target and uses composition to - * "decorate" calls to the target. - * - */ -public class App -{ - public static void main( String[] args ) - { - - System.out.println("A simple looking troll approaches."); - Hostile troll = new Troll(); - troll.attack(); - troll.fleeBattle(); - - System.out.println("\nA smart looking troll surprises you."); - Hostile smart = new SmartTroll(new Troll()); - smart.attack(); - smart.fleeBattle(); - } -} +package com.iluwatar.decorator; + +/** + * + * Decorator pattern is more flexible alternative to + * subclassing. The decorator class implements the same + * interface as the target and uses composition to + * "decorate" calls to the target. + * + */ +public class App +{ + public static void main( String[] args ) + { + + System.out.println("A simple looking troll approaches."); + Hostile troll = new Troll(); + troll.attack(); + troll.fleeBattle(); + + System.out.println("\nA smart looking troll surprises you."); + Hostile smart = new SmartTroll(new Troll()); + smart.attack(); + smart.fleeBattle(); + } +} diff --git a/decorator/src/main/java/com/iluwatar/Hostile.java b/decorator/src/main/java/com/iluwatar/decorator/Hostile.java similarity index 68% rename from decorator/src/main/java/com/iluwatar/Hostile.java rename to decorator/src/main/java/com/iluwatar/decorator/Hostile.java index 38b2cad07f6c..af7cbc337986 100644 --- a/decorator/src/main/java/com/iluwatar/Hostile.java +++ b/decorator/src/main/java/com/iluwatar/decorator/Hostile.java @@ -1,8 +1,8 @@ -package com.iluwatar; - -public interface Hostile { - - void attack(); - void fleeBattle(); - -} +package com.iluwatar.decorator; + +public interface Hostile { + + void attack(); + void fleeBattle(); + +} diff --git a/decorator/src/main/java/com/iluwatar/SmartTroll.java b/decorator/src/main/java/com/iluwatar/decorator/SmartTroll.java similarity index 89% rename from decorator/src/main/java/com/iluwatar/SmartTroll.java rename to decorator/src/main/java/com/iluwatar/decorator/SmartTroll.java index d931adff86a0..9792f5923541 100644 --- a/decorator/src/main/java/com/iluwatar/SmartTroll.java +++ b/decorator/src/main/java/com/iluwatar/decorator/SmartTroll.java @@ -1,23 +1,23 @@ -package com.iluwatar; - -public class SmartTroll implements Hostile { - - private Hostile decorated; - - public SmartTroll(Hostile decorated) { - this.decorated = decorated; - } - - @Override - public void attack() { - System.out.println("The troll throws a rock at you!"); - decorated.attack(); - } - - @Override - public void fleeBattle() { - System.out.println("The troll calls for help!"); - decorated.fleeBattle(); - } - -} +package com.iluwatar.decorator; + +public class SmartTroll implements Hostile { + + private Hostile decorated; + + public SmartTroll(Hostile decorated) { + this.decorated = decorated; + } + + @Override + public void attack() { + System.out.println("The troll throws a rock at you!"); + decorated.attack(); + } + + @Override + public void fleeBattle() { + System.out.println("The troll calls for help!"); + decorated.fleeBattle(); + } + +} diff --git a/decorator/src/main/java/com/iluwatar/Troll.java b/decorator/src/main/java/com/iluwatar/decorator/Troll.java similarity index 87% rename from decorator/src/main/java/com/iluwatar/Troll.java rename to decorator/src/main/java/com/iluwatar/decorator/Troll.java index 3bcf4ec472d4..a194f9e586f4 100644 --- a/decorator/src/main/java/com/iluwatar/Troll.java +++ b/decorator/src/main/java/com/iluwatar/decorator/Troll.java @@ -1,13 +1,13 @@ -package com.iluwatar; - -public class Troll implements Hostile { - - public void attack() { - System.out.println("The troll swings at you with a club!"); - } - - public void fleeBattle() { - System.out.println("The troll shrieks in horror and runs away!"); - } - -} +package com.iluwatar.decorator; + +public class Troll implements Hostile { + + public void attack() { + System.out.println("The troll swings at you with a club!"); + } + + public void fleeBattle() { + System.out.println("The troll shrieks in horror and runs away!"); + } + +} diff --git a/double-checked-locking/src/main/java/com/iluwatar/App.java b/double-checked-locking/src/main/java/com/iluwatardbcheck/App.java similarity index 89% rename from double-checked-locking/src/main/java/com/iluwatar/App.java rename to double-checked-locking/src/main/java/com/iluwatardbcheck/App.java index 7e6bfd532c45..6af96588841e 100644 --- a/double-checked-locking/src/main/java/com/iluwatar/App.java +++ b/double-checked-locking/src/main/java/com/iluwatardbcheck/App.java @@ -1,4 +1,4 @@ -package com.iluwatar; +package com.iluwatardbcheck; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -22,7 +22,9 @@ public static void main( String[] args ) executorService.execute(new Runnable() { @Override public void run() { - while(inventory.addItem(new Item())); + while(inventory.addItem(new Item())) { + ; + } } }); } diff --git a/double-checked-locking/src/main/java/com/iluwatar/Inventory.java b/double-checked-locking/src/main/java/com/iluwatardbcheck/Inventory.java similarity index 89% rename from double-checked-locking/src/main/java/com/iluwatar/Inventory.java rename to double-checked-locking/src/main/java/com/iluwatardbcheck/Inventory.java index a6ddc350d83d..69b4ffc1a925 100644 --- a/double-checked-locking/src/main/java/com/iluwatar/Inventory.java +++ b/double-checked-locking/src/main/java/com/iluwatardbcheck/Inventory.java @@ -1,4 +1,4 @@ -package com.iluwatar; +package com.iluwatardbcheck; import java.util.ArrayList; import java.util.List; @@ -14,7 +14,7 @@ public class Inventory { public Inventory(int inventorySize) { this.inventorySize = inventorySize; - this.items = new ArrayList(inventorySize); + items = new ArrayList(inventorySize); } public boolean addItem(Item item){ diff --git a/double-checked-locking/src/main/java/com/iluwatar/Item.java b/double-checked-locking/src/main/java/com/iluwatardbcheck/Item.java similarity index 62% rename from double-checked-locking/src/main/java/com/iluwatar/Item.java rename to double-checked-locking/src/main/java/com/iluwatardbcheck/Item.java index 76e095e7e415..7fb0844ce52e 100644 --- a/double-checked-locking/src/main/java/com/iluwatar/Item.java +++ b/double-checked-locking/src/main/java/com/iluwatardbcheck/Item.java @@ -1,4 +1,4 @@ -package com.iluwatar; +package com.iluwatardbcheck; public class Item { String name; diff --git a/facade/src/main/java/com/iluwatar/App.java b/facade/src/main/java/com/iluwatar/facade/App.java similarity index 88% rename from facade/src/main/java/com/iluwatar/App.java rename to facade/src/main/java/com/iluwatar/facade/App.java index 98d43511f857..cd09c43de88c 100644 --- a/facade/src/main/java/com/iluwatar/App.java +++ b/facade/src/main/java/com/iluwatar/facade/App.java @@ -1,18 +1,18 @@ -package com.iluwatar; - -/** - * - * Facade (DwarvenGoldmineFacade) provides simpler interface to - * subsystem. - * - */ -public class App -{ - public static void main( String[] args ) - { - DwarvenGoldmineFacade facade = new DwarvenGoldmineFacade(); - facade.startNewDay(); - facade.digOutGold(); - facade.endDay(); - } -} +package com.iluwatar.facade; + +/** + * + * Facade (DwarvenGoldmineFacade) provides simpler interface to + * subsystem. + * + */ +public class App +{ + public static void main( String[] args ) + { + DwarvenGoldmineFacade facade = new DwarvenGoldmineFacade(); + facade.startNewDay(); + facade.digOutGold(); + facade.endDay(); + } +} diff --git a/facade/src/main/java/com/iluwatar/DwarvenCartOperator.java b/facade/src/main/java/com/iluwatar/facade/DwarvenCartOperator.java similarity index 86% rename from facade/src/main/java/com/iluwatar/DwarvenCartOperator.java rename to facade/src/main/java/com/iluwatar/facade/DwarvenCartOperator.java index ef13611a8d85..07b37133bef0 100644 --- a/facade/src/main/java/com/iluwatar/DwarvenCartOperator.java +++ b/facade/src/main/java/com/iluwatar/facade/DwarvenCartOperator.java @@ -1,15 +1,15 @@ -package com.iluwatar; - -public class DwarvenCartOperator extends DwarvenMineWorker { - - @Override - public void work() { - System.out.println(name() + " moves gold chunks out of the mine."); - } - - @Override - public String name() { - return "Dwarf cart operator"; - } - -} +package com.iluwatar.facade; + +public class DwarvenCartOperator extends DwarvenMineWorker { + + @Override + public void work() { + System.out.println(name() + " moves gold chunks out of the mine."); + } + + @Override + public String name() { + return "Dwarf cart operator"; + } + +} diff --git a/facade/src/main/java/com/iluwatar/DwarvenGoldDigger.java b/facade/src/main/java/com/iluwatar/facade/DwarvenGoldDigger.java similarity index 85% rename from facade/src/main/java/com/iluwatar/DwarvenGoldDigger.java rename to facade/src/main/java/com/iluwatar/facade/DwarvenGoldDigger.java index ea7c7e68e393..5cafdcfb663d 100644 --- a/facade/src/main/java/com/iluwatar/DwarvenGoldDigger.java +++ b/facade/src/main/java/com/iluwatar/facade/DwarvenGoldDigger.java @@ -1,15 +1,15 @@ -package com.iluwatar; - -public class DwarvenGoldDigger extends DwarvenMineWorker { - - @Override - public void work() { - System.out.println(name() + " digs for gold."); - } - - @Override - public String name() { - return "Dwarf gold digger"; - } - -} +package com.iluwatar.facade; + +public class DwarvenGoldDigger extends DwarvenMineWorker { + + @Override + public void work() { + System.out.println(name() + " digs for gold."); + } + + @Override + public String name() { + return "Dwarf gold digger"; + } + +} diff --git a/facade/src/main/java/com/iluwatar/DwarvenGoldmineFacade.java b/facade/src/main/java/com/iluwatar/facade/DwarvenGoldmineFacade.java similarity index 86% rename from facade/src/main/java/com/iluwatar/DwarvenGoldmineFacade.java rename to facade/src/main/java/com/iluwatar/facade/DwarvenGoldmineFacade.java index a8a71bef5b05..9e9e7bf96a65 100644 --- a/facade/src/main/java/com/iluwatar/DwarvenGoldmineFacade.java +++ b/facade/src/main/java/com/iluwatar/facade/DwarvenGoldmineFacade.java @@ -1,37 +1,37 @@ -package com.iluwatar; - -import java.util.ArrayList; -import java.util.List; - -public class DwarvenGoldmineFacade { - - List workers; - - public DwarvenGoldmineFacade() { - workers = new ArrayList<>(); - workers.add(new DwarvenGoldDigger()); - workers.add(new DwarvenCartOperator()); - workers.add(new DwarvenTunnelDigger()); - } - - public void startNewDay() { - for (DwarvenMineWorker worker: workers) { - worker.wakeUp(); - worker.goToMine(); - } - } - - public void digOutGold() { - for (DwarvenMineWorker worker: workers) { - worker.work(); - } - } - - public void endDay() { - for (DwarvenMineWorker worker: workers) { - worker.goHome(); - worker.goToSleep(); - } - } - -} +package com.iluwatar.facade; + +import java.util.ArrayList; +import java.util.List; + +public class DwarvenGoldmineFacade { + + List workers; + + public DwarvenGoldmineFacade() { + workers = new ArrayList(); + workers.add(new DwarvenGoldDigger()); + workers.add(new DwarvenCartOperator()); + workers.add(new DwarvenTunnelDigger()); + } + + public void startNewDay() { + for (DwarvenMineWorker worker: workers) { + worker.wakeUp(); + worker.goToMine(); + } + } + + public void digOutGold() { + for (DwarvenMineWorker worker: workers) { + worker.work(); + } + } + + public void endDay() { + for (DwarvenMineWorker worker: workers) { + worker.goHome(); + worker.goToSleep(); + } + } + +} diff --git a/facade/src/main/java/com/iluwatar/DwarvenMineWorker.java b/facade/src/main/java/com/iluwatar/facade/DwarvenMineWorker.java similarity index 90% rename from facade/src/main/java/com/iluwatar/DwarvenMineWorker.java rename to facade/src/main/java/com/iluwatar/facade/DwarvenMineWorker.java index 21b936738808..c8a37c83996e 100644 --- a/facade/src/main/java/com/iluwatar/DwarvenMineWorker.java +++ b/facade/src/main/java/com/iluwatar/facade/DwarvenMineWorker.java @@ -1,25 +1,25 @@ -package com.iluwatar; - -public abstract class DwarvenMineWorker { - - public void goToSleep() { - System.out.println(name() + " goes to sleep."); - } - - public void wakeUp() { - System.out.println(name() + " wakes up."); - } - - public void goHome() { - System.out.println(name() + " goes home."); - } - - public void goToMine() { - System.out.println(name() + " goes to the mine."); - } - - public abstract void work(); - - public abstract String name(); - -} +package com.iluwatar.facade; + +public abstract class DwarvenMineWorker { + + public void goToSleep() { + System.out.println(name() + " goes to sleep."); + } + + public void wakeUp() { + System.out.println(name() + " wakes up."); + } + + public void goHome() { + System.out.println(name() + " goes home."); + } + + public void goToMine() { + System.out.println(name() + " goes to the mine."); + } + + public abstract void work(); + + public abstract String name(); + +} diff --git a/facade/src/main/java/com/iluwatar/DwarvenTunnelDigger.java b/facade/src/main/java/com/iluwatar/facade/DwarvenTunnelDigger.java similarity index 86% rename from facade/src/main/java/com/iluwatar/DwarvenTunnelDigger.java rename to facade/src/main/java/com/iluwatar/facade/DwarvenTunnelDigger.java index b8ef1833247c..62b3fc3ff147 100644 --- a/facade/src/main/java/com/iluwatar/DwarvenTunnelDigger.java +++ b/facade/src/main/java/com/iluwatar/facade/DwarvenTunnelDigger.java @@ -1,15 +1,15 @@ -package com.iluwatar; - -public class DwarvenTunnelDigger extends DwarvenMineWorker { - - @Override - public void work() { - System.out.println(name() + " creates another promising tunnel."); - } - - @Override - public String name() { - return "Dwarven tunnel digger"; - } - -} +package com.iluwatar.facade; + +public class DwarvenTunnelDigger extends DwarvenMineWorker { + + @Override + public void work() { + System.out.println(name() + " creates another promising tunnel."); + } + + @Override + public String name() { + return "Dwarven tunnel digger"; + } + +} diff --git a/factory-method/.gitignore b/factory-method/.gitignore index b83d22266ac8..e2540458518e 100644 --- a/factory-method/.gitignore +++ b/factory-method/.gitignore @@ -1 +1,2 @@ /target/ +/bin diff --git a/factory-method/out/.gitignore b/factory-method/out/.gitignore new file mode 100644 index 000000000000..5e56e040ec09 --- /dev/null +++ b/factory-method/out/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/factory-method/src/main/java/com/iluwatar/App.java b/factory-method/src/main/java/com/iluwatar/App.java deleted file mode 100644 index d9af81227b9f..000000000000 --- a/factory-method/src/main/java/com/iluwatar/App.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.iluwatar; - -/** - * - * In Factory Method we have an interface (Blacksmith) with a - * method for creating objects (manufactureWeapon). The concrete - * subclasses (OrcBlacksmith, ElfBlacksmith) then override the - * method to produce objects of their liking. - * - */ -public class App -{ - public static void main( String[] args ) - { - Blacksmith blacksmith; - 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/main/java/com/iluwatar/Weapon.java b/factory-method/src/main/java/com/iluwatar/Weapon.java deleted file mode 100644 index 0787c38f3e15..000000000000 --- a/factory-method/src/main/java/com/iluwatar/Weapon.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.iluwatar; - -public interface Weapon { - -} 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 new file mode 100644 index 000000000000..f406b1931003 --- /dev/null +++ b/factory-method/src/main/java/com/iluwatar/factory/method/App.java @@ -0,0 +1,35 @@ +package com.iluwatar.factory.method; + + +/** + * + * In Factory Method we have an interface (Blacksmith) with a + * method for creating objects (manufactureWeapon). The concrete + * subclasses (OrcBlacksmith, ElfBlacksmith) then override the + * method to produce objects of their liking. + * + */ +public class App +{ + public static void main( String[] args ) + { + Blacksmith blacksmith; + 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); + + blacksmith = new Testsmith(); + weapon = blacksmith.manufactureWeapon(WeaponType.TEST); + System.out.print(weapon); + } +} diff --git a/factory-method/src/main/java/com/iluwatar/Blacksmith.java b/factory-method/src/main/java/com/iluwatar/factory/method/Blacksmith.java similarity index 78% rename from factory-method/src/main/java/com/iluwatar/Blacksmith.java rename to factory-method/src/main/java/com/iluwatar/factory/method/Blacksmith.java index ac488b27d8c9..64ec02980bff 100644 --- a/factory-method/src/main/java/com/iluwatar/Blacksmith.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/Blacksmith.java @@ -1,12 +1,14 @@ -package com.iluwatar; - -/** - * - * The interface containing method for producing objects. - * - */ -public interface Blacksmith { - - Weapon manufactureWeapon(WeaponType weaponType); - -} +package com.iluwatar.factory.method; + + + +/** + * + * The interface containing method for producing objects. + * + */ +public interface Blacksmith { + + Weapon manufactureWeapon(WeaponType weaponType); + +} diff --git a/factory-method/src/main/java/com/iluwatar/ElfBlacksmith.java b/factory-method/src/main/java/com/iluwatar/factory/method/ElfBlacksmith.java similarity index 79% rename from factory-method/src/main/java/com/iluwatar/ElfBlacksmith.java rename to factory-method/src/main/java/com/iluwatar/factory/method/ElfBlacksmith.java index 067584088e13..0a358d248dac 100644 --- a/factory-method/src/main/java/com/iluwatar/ElfBlacksmith.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/ElfBlacksmith.java @@ -1,14 +1,17 @@ -package com.iluwatar; - -/** - * - * Concrete subclass for creating new objects. - * - */ -public class ElfBlacksmith implements Blacksmith { - - public Weapon manufactureWeapon(WeaponType weaponType) { - return new ElfWeapon(weaponType); - } - -} +package com.iluwatar.factory.method; + + + +/** + * + * Concrete subclass for creating new objects. + * + */ +public class ElfBlacksmith implements Blacksmith { + + @Override + public Weapon manufactureWeapon(WeaponType weaponType) { + return new ElfWeapon(weaponType); + } + +} diff --git a/factory-method/src/main/java/com/iluwatar/ElfWeapon.java b/factory-method/src/main/java/com/iluwatar/factory/method/ElfWeapon.java similarity index 85% rename from factory-method/src/main/java/com/iluwatar/ElfWeapon.java rename to factory-method/src/main/java/com/iluwatar/factory/method/ElfWeapon.java index f1c3e6d5c5cf..37e4a9ce4fe4 100644 --- a/factory-method/src/main/java/com/iluwatar/ElfWeapon.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/ElfWeapon.java @@ -1,16 +1,17 @@ -package com.iluwatar; - -public class ElfWeapon implements Weapon { - - private WeaponType weaponType; - - public ElfWeapon(WeaponType weaponType) { - this.weaponType = weaponType; - } - - @Override - public String toString() { - return "Elven " + weaponType; - } - -} +package com.iluwatar.factory.method; + + +public class ElfWeapon implements Weapon { + + private WeaponType weaponType; + + public ElfWeapon(WeaponType weaponType) { + this.weaponType = weaponType; + } + + @Override + public String toString() { + return "Elven " + weaponType; + } + +} diff --git a/factory-method/src/main/java/com/iluwatar/OrcBlacksmith.java b/factory-method/src/main/java/com/iluwatar/factory/method/OrcBlacksmith.java similarity index 80% rename from factory-method/src/main/java/com/iluwatar/OrcBlacksmith.java rename to factory-method/src/main/java/com/iluwatar/factory/method/OrcBlacksmith.java index 60730d15f410..ac1c64364497 100644 --- a/factory-method/src/main/java/com/iluwatar/OrcBlacksmith.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/OrcBlacksmith.java @@ -1,14 +1,16 @@ -package com.iluwatar; - -/** - * - * Concrete subclass for creating new objects. - * - */ -public class OrcBlacksmith implements Blacksmith { - - public Weapon manufactureWeapon(WeaponType weaponType) { - return new OrcWeapon(weaponType); - } - -} +package com.iluwatar.factory.method; + + +/** + * + * Concrete subclass for creating new objects. + * + */ +public class OrcBlacksmith implements Blacksmith { + + @Override + public Weapon manufactureWeapon(WeaponType weaponType) { + return new OrcWeapon(weaponType); + } + +} diff --git a/factory-method/src/main/java/com/iluwatar/OrcWeapon.java b/factory-method/src/main/java/com/iluwatar/factory/method/OrcWeapon.java similarity index 85% rename from factory-method/src/main/java/com/iluwatar/OrcWeapon.java rename to factory-method/src/main/java/com/iluwatar/factory/method/OrcWeapon.java index 5ad59015846a..a0a505259057 100644 --- a/factory-method/src/main/java/com/iluwatar/OrcWeapon.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/OrcWeapon.java @@ -1,16 +1,18 @@ -package com.iluwatar; - -public class OrcWeapon implements Weapon { - - private WeaponType weaponType; - - public OrcWeapon(WeaponType weaponType) { - this.weaponType = weaponType; - } - - @Override - public String toString() { - return "Orcish " + weaponType; - } - -} +package com.iluwatar.factory.method; + + + +public class OrcWeapon implements Weapon { + + private WeaponType weaponType; + + public OrcWeapon(WeaponType weaponType) { + this.weaponType = weaponType; + } + + @Override + public String toString() { + return "Orcish " + weaponType; + } + +} diff --git a/factory-method/src/main/java/com/iluwatar/factory/method/Testsmith.java b/factory-method/src/main/java/com/iluwatar/factory/method/Testsmith.java new file mode 100644 index 000000000000..6bc1af839dec --- /dev/null +++ b/factory-method/src/main/java/com/iluwatar/factory/method/Testsmith.java @@ -0,0 +1,16 @@ +package com.iluwatar.factory.method; + + +/** + * + * Concrete subclass for creating new objects. + * + */ +public class Testsmith implements Blacksmith { + + @Override + public Weapon manufactureWeapon(WeaponType weaponType) { + return new ElfWeapon(weaponType); + } + +} 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 new file mode 100644 index 000000000000..80e7c911fb78 --- /dev/null +++ b/factory-method/src/main/java/com/iluwatar/factory/method/Weapon.java @@ -0,0 +1,5 @@ +package com.iluwatar.factory.method; + +public interface Weapon { + +} diff --git a/factory-method/src/main/java/com/iluwatar/WeaponType.java b/factory-method/src/main/java/com/iluwatar/factory/method/WeaponType.java similarity index 70% rename from factory-method/src/main/java/com/iluwatar/WeaponType.java rename to factory-method/src/main/java/com/iluwatar/factory/method/WeaponType.java index 72e01d82ceed..4ba4f4f47749 100644 --- a/factory-method/src/main/java/com/iluwatar/WeaponType.java +++ b/factory-method/src/main/java/com/iluwatar/factory/method/WeaponType.java @@ -1,19 +1,20 @@ -package com.iluwatar; - -public enum WeaponType { - - SHORT_SWORD, SPEAR, AXE; - - @Override - public String toString() { - String s = ""; - switch(this) { - case SHORT_SWORD: s = "short sword"; break; - case SPEAR: s = "spear"; break; - case AXE: s = "axe"; break; - } - return s; - } - - -} +package com.iluwatar.factory.method; + +public enum WeaponType { + + SHORT_SWORD, SPEAR, AXE,TEST; + + @Override + public String toString() { + String s = ""; + switch(this) { + case SHORT_SWORD: s = "short sword"; break; + case SPEAR: s = "spear"; break; + case AXE: s = "axe"; break; + case TEST: s = "test"; break; + } + return s; + } + + +} diff --git a/factory-method/src/test/log4j.xml b/factory-method/src/test/log4j.xml new file mode 100644 index 000000000000..748d0c1a5271 --- /dev/null +++ b/factory-method/src/test/log4j.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/factory-method/src/test/resources/configure/UATApplicationContext.xml b/factory-method/src/test/resources/configure/UATApplicationContext.xml new file mode 100644 index 000000000000..818ef52f909e --- /dev/null +++ b/factory-method/src/test/resources/configure/UATApplicationContext.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/factory-method/src/test/resources/configure/prop.xml b/factory-method/src/test/resources/configure/prop.xml new file mode 100644 index 000000000000..c7afbd60d256 --- /dev/null +++ b/factory-method/src/test/resources/configure/prop.xml @@ -0,0 +1,133 @@ + + + false + + + $JAVA_HOME + server + -server -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -Duser.timezone=GMT+8 -Djava.awt.headless=true + 8005 + + 80 + + + + true + + StartTomcat + nc.bs.tomcat.startup.BootStrapTomcatService + 15 + true + false + start|stop + + + EJB_SERVICE + nc.bs.mw.naming.EJBContainerService + 15 + true + false + start|stop + + nc.bs.mw.tran.IerpTransactionManagerProxy + nc.bs.mw.tran.IerpUserTransaction + nc.bs.mw.tran.IerpTransactionManager + nc.bs.mw.sql.UFSqlObject + nc.bs.mw.ejbsql.IerpXADataSource + + design + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + baptest807 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + bafi + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + bafi + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + iufo6103312 + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + iufo6103312 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + batm + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + batm + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + bap8 + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + bap8 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + foodmart + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + foodmart + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + \ No newline at end of file diff --git a/factory-method/src/test/resources/configure/test_data_source.xml b/factory-method/src/test/resources/configure/test_data_source.xml new file mode 100644 index 000000000000..2e45d5ee869c --- /dev/null +++ b/factory-method/src/test/resources/configure/test_data_source.xml @@ -0,0 +1,19 @@ + + + + design + Z + jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive + sa + sasasa + com.microsoft.sqlserver.jdbc.SQLServerDriver + SQLSERVER2008 + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + \ No newline at end of file diff --git a/factory-method/src/test/resources/configure/uat.properties b/factory-method/src/test/resources/configure/uat.properties new file mode 100644 index 000000000000..f0b076c2de77 --- /dev/null +++ b/factory-method/src/test/resources/configure/uat.properties @@ -0,0 +1,33 @@ +#project information +app_name=App Name +app_version=V6.5 + +#Common Configure +##UAPHOME path, USE '/' for path separator +nc_home= +##verify log path, USE '/' for path separator +log_file=debug.log + +# 0 don't print app log information on test result log +# 1 only print app log information on test result log for fail testcase +# 2 print application log information on test result log for all testcase +uatlog_switch=2 + +#dataFile Configure ,backup database data and restore database data +data_backup_file = c:/temp/datafile.xml + +#default datasource +default_datasource=design + +#BusinessServer configure +serverstart=off +login_username= +login_password= + +#resources settings +nc_configure_dir=resources/configure/ +testdata_config_dir=resources/data/conf/ +testdata_springfile_dir=resources/data/spring/ +testdata_objectfile_dir=resources/data/object/ +testdata_excelfile_dir=resources/data/excel/ +testdata_backup_dir=resources/data/backup/ diff --git a/factory-method/src/test/resources/configure/uat_spring_conf.xml b/factory-method/src/test/resources/configure/uat_spring_conf.xml new file mode 100644 index 000000000000..169a91514700 --- /dev/null +++ b/factory-method/src/test/resources/configure/uat_spring_conf.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/factory-method/src/test/resources/data/backup/README b/factory-method/src/test/resources/data/backup/README new file mode 100644 index 000000000000..a5b99861a7dc --- /dev/null +++ b/factory-method/src/test/resources/data/backup/README @@ -0,0 +1 @@ +ļ \ No newline at end of file diff --git a/factory-method/src/test/resources/data/config/README b/factory-method/src/test/resources/data/config/README new file mode 100644 index 000000000000..4849e2aef709 --- /dev/null +++ b/factory-method/src/test/resources/data/config/README @@ -0,0 +1 @@ +Objectļ \ No newline at end of file diff --git a/factory-method/src/test/resources/data/excel/README b/factory-method/src/test/resources/data/excel/README new file mode 100644 index 000000000000..4849e2aef709 --- /dev/null +++ b/factory-method/src/test/resources/data/excel/README @@ -0,0 +1 @@ +Objectļ \ No newline at end of file diff --git a/factory-method/src/test/resources/data/object/README b/factory-method/src/test/resources/data/object/README new file mode 100644 index 000000000000..271c286f3687 --- /dev/null +++ b/factory-method/src/test/resources/data/object/README @@ -0,0 +1 @@ +̻ļ \ No newline at end of file diff --git a/factory-method/src/test/resources/data/spring/README b/factory-method/src/test/resources/data/spring/README new file mode 100644 index 000000000000..961ee7009fd2 --- /dev/null +++ b/factory-method/src/test/resources/data/spring/README @@ -0,0 +1 @@ +spring ļ \ No newline at end of file diff --git a/factory-method/src/test/resources/temp/README b/factory-method/src/test/resources/temp/README new file mode 100644 index 000000000000..ccffba66ffdd --- /dev/null +++ b/factory-method/src/test/resources/temp/README @@ -0,0 +1 @@ +ʱļ \ No newline at end of file diff --git a/factory-method/src/test/testng.xml b/factory-method/src/test/testng.xml new file mode 100644 index 000000000000..1fa0f7461a59 --- /dev/null +++ b/factory-method/src/test/testng.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/flyweight/src/main/java/com/iluwatar/AlchemistShop.java b/flyweight/src/main/java/com/iluwatar/flyweight/AlchemistShop.java similarity index 88% rename from flyweight/src/main/java/com/iluwatar/AlchemistShop.java rename to flyweight/src/main/java/com/iluwatar/flyweight/AlchemistShop.java index 3d15668c891a..13823f0be437 100644 --- a/flyweight/src/main/java/com/iluwatar/AlchemistShop.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/AlchemistShop.java @@ -1,57 +1,57 @@ -package com.iluwatar; - -import java.util.ArrayList; -import java.util.List; - -/** - * - * The class that needs many objects. - * - */ -public class AlchemistShop { - - List topShelf; - List bottomShelf; - - public AlchemistShop() { - topShelf = new ArrayList<>(); - bottomShelf = new ArrayList<>(); - fillShelves(); - } - - private void fillShelves() { - - PotionFactory factory = new PotionFactory(); - - topShelf.add(factory.createPotion(PotionType.INVISIBILITY)); - topShelf.add(factory.createPotion(PotionType.INVISIBILITY)); - topShelf.add(factory.createPotion(PotionType.STRENGTH)); - topShelf.add(factory.createPotion(PotionType.HEALING)); - topShelf.add(factory.createPotion(PotionType.INVISIBILITY)); - topShelf.add(factory.createPotion(PotionType.STRENGTH)); - topShelf.add(factory.createPotion(PotionType.HEALING)); - topShelf.add(factory.createPotion(PotionType.HEALING)); - - bottomShelf.add(factory.createPotion(PotionType.POISON)); - bottomShelf.add(factory.createPotion(PotionType.POISON)); - bottomShelf.add(factory.createPotion(PotionType.POISON)); - bottomShelf.add(factory.createPotion(PotionType.HOLY_WATER)); - bottomShelf.add(factory.createPotion(PotionType.HOLY_WATER)); - } - - public void enumerate() { - - System.out.println("Enumerating top shelf potions\n"); - - for (Potion p: topShelf) { - p.drink(); - } - - System.out.println("\nEnumerating bottom shelf potions\n"); - - for (Potion p: bottomShelf) { - p.drink(); - } - - } -} +package com.iluwatar.flyweight; + +import java.util.ArrayList; +import java.util.List; + +/** + * + * The class that needs many objects. + * + */ +public class AlchemistShop { + + List topShelf; + List bottomShelf; + + public AlchemistShop() { + topShelf = new ArrayList(); + bottomShelf = new ArrayList(); + fillShelves(); + } + + private void fillShelves() { + + PotionFactory factory = new PotionFactory(); + + topShelf.add(factory.createPotion(PotionType.INVISIBILITY)); + topShelf.add(factory.createPotion(PotionType.INVISIBILITY)); + topShelf.add(factory.createPotion(PotionType.STRENGTH)); + topShelf.add(factory.createPotion(PotionType.HEALING)); + topShelf.add(factory.createPotion(PotionType.INVISIBILITY)); + topShelf.add(factory.createPotion(PotionType.STRENGTH)); + topShelf.add(factory.createPotion(PotionType.HEALING)); + topShelf.add(factory.createPotion(PotionType.HEALING)); + + bottomShelf.add(factory.createPotion(PotionType.POISON)); + bottomShelf.add(factory.createPotion(PotionType.POISON)); + bottomShelf.add(factory.createPotion(PotionType.POISON)); + bottomShelf.add(factory.createPotion(PotionType.HOLY_WATER)); + bottomShelf.add(factory.createPotion(PotionType.HOLY_WATER)); + } + + public void enumerate() { + + System.out.println("Enumerating top shelf potions\n"); + + for (Potion p: topShelf) { + p.drink(); + } + + System.out.println("\nEnumerating bottom shelf potions\n"); + + for (Potion p: bottomShelf) { + p.drink(); + } + + } +} diff --git a/flyweight/src/main/java/com/iluwatar/App.java b/flyweight/src/main/java/com/iluwatar/flyweight/App.java similarity index 89% rename from flyweight/src/main/java/com/iluwatar/App.java rename to flyweight/src/main/java/com/iluwatar/flyweight/App.java index d3b23dc867e7..c2b6dd3f6f91 100644 --- a/flyweight/src/main/java/com/iluwatar/App.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/App.java @@ -1,17 +1,17 @@ -package com.iluwatar; - -/** - * - * Flyweight (PotionFactory) is useful when there is plethora of - * objects (Potion). It provides means to decrease resource usage - * by sharing object instances. - * - */ -public class App -{ - public static void main( String[] args ) - { - AlchemistShop alchemistShop = new AlchemistShop(); - alchemistShop.enumerate(); - } -} +package com.iluwatar.flyweight; + +/** + * + * Flyweight (PotionFactory) is useful when there is plethora of + * objects (Potion). It provides means to decrease resource usage + * by sharing object instances. + * + */ +public class App +{ + public static void main( String[] args ) + { + AlchemistShop alchemistShop = new AlchemistShop(); + alchemistShop.enumerate(); + } +} diff --git a/flyweight/src/main/java/com/iluwatar/HealingPotion.java b/flyweight/src/main/java/com/iluwatar/flyweight/HealingPotion.java similarity index 84% rename from flyweight/src/main/java/com/iluwatar/HealingPotion.java rename to flyweight/src/main/java/com/iluwatar/flyweight/HealingPotion.java index 944dea751e37..e2da1048fb97 100644 --- a/flyweight/src/main/java/com/iluwatar/HealingPotion.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/HealingPotion.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class HealingPotion implements Potion { - - @Override - public void drink() { - System.out.println("You feel healed. (Potion=" + System.identityHashCode(this) + ")"); - } - -} +package com.iluwatar.flyweight; + +public class HealingPotion implements Potion { + + @Override + public void drink() { + System.out.println("You feel healed. (Potion=" + System.identityHashCode(this) + ")"); + } + +} diff --git a/flyweight/src/main/java/com/iluwatar/HolyWaterPotion.java b/flyweight/src/main/java/com/iluwatar/flyweight/HolyWaterPotion.java similarity index 84% rename from flyweight/src/main/java/com/iluwatar/HolyWaterPotion.java rename to flyweight/src/main/java/com/iluwatar/flyweight/HolyWaterPotion.java index 27b185a9467e..de33a716f0f9 100644 --- a/flyweight/src/main/java/com/iluwatar/HolyWaterPotion.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/HolyWaterPotion.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class HolyWaterPotion implements Potion { - - @Override - public void drink() { - System.out.println("You feel blessed. (Potion=" + System.identityHashCode(this) + ")"); - } - -} +package com.iluwatar.flyweight; + +public class HolyWaterPotion implements Potion { + + @Override + public void drink() { + System.out.println("You feel blessed. (Potion=" + System.identityHashCode(this) + ")"); + } + +} diff --git a/flyweight/src/main/java/com/iluwatar/InvisibilityPotion.java b/flyweight/src/main/java/com/iluwatar/flyweight/InvisibilityPotion.java similarity index 85% rename from flyweight/src/main/java/com/iluwatar/InvisibilityPotion.java rename to flyweight/src/main/java/com/iluwatar/flyweight/InvisibilityPotion.java index 7796b5bebe6e..40a9b69554e2 100644 --- a/flyweight/src/main/java/com/iluwatar/InvisibilityPotion.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/InvisibilityPotion.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class InvisibilityPotion implements Potion { - - @Override - public void drink() { - System.out.println("You become invisible. (Potion=" + System.identityHashCode(this) + ")"); - } - -} +package com.iluwatar.flyweight; + +public class InvisibilityPotion implements Potion { + + @Override + public void drink() { + System.out.println("You become invisible. (Potion=" + System.identityHashCode(this) + ")"); + } + +} diff --git a/flyweight/src/main/java/com/iluwatar/PoisonPotion.java b/flyweight/src/main/java/com/iluwatar/flyweight/PoisonPotion.java similarity index 85% rename from flyweight/src/main/java/com/iluwatar/PoisonPotion.java rename to flyweight/src/main/java/com/iluwatar/flyweight/PoisonPotion.java index 728b0d00b1be..cc7e5d0d3141 100644 --- a/flyweight/src/main/java/com/iluwatar/PoisonPotion.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/PoisonPotion.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class PoisonPotion implements Potion { - - @Override - public void drink() { - System.out.println("Urgh! This is poisonous. (Potion=" + System.identityHashCode(this) + ")"); - } - -} +package com.iluwatar.flyweight; + +public class PoisonPotion implements Potion { + + @Override + public void drink() { + System.out.println("Urgh! This is poisonous. (Potion=" + System.identityHashCode(this) + ")"); + } + +} diff --git a/flyweight/src/main/java/com/iluwatar/Potion.java b/flyweight/src/main/java/com/iluwatar/flyweight/Potion.java similarity index 73% rename from flyweight/src/main/java/com/iluwatar/Potion.java rename to flyweight/src/main/java/com/iluwatar/flyweight/Potion.java index 91cfabe3a1e9..b76e7b4e52ab 100644 --- a/flyweight/src/main/java/com/iluwatar/Potion.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/Potion.java @@ -1,12 +1,12 @@ -package com.iluwatar; - -/** - * - * Interface for objects. - * - */ -public interface Potion { - - public void drink(); - -} +package com.iluwatar.flyweight; + +/** + * + * Interface for objects. + * + */ +public interface Potion { + + public void drink(); + +} diff --git a/flyweight/src/main/java/com/iluwatar/PotionFactory.java b/flyweight/src/main/java/com/iluwatar/flyweight/PotionFactory.java similarity index 86% rename from flyweight/src/main/java/com/iluwatar/PotionFactory.java rename to flyweight/src/main/java/com/iluwatar/flyweight/PotionFactory.java index d1eb09a74a14..0ea48e01bd98 100644 --- a/flyweight/src/main/java/com/iluwatar/PotionFactory.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/PotionFactory.java @@ -1,49 +1,49 @@ -package com.iluwatar; - -import java.util.EnumMap; - -/** - * - * Flyweight. - * - */ -public class PotionFactory { - - private EnumMap potions; - - public PotionFactory() { - potions = new EnumMap<>(PotionType.class); - } - - Potion createPotion(PotionType type) { - Potion potion = potions.get(type); - if (potion == null) { - switch (type) { - case HEALING: - potion = new HealingPotion(); - potions.put(type, potion); - break; - case HOLY_WATER: - potion = new HolyWaterPotion(); - potions.put(type, potion); - break; - case INVISIBILITY: - potion = new InvisibilityPotion(); - potions.put(type, potion); - break; - case POISON: - potion = new PoisonPotion(); - potions.put(type, potion); - break; - case STRENGTH: - potion = new StrengthPotion(); - potions.put(type, potion); - break; - default: - break; - } - } - return potion; - } - -} +package com.iluwatar.flyweight; + +import java.util.EnumMap; + +/** + * + * Flyweight. + * + */ +public class PotionFactory { + + private EnumMap potions; + + public PotionFactory() { + potions = new EnumMap(PotionType.class); + } + + Potion createPotion(PotionType type) { + Potion potion = potions.get(type); + if (potion == null) { + switch (type) { + case HEALING: + potion = new HealingPotion(); + potions.put(type, potion); + break; + case HOLY_WATER: + potion = new HolyWaterPotion(); + potions.put(type, potion); + break; + case INVISIBILITY: + potion = new InvisibilityPotion(); + potions.put(type, potion); + break; + case POISON: + potion = new PoisonPotion(); + potions.put(type, potion); + break; + case STRENGTH: + potion = new StrengthPotion(); + potions.put(type, potion); + break; + default: + break; + } + } + return potion; + } + +} diff --git a/flyweight/src/main/java/com/iluwatar/PotionType.java b/flyweight/src/main/java/com/iluwatar/flyweight/PotionType.java similarity index 72% rename from flyweight/src/main/java/com/iluwatar/PotionType.java rename to flyweight/src/main/java/com/iluwatar/flyweight/PotionType.java index ff4e392c9f26..38c5a3a53c79 100644 --- a/flyweight/src/main/java/com/iluwatar/PotionType.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/PotionType.java @@ -1,11 +1,11 @@ -package com.iluwatar; - -public enum PotionType { - - HEALING, - INVISIBILITY, - STRENGTH, - HOLY_WATER, - POISON; - -} +package com.iluwatar.flyweight; + +public enum PotionType { + + HEALING, + INVISIBILITY, + STRENGTH, + HOLY_WATER, + POISON; + +} diff --git a/flyweight/src/main/java/com/iluwatar/StrengthPotion.java b/flyweight/src/main/java/com/iluwatar/flyweight/StrengthPotion.java similarity index 84% rename from flyweight/src/main/java/com/iluwatar/StrengthPotion.java rename to flyweight/src/main/java/com/iluwatar/flyweight/StrengthPotion.java index 0709b5b53116..d69bb90974ab 100644 --- a/flyweight/src/main/java/com/iluwatar/StrengthPotion.java +++ b/flyweight/src/main/java/com/iluwatar/flyweight/StrengthPotion.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class StrengthPotion implements Potion { - - @Override - public void drink() { - System.out.println("You feel strong. (Potion=" + System.identityHashCode(this) + ")"); - } - -} +package com.iluwatar.flyweight; + +public class StrengthPotion implements Potion { + + @Override + public void drink() { + System.out.println("You feel strong. (Potion=" + System.identityHashCode(this) + ")"); + } + +} diff --git a/interpreter/src/main/java/com/iluwatar/App.java b/interpreter/src/main/java/com/iluwatar/interpreter/App.java similarity index 76% rename from interpreter/src/main/java/com/iluwatar/App.java rename to interpreter/src/main/java/com/iluwatar/interpreter/App.java index ce2d6b520d29..efd9b3f9421d 100644 --- a/interpreter/src/main/java/com/iluwatar/App.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/App.java @@ -1,67 +1,68 @@ -package com.iluwatar; - -import java.util.Stack; - -/** - * - * Interpreter pattern breaks sentences into expressions (Expression) - * that can be evaluated and as a whole form the result. - * - */ -public class App -{ - - /** - * - * Expressions can be evaluated using prefix, infix or postfix notations - * This sample uses postfix, where operator comes after the operands - * - */ - public static void main( String[] args ) - { - String tokenString = "4 3 2 - 1 + *"; - Stack stack = new Stack<>(); - - String[] tokenList = tokenString.split(" "); - for (String s : tokenList) { - if (isOperator(s)) { - Expression rightExpression = stack.pop(); - Expression leftExpression = stack.pop(); - System.out.println(String.format("popped from stack left: %d right: %d", - leftExpression.interpret(), rightExpression.interpret())); - Expression operator = getOperatorInstance(s, leftExpression, - rightExpression); - System.out.println(String.format("operator: %s", operator)); - int result = operator.interpret(); - NumberExpression resultExpression = new NumberExpression(result); - stack.push(resultExpression); - System.out.println(String.format("push result to stack: %d", resultExpression.interpret())); - } else { - Expression i = new NumberExpression(s); - stack.push(i); - System.out.println(String.format("push to stack: %d", i.interpret())); - } - } - System.out.println(String.format("result: %d", stack.pop().interpret())); - } - - public static boolean isOperator(String s) { - if (s.equals("+") || s.equals("-") || s.equals("*")) - return true; - else - return false; - } - - public static Expression getOperatorInstance(String s, Expression left, - Expression right) { - switch (s) { - case "+": - return new PlusExpression(left, right); - case "-": - return new MinusExpression(left, right); - case "*": - return new MultiplyExpression(left, right); - } - return null; - } -} +package com.iluwatar.interpreter; + +import java.util.Stack; + +/** + * + * Interpreter pattern breaks sentences into expressions (Expression) + * that can be evaluated and as a whole form the result. + * + */ +public class App +{ + + /** + * + * Expressions can be evaluated using prefix, infix or postfix notations + * This sample uses postfix, where operator comes after the operands + * + */ + public static void main( String[] args ) + { + String tokenString = "4 3 2 - 1 + *"; + Stack stack = new Stack(); + + String[] tokenList = tokenString.split(" "); + for (String s : tokenList) { + if (isOperator(s)) { + Expression rightExpression = stack.pop(); + Expression leftExpression = stack.pop(); + System.out.println(String.format("popped from stack left: %d right: %d", + leftExpression.interpret(), rightExpression.interpret())); + Expression operator = getOperatorInstance(s, leftExpression, + rightExpression); + System.out.println(String.format("operator: %s", operator)); + int result = operator.interpret(); + NumberExpression resultExpression = new NumberExpression(result); + stack.push(resultExpression); + System.out.println(String.format("push result to stack: %d", resultExpression.interpret())); + } else { + Expression i = new NumberExpression(s); + stack.push(i); + System.out.println(String.format("push to stack: %d", i.interpret())); + } + } + System.out.println(String.format("result: %d", stack.pop().interpret())); + } + + public static boolean isOperator(String s) { + if (s.equals("+") || s.equals("-") || s.equals("*")) { + return true; + } else { + return false; + } + } + + public static Expression getOperatorInstance(String s, Expression left, + Expression right) { + if ("+".equals(s)) { + return new PlusExpression(left, right); + } else if ("-".equals(s)) { + return new MinusExpression(left, right); + } else if ("*".equals(s)) { + return new MultiplyExpression(left, right); + } + + return null; + } +} diff --git a/interpreter/src/main/java/com/iluwatar/Expression.java b/interpreter/src/main/java/com/iluwatar/interpreter/Expression.java similarity index 78% rename from interpreter/src/main/java/com/iluwatar/Expression.java rename to interpreter/src/main/java/com/iluwatar/interpreter/Expression.java index 28fbce6fd71d..922807274c30 100644 --- a/interpreter/src/main/java/com/iluwatar/Expression.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/Expression.java @@ -1,9 +1,9 @@ -package com.iluwatar; - -public abstract class Expression { - - public abstract int interpret(); - - @Override - public abstract String toString(); -} +package com.iluwatar.interpreter; + +public abstract class Expression { + + public abstract int interpret(); + + @Override + public abstract String toString(); +} diff --git a/interpreter/src/main/java/com/iluwatar/MinusExpression.java b/interpreter/src/main/java/com/iluwatar/interpreter/MinusExpression.java similarity index 91% rename from interpreter/src/main/java/com/iluwatar/MinusExpression.java rename to interpreter/src/main/java/com/iluwatar/interpreter/MinusExpression.java index 8025020fcb49..c344daf5f400 100644 --- a/interpreter/src/main/java/com/iluwatar/MinusExpression.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/MinusExpression.java @@ -1,23 +1,23 @@ -package com.iluwatar; - -public class MinusExpression extends Expression { - - private Expression leftExpression; - private Expression rightExpression; - - public MinusExpression(Expression leftExpression, Expression rightExpression) { - this.leftExpression = leftExpression; - this.rightExpression = rightExpression; - } - - @Override - public int interpret() { - return leftExpression.interpret() - rightExpression.interpret(); - } - - @Override - public String toString() { - return "-"; - } - -} +package com.iluwatar.interpreter; + +public class MinusExpression extends Expression { + + private Expression leftExpression; + private Expression rightExpression; + + public MinusExpression(Expression leftExpression, Expression rightExpression) { + this.leftExpression = leftExpression; + this.rightExpression = rightExpression; + } + + @Override + public int interpret() { + return leftExpression.interpret() - rightExpression.interpret(); + } + + @Override + public String toString() { + return "-"; + } + +} diff --git a/interpreter/src/main/java/com/iluwatar/MultiplyExpression.java b/interpreter/src/main/java/com/iluwatar/interpreter/MultiplyExpression.java similarity index 91% rename from interpreter/src/main/java/com/iluwatar/MultiplyExpression.java rename to interpreter/src/main/java/com/iluwatar/interpreter/MultiplyExpression.java index 15e1a1d9e282..6fa02f67ba47 100644 --- a/interpreter/src/main/java/com/iluwatar/MultiplyExpression.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/MultiplyExpression.java @@ -1,23 +1,23 @@ -package com.iluwatar; - -public class MultiplyExpression extends Expression { - - private Expression leftExpression; - private Expression rightExpression; - - public MultiplyExpression(Expression leftExpression, Expression rightExpression) { - this.leftExpression = leftExpression; - this.rightExpression = rightExpression; - } - - @Override - public int interpret() { - return leftExpression.interpret() * rightExpression.interpret(); - } - - @Override - public String toString() { - return "*"; - } - -} +package com.iluwatar.interpreter; + +public class MultiplyExpression extends Expression { + + private Expression leftExpression; + private Expression rightExpression; + + public MultiplyExpression(Expression leftExpression, Expression rightExpression) { + this.leftExpression = leftExpression; + this.rightExpression = rightExpression; + } + + @Override + public int interpret() { + return leftExpression.interpret() * rightExpression.interpret(); + } + + @Override + public String toString() { + return "*"; + } + +} diff --git a/interpreter/src/main/java/com/iluwatar/NumberExpression.java b/interpreter/src/main/java/com/iluwatar/interpreter/NumberExpression.java similarity index 87% rename from interpreter/src/main/java/com/iluwatar/NumberExpression.java rename to interpreter/src/main/java/com/iluwatar/interpreter/NumberExpression.java index 0e818f3368bc..104fd39f5b3d 100644 --- a/interpreter/src/main/java/com/iluwatar/NumberExpression.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/NumberExpression.java @@ -1,25 +1,25 @@ -package com.iluwatar; - -public class NumberExpression extends Expression { - - private int number; - - public NumberExpression(int number) { - this.number = number; - } - - public NumberExpression(String s) { - this.number = Integer.parseInt(s); - } - - @Override - public int interpret() { - return number; - } - - @Override - public String toString() { - return "number"; - } - -} +package com.iluwatar.interpreter; + +public class NumberExpression extends Expression { + + private int number; + + public NumberExpression(int number) { + this.number = number; + } + + public NumberExpression(String s) { + this.number = Integer.parseInt(s); + } + + @Override + public int interpret() { + return number; + } + + @Override + public String toString() { + return "number"; + } + +} diff --git a/interpreter/src/main/java/com/iluwatar/PlusExpression.java b/interpreter/src/main/java/com/iluwatar/interpreter/PlusExpression.java similarity index 91% rename from interpreter/src/main/java/com/iluwatar/PlusExpression.java rename to interpreter/src/main/java/com/iluwatar/interpreter/PlusExpression.java index de090c3320c0..22d8d09d27e6 100644 --- a/interpreter/src/main/java/com/iluwatar/PlusExpression.java +++ b/interpreter/src/main/java/com/iluwatar/interpreter/PlusExpression.java @@ -1,23 +1,23 @@ -package com.iluwatar; - -public class PlusExpression extends Expression { - - private Expression leftExpression; - private Expression rightExpression; - - public PlusExpression(Expression leftExpression, Expression rightExpression) { - this.leftExpression = leftExpression; - this.rightExpression = rightExpression; - } - - @Override - public int interpret() { - return leftExpression.interpret() + rightExpression.interpret(); - } - - @Override - public String toString() { - return "+"; - } - -} +package com.iluwatar.interpreter; + +public class PlusExpression extends Expression { + + private Expression leftExpression; + private Expression rightExpression; + + public PlusExpression(Expression leftExpression, Expression rightExpression) { + this.leftExpression = leftExpression; + this.rightExpression = rightExpression; + } + + @Override + public int interpret() { + return leftExpression.interpret() + rightExpression.interpret(); + } + + @Override + public String toString() { + return "+"; + } + +} diff --git a/iterator/src/main/java/com/iluwatar/App.java b/iterator/src/main/java/com/iluwatar/iterator/App.java similarity index 94% rename from iterator/src/main/java/com/iluwatar/App.java rename to iterator/src/main/java/com/iluwatar/iterator/App.java index 0ee92de1bc74..4c706486509c 100644 --- a/iterator/src/main/java/com/iluwatar/App.java +++ b/iterator/src/main/java/com/iluwatar/iterator/App.java @@ -1,42 +1,42 @@ -package com.iluwatar; - -/** - * - * Iterator (ItemIterator) adds abstraction layer on top of a - * collection (TreasureChest). This way the collection can change - * its internal implementation without affecting its clients. - * - */ -public class App -{ - public static void main( String[] args ) - { - TreasureChest chest = new TreasureChest(); - - ItemIterator ringIterator = chest.Iterator(ItemType.RING); - while (ringIterator.hasNext()) { - System.out.println(ringIterator.next()); - } - - System.out.println("----------"); - - ItemIterator potionIterator = chest.Iterator(ItemType.POTION); - while (potionIterator.hasNext()) { - System.out.println(potionIterator.next()); - } - - System.out.println("----------"); - - ItemIterator weaponIterator = chest.Iterator(ItemType.WEAPON); - while (weaponIterator.hasNext()) { - System.out.println(weaponIterator.next()); - } - - System.out.println("----------"); - - ItemIterator it = chest.Iterator(ItemType.ANY); - while (it.hasNext()) { - System.out.println(it.next()); - } - } -} +package com.iluwatar.iterator; + +/** + * + * Iterator (ItemIterator) adds abstraction layer on top of a + * collection (TreasureChest). This way the collection can change + * its internal implementation without affecting its clients. + * + */ +public class App +{ + public static void main( String[] args ) + { + TreasureChest chest = new TreasureChest(); + + ItemIterator ringIterator = chest.Iterator(ItemType.RING); + while (ringIterator.hasNext()) { + System.out.println(ringIterator.next()); + } + + System.out.println("----------"); + + ItemIterator potionIterator = chest.Iterator(ItemType.POTION); + while (potionIterator.hasNext()) { + System.out.println(potionIterator.next()); + } + + System.out.println("----------"); + + ItemIterator weaponIterator = chest.Iterator(ItemType.WEAPON); + while (weaponIterator.hasNext()) { + System.out.println(weaponIterator.next()); + } + + System.out.println("----------"); + + ItemIterator it = chest.Iterator(ItemType.ANY); + while (it.hasNext()) { + System.out.println(it.next()); + } + } +} diff --git a/iterator/src/main/java/com/iluwatar/Item.java b/iterator/src/main/java/com/iluwatar/iterator/Item.java similarity index 87% rename from iterator/src/main/java/com/iluwatar/Item.java rename to iterator/src/main/java/com/iluwatar/iterator/Item.java index f7a3b7661e74..41109bb3ed22 100644 --- a/iterator/src/main/java/com/iluwatar/Item.java +++ b/iterator/src/main/java/com/iluwatar/iterator/Item.java @@ -1,25 +1,25 @@ -package com.iluwatar; - -public class Item { - - private ItemType type; - private String name; - - public Item(ItemType type, String name) { - this.setType(type); - this.name = name; - } - - @Override - public String toString() { - return name; - } - - public ItemType getType() { - return type; - } - - public void setType(ItemType type) { - this.type = type; - } -} +package com.iluwatar.iterator; + +public class Item { + + private ItemType type; + private String name; + + public Item(ItemType type, String name) { + this.setType(type); + this.name = name; + } + + @Override + public String toString() { + return name; + } + + public ItemType getType() { + return type; + } + + public void setType(ItemType type) { + this.type = type; + } +} diff --git a/iterator/src/main/java/com/iluwatar/ItemIterator.java b/iterator/src/main/java/com/iluwatar/iterator/ItemIterator.java similarity index 71% rename from iterator/src/main/java/com/iluwatar/ItemIterator.java rename to iterator/src/main/java/com/iluwatar/iterator/ItemIterator.java index 1a6da1cd46a3..b56c0ed24de8 100644 --- a/iterator/src/main/java/com/iluwatar/ItemIterator.java +++ b/iterator/src/main/java/com/iluwatar/iterator/ItemIterator.java @@ -1,13 +1,15 @@ -package com.iluwatar; - -/** - * - * Iterator interface. - * - */ -public interface ItemIterator { - - boolean hasNext(); - - Item next(); -} +package com.iluwatar.iterator; + + + +/** + * + * Iterator interface. + * + */ +public interface ItemIterator { + + boolean hasNext(); + + Item next(); +} diff --git a/iterator/src/main/java/com/iluwatar/ItemType.java b/iterator/src/main/java/com/iluwatar/iterator/ItemType.java similarity index 64% rename from iterator/src/main/java/com/iluwatar/ItemType.java rename to iterator/src/main/java/com/iluwatar/iterator/ItemType.java index 905179417e35..508cb7f2b810 100644 --- a/iterator/src/main/java/com/iluwatar/ItemType.java +++ b/iterator/src/main/java/com/iluwatar/iterator/ItemType.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public enum ItemType { - - ANY, - WEAPON, - RING, - POTION - -} +package com.iluwatar.iterator; + +public enum ItemType { + + ANY, + WEAPON, + RING, + POTION + +} diff --git a/iterator/src/main/java/com/iluwatar/TreasureChest.java b/iterator/src/main/java/com/iluwatar/iterator/TreasureChest.java similarity index 86% rename from iterator/src/main/java/com/iluwatar/TreasureChest.java rename to iterator/src/main/java/com/iluwatar/iterator/TreasureChest.java index 7cc80e7ffdd5..edddb6bc40ab 100644 --- a/iterator/src/main/java/com/iluwatar/TreasureChest.java +++ b/iterator/src/main/java/com/iluwatar/iterator/TreasureChest.java @@ -1,39 +1,41 @@ -package com.iluwatar; - -import java.util.ArrayList; -import java.util.List; - -/** - * - * Collection class. - * - */ -public class TreasureChest { - - private List items; - - public TreasureChest() { - items = new ArrayList<>(); - items.add(new Item(ItemType.POTION, "Potion of courage")); - items.add(new Item(ItemType.RING, "Ring of shadows")); - items.add(new Item(ItemType.POTION, "Potion of wisdom")); - items.add(new Item(ItemType.POTION, "Potion of blood")); - items.add(new Item(ItemType.WEAPON, "Sword of silver +1")); - items.add(new Item(ItemType.POTION, "Potion of rust")); - items.add(new Item(ItemType.POTION, "Potion of healing")); - items.add(new Item(ItemType.RING, "Ring of armor")); - items.add(new Item(ItemType.WEAPON, "Steel halberd")); - items.add(new Item(ItemType.WEAPON, "Dagger of poison")); - } - - ItemIterator Iterator(ItemType type) { - return new TreasureChestItemIterator(this, type); - } - - public List getItems() { - ArrayList list = new ArrayList<>(); - list.addAll(items); - return list; - } - -} +package com.iluwatar.iterator; + +import java.util.ArrayList; +import java.util.List; + + + +/** + * + * Collection class. + * + */ +public class TreasureChest { + + private List items; + + public TreasureChest() { + items = new ArrayList(); + items.add(new Item(ItemType.POTION, "Potion of courage")); + items.add(new Item(ItemType.RING, "Ring of shadows")); + items.add(new Item(ItemType.POTION, "Potion of wisdom")); + items.add(new Item(ItemType.POTION, "Potion of blood")); + items.add(new Item(ItemType.WEAPON, "Sword of silver +1")); + items.add(new Item(ItemType.POTION, "Potion of rust")); + items.add(new Item(ItemType.POTION, "Potion of healing")); + items.add(new Item(ItemType.RING, "Ring of armor")); + items.add(new Item(ItemType.WEAPON, "Steel halberd")); + items.add(new Item(ItemType.WEAPON, "Dagger of poison")); + } + + ItemIterator Iterator(ItemType type) { + return new TreasureChestItemIterator(this, type); + } + + public List getItems() { + ArrayList list = new ArrayList(); + list.addAll(items); + return list; + } + +} diff --git a/iterator/src/main/java/com/iluwatar/TreasureChestItemIterator.java b/iterator/src/main/java/com/iluwatar/iterator/TreasureChestItemIterator.java similarity index 89% rename from iterator/src/main/java/com/iluwatar/TreasureChestItemIterator.java rename to iterator/src/main/java/com/iluwatar/iterator/TreasureChestItemIterator.java index 01e089b08798..e02073bc35fe 100644 --- a/iterator/src/main/java/com/iluwatar/TreasureChestItemIterator.java +++ b/iterator/src/main/java/com/iluwatar/iterator/TreasureChestItemIterator.java @@ -1,48 +1,50 @@ -package com.iluwatar; - -import java.util.List; - -public class TreasureChestItemIterator implements ItemIterator { - - private TreasureChest chest; - private int idx; - private ItemType type; - - public TreasureChestItemIterator(TreasureChest chest, ItemType type) { - this.chest = chest; - this.type = type; - this.idx = -1; - } - - @Override - public boolean hasNext() { - return findNextIdx() != -1; - } - - @Override - public Item next() { - idx = findNextIdx(); - if (idx != -1) { - return chest.getItems().get(idx); - } - return null; - } - - private int findNextIdx() { - - List items = chest.getItems(); - boolean found = false; - int tempIdx = idx; - while (!found) { - tempIdx++; - if (tempIdx >= items.size()) { - tempIdx = -1; - break; - } - if (type.equals(ItemType.ANY) || items.get(tempIdx).getType().equals(type)) { - break; - } - } - return tempIdx; - } -} +package com.iluwatar.iterator; + +import java.util.List; + + + +public class TreasureChestItemIterator implements ItemIterator { + + private TreasureChest chest; + private int idx; + private ItemType type; + + public TreasureChestItemIterator(TreasureChest chest, ItemType type) { + this.chest = chest; + this.type = type; + idx = -1; + } + + @Override + public boolean hasNext() { + return findNextIdx() != -1; + } + + @Override + public Item next() { + idx = findNextIdx(); + if (idx != -1) { + return chest.getItems().get(idx); + } + return null; + } + + private int findNextIdx() { + + List items = chest.getItems(); + boolean found = false; + int tempIdx = idx; + while (!found) { + tempIdx++; + if (tempIdx >= items.size()) { + tempIdx = -1; + break; + } + if (type.equals(ItemType.ANY) || items.get(tempIdx).getType().equals(type)) { + break; + } + } + return tempIdx; + } +} diff --git a/mediator/src/main/java/com/iluwatar/App.java b/mediator/src/main/java/com/iluwatar/App.java deleted file mode 100644 index 4a7053e843e4..000000000000 --- a/mediator/src/main/java/com/iluwatar/App.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.iluwatar; - -/** - * - * Mediator encapsulates how set of objects (PartyMember) interact. - * Instead of referring to each other directly they - * use the mediator (Party) interface. - * - */ -public class App -{ - public static void main( String[] args ) - { - Party party = new PartyImpl(); - Hobbit hobbit = new Hobbit(); - Wizard wizard = new Wizard(); - Rogue rogue = new Rogue(); - Hunter hunter = new Hunter(); - - party.addMember(hobbit); - party.addMember(wizard); - party.addMember(rogue); - party.addMember(hunter); - - hobbit.act(Action.ENEMY); - wizard.act(Action.TALE); - rogue.act(Action.GOLD); - hunter.act(Action.HUNT); - } -} diff --git a/mediator/src/main/java/com/iluwatar/Action.java b/mediator/src/main/java/com/iluwatar/mediator/Action.java similarity index 87% rename from mediator/src/main/java/com/iluwatar/Action.java rename to mediator/src/main/java/com/iluwatar/mediator/Action.java index 6dd42dc941d0..5e3dd59712e5 100644 --- a/mediator/src/main/java/com/iluwatar/Action.java +++ b/mediator/src/main/java/com/iluwatar/mediator/Action.java @@ -1,28 +1,28 @@ -package com.iluwatar; - -public enum Action { - - HUNT, TALE, GOLD, ENEMY; - - public String toString() { - - String s = ""; - switch (this) { - case ENEMY: - s = "spotted enemies"; - break; - case GOLD: - s = "found gold"; - break; - case HUNT: - s = "hunted a rabbit"; - break; - case TALE: - s = "tells a tale"; - break; - default: - break; - } - return s; - }; -} +package com.iluwatar.mediator; + +public enum Action { + + HUNT, TALE, GOLD, ENEMY; + + public String toString() { + + String s = ""; + switch (this) { + case ENEMY: + s = "spotted enemies"; + break; + case GOLD: + s = "found gold"; + break; + case HUNT: + s = "hunted a rabbit"; + break; + case TALE: + s = "tells a tale"; + break; + default: + break; + } + return s; + }; +} diff --git a/mediator/src/main/java/com/iluwatar/mediator/App.java b/mediator/src/main/java/com/iluwatar/mediator/App.java new file mode 100644 index 000000000000..974e099110b5 --- /dev/null +++ b/mediator/src/main/java/com/iluwatar/mediator/App.java @@ -0,0 +1,32 @@ +package com.iluwatar.mediator; + + + +/** + * + * Mediator encapsulates how set of objects (PartyMember) interact. + * Instead of referring to each other directly they + * use the mediator (Party) interface. + * + */ +public class App +{ + public static void main( String[] args ) + { + Party party = new PartyImpl(); + Hobbit hobbit = new Hobbit(); + Wizard wizard = new Wizard(); + Rogue rogue = new Rogue(); + Hunter hunter = new Hunter(); + + party.addMember(hobbit); + party.addMember(wizard); + party.addMember(rogue); + party.addMember(hunter); + + hobbit.act(Action.ENEMY); + wizard.act(Action.TALE); + rogue.act(Action.GOLD); + hunter.act(Action.HUNT); + } +} diff --git a/mediator/src/main/java/com/iluwatar/Hobbit.java b/mediator/src/main/java/com/iluwatar/mediator/Hobbit.java similarity index 77% rename from mediator/src/main/java/com/iluwatar/Hobbit.java rename to mediator/src/main/java/com/iluwatar/mediator/Hobbit.java index ae8542fad2e9..9e17d24bd868 100644 --- a/mediator/src/main/java/com/iluwatar/Hobbit.java +++ b/mediator/src/main/java/com/iluwatar/mediator/Hobbit.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class Hobbit extends PartyMemberBase { - - @Override - public String toString() { - return "Hobbit"; - } - -} +package com.iluwatar.mediator; + +public class Hobbit extends PartyMemberBase { + + @Override + public String toString() { + return "Hobbit"; + } + +} diff --git a/mediator/src/main/java/com/iluwatar/Hunter.java b/mediator/src/main/java/com/iluwatar/mediator/Hunter.java similarity index 77% rename from mediator/src/main/java/com/iluwatar/Hunter.java rename to mediator/src/main/java/com/iluwatar/mediator/Hunter.java index e27cdf8b9d6e..de15fa1639e1 100644 --- a/mediator/src/main/java/com/iluwatar/Hunter.java +++ b/mediator/src/main/java/com/iluwatar/mediator/Hunter.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class Hunter extends PartyMemberBase { - - @Override - public String toString() { - return "Hunter"; - } - -} +package com.iluwatar.mediator; + +public class Hunter extends PartyMemberBase { + + @Override + public String toString() { + return "Hunter"; + } + +} diff --git a/mediator/src/main/java/com/iluwatar/Party.java b/mediator/src/main/java/com/iluwatar/mediator/Party.java similarity index 80% rename from mediator/src/main/java/com/iluwatar/Party.java rename to mediator/src/main/java/com/iluwatar/mediator/Party.java index cf72b31039ca..3f606b0a77d0 100644 --- a/mediator/src/main/java/com/iluwatar/Party.java +++ b/mediator/src/main/java/com/iluwatar/mediator/Party.java @@ -1,14 +1,14 @@ -package com.iluwatar; - -/** - * - * Mediator interface. - * - */ -public interface Party { - - void addMember(PartyMember member); - - void act(PartyMember actor, Action action); - -} +package com.iluwatar.mediator; + +/** + * + * Mediator interface. + * + */ +public interface Party { + + void addMember(PartyMember member); + + void act(PartyMember actor, Action action); + +} diff --git a/mediator/src/main/java/com/iluwatar/PartyImpl.java b/mediator/src/main/java/com/iluwatar/mediator/PartyImpl.java similarity index 85% rename from mediator/src/main/java/com/iluwatar/PartyImpl.java rename to mediator/src/main/java/com/iluwatar/mediator/PartyImpl.java index d95325d3f238..3be9bfe46749 100644 --- a/mediator/src/main/java/com/iluwatar/PartyImpl.java +++ b/mediator/src/main/java/com/iluwatar/mediator/PartyImpl.java @@ -1,37 +1,37 @@ -package com.iluwatar; - -import java.util.ArrayList; -import java.util.List; - -public class PartyImpl implements Party { - - private List members; - - public PartyImpl() { - members = new ArrayList<>(); - } - - @Override - public void act(PartyMember actor, Action action) { - for (PartyMember member: members) { - if (member != actor) { - member.partyAction(action); - } - } - } - - @Override - public void addMember(PartyMember member) { - members.add(member); - member.joinedParty(this); - } - - // somebody hunts for food, call for dinner - - // somebody spots enemy, alert everybody - - // somebody finds gold, deal the gold with everybody - - // somebody tells a tale, call everybody to listen - -} +package com.iluwatar.mediator; + +import java.util.ArrayList; +import java.util.List; + +public class PartyImpl implements Party { + + private List members; + + public PartyImpl() { + members = new ArrayList(); + } + + @Override + public void act(PartyMember actor, Action action) { + for (PartyMember member: members) { + if (member != actor) { + member.partyAction(action); + } + } + } + + @Override + public void addMember(PartyMember member) { + members.add(member); + member.joinedParty(this); + } + + // somebody hunts for food, call for dinner + + // somebody spots enemy, alert everybody + + // somebody finds gold, deal the gold with everybody + + // somebody tells a tale, call everybody to listen + +} diff --git a/mediator/src/main/java/com/iluwatar/PartyMember.java b/mediator/src/main/java/com/iluwatar/mediator/PartyMember.java similarity index 84% rename from mediator/src/main/java/com/iluwatar/PartyMember.java rename to mediator/src/main/java/com/iluwatar/mediator/PartyMember.java index 80e04ba2f1d1..e2be70eff0c9 100644 --- a/mediator/src/main/java/com/iluwatar/PartyMember.java +++ b/mediator/src/main/java/com/iluwatar/mediator/PartyMember.java @@ -1,15 +1,15 @@ -package com.iluwatar; - -/** - * - * Interface for party members interacting with Party. - * - */ -public interface PartyMember { - - void joinedParty(Party party); - - void partyAction(Action action); - - void act(Action action); -} +package com.iluwatar.mediator; + +/** + * + * Interface for party members interacting with Party. + * + */ +public interface PartyMember { + + void joinedParty(Party party); + + void partyAction(Action action); + + void act(Action action); +} diff --git a/mediator/src/main/java/com/iluwatar/PartyMemberBase.java b/mediator/src/main/java/com/iluwatar/mediator/PartyMemberBase.java similarity index 92% rename from mediator/src/main/java/com/iluwatar/PartyMemberBase.java rename to mediator/src/main/java/com/iluwatar/mediator/PartyMemberBase.java index 77b7a7cb448a..04763842cbb1 100644 --- a/mediator/src/main/java/com/iluwatar/PartyMemberBase.java +++ b/mediator/src/main/java/com/iluwatar/mediator/PartyMemberBase.java @@ -1,46 +1,46 @@ -package com.iluwatar; - -public abstract class PartyMemberBase implements PartyMember { - - protected Party party; - - @Override - public void joinedParty(Party party) { - System.out.println(this + " joins the party"); - this.party = party; - } - - @Override - public void partyAction(Action action) { - String s = this + " "; - switch (action) { - case ENEMY: - s = s + "runs for cover"; - break; - case GOLD: - s = s + "takes his share of the gold"; - break; - case HUNT: - s = s + "arrives for dinner"; - break; - case TALE: - s = s + "comes to listen"; - break; - default: - break; - } - System.out.println(s); - } - - @Override - public void act(Action action) { - if (party != null) { - System.out.println(this + " " + action.toString()); - party.act(this, action); - } - } - - @Override - public abstract String toString(); - -} +package com.iluwatar.mediator; + +public abstract class PartyMemberBase implements PartyMember { + + protected Party party; + + @Override + public void joinedParty(Party party) { + System.out.println(this + " joins the party"); + this.party = party; + } + + @Override + public void partyAction(Action action) { + String s = this + " "; + switch (action) { + case ENEMY: + s = s + "runs for cover"; + break; + case GOLD: + s = s + "takes his share of the gold"; + break; + case HUNT: + s = s + "arrives for dinner"; + break; + case TALE: + s = s + "comes to listen"; + break; + default: + break; + } + System.out.println(s); + } + + @Override + public void act(Action action) { + if (party != null) { + System.out.println(this + " " + action.toString()); + party.act(this, action); + } + } + + @Override + public abstract String toString(); + +} diff --git a/mediator/src/main/java/com/iluwatar/Rogue.java b/mediator/src/main/java/com/iluwatar/mediator/Rogue.java similarity index 77% rename from mediator/src/main/java/com/iluwatar/Rogue.java rename to mediator/src/main/java/com/iluwatar/mediator/Rogue.java index 5990e0523f5e..aab9144292fe 100644 --- a/mediator/src/main/java/com/iluwatar/Rogue.java +++ b/mediator/src/main/java/com/iluwatar/mediator/Rogue.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class Rogue extends PartyMemberBase { - - @Override - public String toString() { - return "Rogue"; - } - -} +package com.iluwatar.mediator; + +public class Rogue extends PartyMemberBase { + + @Override + public String toString() { + return "Rogue"; + } + +} diff --git a/mediator/src/main/java/com/iluwatar/Wizard.java b/mediator/src/main/java/com/iluwatar/mediator/Wizard.java similarity index 77% rename from mediator/src/main/java/com/iluwatar/Wizard.java rename to mediator/src/main/java/com/iluwatar/mediator/Wizard.java index 689879865932..6bccd36ceebc 100644 --- a/mediator/src/main/java/com/iluwatar/Wizard.java +++ b/mediator/src/main/java/com/iluwatar/mediator/Wizard.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class Wizard extends PartyMemberBase { - - @Override - public String toString() { - return "Wizard"; - } - -} +package com.iluwatar.mediator; + +public class Wizard extends PartyMemberBase { + + @Override + public String toString() { + return "Wizard"; + } + +} diff --git a/memento/src/main/java/com/iluwatar/App.java b/memento/src/main/java/com/iluwatar/App.java deleted file mode 100644 index c98bc320dd7d..000000000000 --- a/memento/src/main/java/com/iluwatar/App.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.iluwatar; - -import java.util.Stack; - -/** - * - * Memento pattern is for storing and restoring object - * state. The object (Star) gives out a "memento" - * (StarMemento) that contains the state of the object. - * Later on the memento can be set back to the object - * restoring the state. - * - */ -public class App -{ - public static void main( String[] args ) - { - Stack states = new Stack<>(); - - Star star = new Star(StarType.SUN, 10000000, 500000); - System.out.println(star); - states.add(star.getMemento()); - star.timePasses(); - System.out.println(star); - states.add(star.getMemento()); - star.timePasses(); - System.out.println(star); - states.add(star.getMemento()); - star.timePasses(); - System.out.println(star); - states.add(star.getMemento()); - star.timePasses(); - System.out.println(star); - while (states.size() > 0) { - star.setMemento(states.pop()); - System.out.println(star); - } - } -} diff --git a/memento/src/main/java/com/iluwatar/memento/App.java b/memento/src/main/java/com/iluwatar/memento/App.java new file mode 100644 index 000000000000..710f38d81daa --- /dev/null +++ b/memento/src/main/java/com/iluwatar/memento/App.java @@ -0,0 +1,39 @@ +package com.iluwatar.memento; + +import java.util.Stack; + +/** + * + * Memento pattern is for storing and restoring object + * state. The object (Star) gives out a "memento" + * (StarMemento) that contains the state of the object. + * Later on the memento can be set back to the object + * restoring the state. + * + */ +public class App +{ + public static void main( String[] args ) + { + Stack states = new Stack(); + + Star star = new Star(StarType.SUN, 10000000, 500000); + System.out.println(star); + states.add(star.getMemento()); + star.timePasses(); + System.out.println(star); + states.add(star.getMemento()); + star.timePasses(); + System.out.println(star); + states.add(star.getMemento()); + star.timePasses(); + System.out.println(star); + states.add(star.getMemento()); + star.timePasses(); + System.out.println(star); + while (states.size() > 0) { + star.setMemento(states.pop()); + System.out.println(star); + } + } +} diff --git a/memento/src/main/java/com/iluwatar/Star.java b/memento/src/main/java/com/iluwatar/memento/Star.java similarity index 93% rename from memento/src/main/java/com/iluwatar/Star.java rename to memento/src/main/java/com/iluwatar/memento/Star.java index 03a5ad305ec7..03ec2fd52926 100644 --- a/memento/src/main/java/com/iluwatar/Star.java +++ b/memento/src/main/java/com/iluwatar/memento/Star.java @@ -1,68 +1,68 @@ -package com.iluwatar; - -/** - * - * Star uses "mementos" to store and restore state. - * - */ -public class Star { - - private StarType type; - private int ageYears; - private int massTons; - - public Star(StarType startType, int startAge, int startMass) { - this.type = startType; - this.ageYears = startAge; - this.massTons = startMass; - } - - public void timePasses() { - ageYears *= 2; - massTons *= 8; - switch (type) { - case RED_GIANT: - type = StarType.WHITE_DWARF; - break; - case SUN: - type = StarType.RED_GIANT; - break; - case SUPERNOVA: - type = StarType.DEAD; - break; - case WHITE_DWARF: - type = StarType.SUPERNOVA; - break; - case DEAD: - ageYears *= 2; - massTons = 0; - break; - default: - break; - } - } - - StarMemento getMemento() { - - StarMementoInternal state = new StarMementoInternal(); - state.setAgeYears(ageYears); - state.setMassTons(massTons); - state.setType(type); - return state; - - } - - void setMemento(StarMemento memento) { - - StarMementoInternal state = (StarMementoInternal) memento; - this.type = state.getType(); - this.ageYears = state.getAgeYears(); - this.massTons = state.getMassTons(); - - } - - @Override - public String toString() { - return String.format("%s age: %d years mass: %d tons", type.toString(), ageYears, massTons); - } -} +package com.iluwatar.memento; + +/** + * + * Star uses "mementos" to store and restore state. + * + */ +public class Star { + + private StarType type; + private int ageYears; + private int massTons; + + public Star(StarType startType, int startAge, int startMass) { + this.type = startType; + this.ageYears = startAge; + this.massTons = startMass; + } + + public void timePasses() { + ageYears *= 2; + massTons *= 8; + switch (type) { + case RED_GIANT: + type = StarType.WHITE_DWARF; + break; + case SUN: + type = StarType.RED_GIANT; + break; + case SUPERNOVA: + type = StarType.DEAD; + break; + case WHITE_DWARF: + type = StarType.SUPERNOVA; + break; + case DEAD: + ageYears *= 2; + massTons = 0; + break; + default: + break; + } + } + + StarMemento getMemento() { + + StarMementoInternal state = new StarMementoInternal(); + state.setAgeYears(ageYears); + state.setMassTons(massTons); + state.setType(type); + return state; + + } + + void setMemento(StarMemento memento) { + + StarMementoInternal state = (StarMementoInternal) memento; + this.type = state.getType(); + this.ageYears = state.getAgeYears(); + this.massTons = state.getMassTons(); + + } + + @Override + public String toString() { + return String.format("%s age: %d years mass: %d tons", type.toString(), ageYears, massTons); + } +} diff --git a/memento/src/main/java/com/iluwatar/StarMemento.java b/memento/src/main/java/com/iluwatar/memento/StarMemento.java similarity index 72% rename from memento/src/main/java/com/iluwatar/StarMemento.java rename to memento/src/main/java/com/iluwatar/memento/StarMemento.java index 9d2806ac2550..b5ac94b17768 100644 --- a/memento/src/main/java/com/iluwatar/StarMemento.java +++ b/memento/src/main/java/com/iluwatar/memento/StarMemento.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -/** - * - * External interface to memento. - * - */ -public interface StarMemento { - -} +package com.iluwatar.memento; + +/** + * + * External interface to memento. + * + */ +public interface StarMemento { + +} diff --git a/memento/src/main/java/com/iluwatar/StarMementoInternal.java b/memento/src/main/java/com/iluwatar/memento/StarMementoInternal.java similarity index 90% rename from memento/src/main/java/com/iluwatar/StarMementoInternal.java rename to memento/src/main/java/com/iluwatar/memento/StarMementoInternal.java index 45c8f7c11160..84c3b2e602a6 100644 --- a/memento/src/main/java/com/iluwatar/StarMementoInternal.java +++ b/memento/src/main/java/com/iluwatar/memento/StarMementoInternal.java @@ -1,32 +1,32 @@ -package com.iluwatar; - -/** - * - * Internal interface to memento. - * - */ -public class StarMementoInternal implements StarMemento { - - private StarType type; - private int ageYears; - private int massTons; - - public StarType getType() { - return type; - } - public void setType(StarType type) { - this.type = type; - } - public int getAgeYears() { - return ageYears; - } - public void setAgeYears(int ageYears) { - this.ageYears = ageYears; - } - public int getMassTons() { - return massTons; - } - public void setMassTons(int massTons) { - this.massTons = massTons; - } -} +package com.iluwatar.memento; + +/** + * + * Internal interface to memento. + * + */ +public class StarMementoInternal implements StarMemento { + + private StarType type; + private int ageYears; + private int massTons; + + public StarType getType() { + return type; + } + public void setType(StarType type) { + this.type = type; + } + public int getAgeYears() { + return ageYears; + } + public void setAgeYears(int ageYears) { + this.ageYears = ageYears; + } + public int getMassTons() { + return massTons; + } + public void setMassTons(int massTons) { + this.massTons = massTons; + } +} diff --git a/memento/src/main/java/com/iluwatar/StarType.java b/memento/src/main/java/com/iluwatar/memento/StarType.java similarity index 87% rename from memento/src/main/java/com/iluwatar/StarType.java rename to memento/src/main/java/com/iluwatar/memento/StarType.java index 54b3521843ee..7b1f7a52d419 100644 --- a/memento/src/main/java/com/iluwatar/StarType.java +++ b/memento/src/main/java/com/iluwatar/memento/StarType.java @@ -1,36 +1,36 @@ -package com.iluwatar; - -public enum StarType { - - SUN, - RED_GIANT, - WHITE_DWARF, - SUPERNOVA, - DEAD; - - @Override - public String toString() { - String s = ""; - switch (this) { - case RED_GIANT: - s = "red giant"; - break; - case SUN: - s = "sun"; - break; - case SUPERNOVA: - s = "supernova"; - break; - case WHITE_DWARF: - s = "white dwarf"; - break; - case DEAD: - s = "dead star"; - break; - default: - break; - } - return s; - } - -} +package com.iluwatar.memento; + +public enum StarType { + + SUN, + RED_GIANT, + WHITE_DWARF, + SUPERNOVA, + DEAD; + + @Override + public String toString() { + String s = ""; + switch (this) { + case RED_GIANT: + s = "red giant"; + break; + case SUN: + s = "sun"; + break; + case SUPERNOVA: + s = "supernova"; + break; + case WHITE_DWARF: + s = "white dwarf"; + break; + case DEAD: + s = "dead star"; + break; + default: + break; + } + return s; + } + +} diff --git a/observer/.gitignore b/observer/.gitignore new file mode 100644 index 000000000000..5e56e040ec09 --- /dev/null +++ b/observer/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/observer/com/iluwatar/App.main.pdf b/observer/com/iluwatar/App.main.pdf new file mode 100644 index 0000000000000000000000000000000000000000..57b29a561e008b8359d4daed2bc918b7a2c23f4c GIT binary patch literal 478950 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 +Weather[0]:WeatherType. +WeatherType[0]:WeatherType. +WeatherType[1]:WeatherType. +App[0]:Orcs. +App[0]:Weather.addObserver +App[0]:Hobbits. +App[0]:Weather.addObserver +App[0]:Weather.timePasses +Weather[0]:Weather.$SWITCH_TABLE$com$iluwatar$WeatherType +Weather[0]:WeatherType.values +Weather[1]:WeatherType.toString +Weather[0]:Weather.notifyObservers +Weather[0]:Orcs.update +Orcs[0]:Orcs.$SWITCH_TABLE$com$iluwatar$WeatherType +Orcs[0]:WeatherType.values +Weather[0]:Hobbits.update +Hobbits[0]:Hobbits.$SWITCH_TABLE$com$iluwatar$WeatherType +Hobbits[0]:WeatherType.values +App[0]:Weather.timePasses +Weather[0]:Weather.$SWITCH_TABLE$com$iluwatar$WeatherType +Weather[1]:WeatherType.toString +Weather[0]:Weather.notifyObservers +Weather[0]:Orcs.update +Orcs[0]:Orcs.$SWITCH_TABLE$com$iluwatar$WeatherType +Weather[0]:Hobbits.update +Hobbits[0]:Hobbits.$SWITCH_TABLE$com$iluwatar$WeatherType +App[0]:Weather.timePasses +Weather[0]:Weather.$SWITCH_TABLE$com$iluwatar$WeatherType +Weather[1]:WeatherType.toString +Weather[0]:Weather.notifyObservers +Weather[0]:Orcs.update +Orcs[0]:Orcs.$SWITCH_TABLE$com$iluwatar$WeatherType +Weather[0]:Hobbits.update +Hobbits[0]:Hobbits.$SWITCH_TABLE$com$iluwatar$WeatherType diff --git a/observer/out/.gitignore b/observer/out/.gitignore new file mode 100644 index 000000000000..5e56e040ec09 --- /dev/null +++ b/observer/out/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/observer/src/dsd.java b/observer/src/dsd.java new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/observer/src/main/java/RER.java b/observer/src/main/java/RER.java new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/observer/src/main/java/RWW.java b/observer/src/main/java/RWW.java new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/observer/src/main/java/com/iluwatar/App.java b/observer/src/main/java/com/iluwatar/observer/App.java similarity index 61% rename from observer/src/main/java/com/iluwatar/App.java rename to observer/src/main/java/com/iluwatar/observer/App.java index a128fd38f1ed..ef6ee94bd7db 100644 --- a/observer/src/main/java/com/iluwatar/App.java +++ b/observer/src/main/java/com/iluwatar/observer/App.java @@ -1,25 +1,30 @@ -package com.iluwatar; - -/** - * - * Observer pattern defines one-to-many relationship - * between objects. The target object sends change - * notifications to its registered observers. - * - */ -public class App -{ - public static void main( String[] args ) - { - - Weather weather = new Weather(); - weather.addObserver(new Orcs()); - weather.addObserver(new Hobbits()); - - weather.timePasses(); - weather.timePasses(); - weather.timePasses(); - weather.timePasses(); - - } -} +package com.iluwatar.observer; + +/** + * + * Observer pattern defines one-to-many relationship + * between objects. The target object sends change + * notifications to its registered observers. + * + */ +public class App +{ + public static void main( String[] args ) + { + + Weather weather = new Weather(); + weather.addObserver(new Orcs()); + weather.addObserver(new Hobbits()); + + try { + weather.timePasses(); + weather.timePasses(); + weather.timePasses(); + weather.timePasses(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } +} diff --git a/observer/src/main/java/com/iluwatar/Hobbits.java b/observer/src/main/java/com/iluwatar/observer/Hobbits.java similarity index 66% rename from observer/src/main/java/com/iluwatar/Hobbits.java rename to observer/src/main/java/com/iluwatar/observer/Hobbits.java index b4b09ab3c15e..c5c758e81698 100644 --- a/observer/src/main/java/com/iluwatar/Hobbits.java +++ b/observer/src/main/java/com/iluwatar/observer/Hobbits.java @@ -1,25 +1,27 @@ -package com.iluwatar; - -public class Hobbits implements WeatherObserver { - - @Override - public void update(WeatherType currentWeather) { - switch (currentWeather) { - case COLD: - System.out.println("The hobbits are shivering in the cold weather."); - break; - case RAINY: - System.out.println("The hobbits look for cover from the rain."); - break; - case SUNNY: - System.out.println("The happy hobbits bade in the warm sun."); - break; - case WINDY: - System.out.println("The hobbits hold their hats tightly in the windy weather."); - break; - default: - break; - } - } - -} +package com.iluwatar.observer; + +public class Hobbits implements WeatherObserver { + + @Override + public void update(WeatherType currentWeather) { + switch (currentWeather) { + case COLD: + System.out + .println("The hobbits are shivering in the cold weather."); + break; + case RAINY: + System.out.println("The hobbits look for cover from the rain."); + break; + case SUNNY: + System.out.println("The happy hobbits bade in the warm sun."); + break; + case WINDY: + System.out + .println("The hobbits hold their hats tightly in the windy weather."); + break; + default: + break; + } + } + +} diff --git a/observer/src/main/java/com/iluwatar/Orcs.java b/observer/src/main/java/com/iluwatar/observer/Orcs.java similarity index 91% rename from observer/src/main/java/com/iluwatar/Orcs.java rename to observer/src/main/java/com/iluwatar/observer/Orcs.java index 05fc0a4c9064..db560cf58514 100644 --- a/observer/src/main/java/com/iluwatar/Orcs.java +++ b/observer/src/main/java/com/iluwatar/observer/Orcs.java @@ -1,25 +1,25 @@ -package com.iluwatar; - -public class Orcs implements WeatherObserver { - - @Override - public void update(WeatherType currentWeather) { - switch (currentWeather) { - case COLD: - System.out.println("The orcs are freezing cold."); - break; - case RAINY: - System.out.println("The orcs are dripping wet."); - break; - case SUNNY: - System.out.println("The sun hurts the orcs' eyes."); - break; - case WINDY: - System.out.println("The orc smell almost vanishes in the wind."); - break; - default: - break; - } - } - -} +package com.iluwatar.observer; + +public class Orcs implements WeatherObserver { + + @Override + public void update(WeatherType currentWeather) { + switch (currentWeather) { + case COLD: + System.out.println("The orcs are freezing cold."); + break; + case RAINY: + System.out.println("The orcs are dripping wet."); + break; + case SUNNY: + System.out.println("The sun hurts the orcs' eyes."); + break; + case WINDY: + System.out.println("The orc smell almost vanishes in the wind."); + break; + default: + break; + } + } + +} diff --git a/observer/src/main/java/com/iluwatar/observer/Test.java b/observer/src/main/java/com/iluwatar/observer/Test.java new file mode 100644 index 000000000000..31894f0307cc --- /dev/null +++ b/observer/src/main/java/com/iluwatar/observer/Test.java @@ -0,0 +1 @@ +package com.iluwatar.observer; diff --git a/observer/src/main/java/com/iluwatar/observer/WEE.java b/observer/src/main/java/com/iluwatar/observer/WEE.java new file mode 100644 index 000000000000..31894f0307cc --- /dev/null +++ b/observer/src/main/java/com/iluwatar/observer/WEE.java @@ -0,0 +1 @@ +package com.iluwatar.observer; diff --git a/observer/src/main/java/com/iluwatar/Weather.java b/observer/src/main/java/com/iluwatar/observer/Weather.java similarity index 90% rename from observer/src/main/java/com/iluwatar/Weather.java rename to observer/src/main/java/com/iluwatar/observer/Weather.java index f3c11ac73fab..3ada84aa8317 100644 --- a/observer/src/main/java/com/iluwatar/Weather.java +++ b/observer/src/main/java/com/iluwatar/observer/Weather.java @@ -1,56 +1,56 @@ -package com.iluwatar; - -import java.util.ArrayList; -import java.util.List; - -/** - * - * Weather can be observed by implementing WeatherObserver - * interface and registering as listener. - * - */ -public class Weather { - - private WeatherType currentWeather; - private List observers; - - public Weather() { - observers = new ArrayList<>(); - currentWeather = WeatherType.SUNNY; - } - - public void addObserver(WeatherObserver obs) { - observers.add(obs); - } - - public void removeObserver(WeatherObserver obs) { - observers.remove(obs); - } - - public void timePasses() { - switch (currentWeather) { - case COLD: - currentWeather = WeatherType.SUNNY; - break; - case RAINY: - currentWeather = WeatherType.WINDY; - break; - case SUNNY: - currentWeather = WeatherType.RAINY; - break; - case WINDY: - currentWeather = WeatherType.COLD; - break; - default: - break; - } - System.out.println("The weather now changes to " + currentWeather); - notifyObservers(); - } - - private void notifyObservers() { - for (WeatherObserver obs: observers) { - obs.update(currentWeather); - } - } -} +package com.iluwatar.observer; + +import java.util.ArrayList; +import java.util.List; + +/** + * + * Weather can be observed by implementing WeatherObserver + * interface and registering as listener. + * + */ +public class Weather { + + private WeatherType currentWeather; + private List observers; + + public Weather() { + observers = new ArrayList(); + currentWeather = WeatherType.SUNNY; + } + + public void addObserver(WeatherObserver obs) { + observers.add(obs); + } + + public void removeObserver(WeatherObserver obs) { + observers.remove(obs); + } + + public void timePasses() { + switch (currentWeather) { + case COLD: + currentWeather = WeatherType.SUNNY; + break; + case RAINY: + currentWeather = WeatherType.WINDY; + break; + case SUNNY: + currentWeather = WeatherType.RAINY; + break; + case WINDY: + currentWeather = WeatherType.COLD; + break; + default: + break; + } + System.out.println("The weather now changes to " + currentWeather); + notifyObservers(); + } + + private void notifyObservers() { + for (WeatherObserver obs: observers) { + obs.update(currentWeather); + } + } +} diff --git a/observer/src/main/java/com/iluwatar/WeatherObserver.java b/observer/src/main/java/com/iluwatar/observer/WeatherObserver.java similarity index 78% rename from observer/src/main/java/com/iluwatar/WeatherObserver.java rename to observer/src/main/java/com/iluwatar/observer/WeatherObserver.java index 6af0202405e6..c630ae38a4e9 100644 --- a/observer/src/main/java/com/iluwatar/WeatherObserver.java +++ b/observer/src/main/java/com/iluwatar/observer/WeatherObserver.java @@ -1,12 +1,12 @@ -package com.iluwatar; - -/** - * - * Observer interface. - * - */ -public interface WeatherObserver { - - void update(WeatherType currentWeather); - -} +package com.iluwatar.observer; + +/** + * + * Observer interface. + * + */ +public interface WeatherObserver { + + void update(WeatherType currentWeather); + +} diff --git a/observer/src/main/java/com/iluwatar/WeatherType.java b/observer/src/main/java/com/iluwatar/observer/WeatherType.java similarity index 78% rename from observer/src/main/java/com/iluwatar/WeatherType.java rename to observer/src/main/java/com/iluwatar/observer/WeatherType.java index 9625fbab8bed..3c295176a54f 100644 --- a/observer/src/main/java/com/iluwatar/WeatherType.java +++ b/observer/src/main/java/com/iluwatar/observer/WeatherType.java @@ -1,14 +1,14 @@ -package com.iluwatar; - -public enum WeatherType { - - SUNNY, - RAINY, - WINDY, - COLD; - - public String toString() { - return this.name().toLowerCase(); - }; - -} +package com.iluwatar.observer; + +public enum WeatherType { + + SUNNY, + RAINY, + WINDY, + COLD; + + public String toString() { + return this.name().toLowerCase(); + }; + +} diff --git a/observer/src/main/java/com/iluwatar/observer/dsfaa.java b/observer/src/main/java/com/iluwatar/observer/dsfaa.java new file mode 100644 index 000000000000..31894f0307cc --- /dev/null +++ b/observer/src/main/java/com/iluwatar/observer/dsfaa.java @@ -0,0 +1 @@ +package com.iluwatar.observer; diff --git a/observer/src/test/log4j.xml b/observer/src/test/log4j.xml new file mode 100644 index 000000000000..748d0c1a5271 --- /dev/null +++ b/observer/src/test/log4j.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/observer/src/test/resources/configure/UATApplicationContext.xml b/observer/src/test/resources/configure/UATApplicationContext.xml new file mode 100644 index 000000000000..818ef52f909e --- /dev/null +++ b/observer/src/test/resources/configure/UATApplicationContext.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/observer/src/test/resources/configure/prop.xml b/observer/src/test/resources/configure/prop.xml new file mode 100644 index 000000000000..c7afbd60d256 --- /dev/null +++ b/observer/src/test/resources/configure/prop.xml @@ -0,0 +1,133 @@ + + + false + + + $JAVA_HOME + server + -server -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -Duser.timezone=GMT+8 -Djava.awt.headless=true + 8005 + + 80 + + + + true + + StartTomcat + nc.bs.tomcat.startup.BootStrapTomcatService + 15 + true + false + start|stop + + + EJB_SERVICE + nc.bs.mw.naming.EJBContainerService + 15 + true + false + start|stop + + nc.bs.mw.tran.IerpTransactionManagerProxy + nc.bs.mw.tran.IerpUserTransaction + nc.bs.mw.tran.IerpTransactionManager + nc.bs.mw.sql.UFSqlObject + nc.bs.mw.ejbsql.IerpXADataSource + + design + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + baptest807 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + bafi + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + bafi + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + iufo6103312 + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + iufo6103312 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + batm + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + batm + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + bap8 + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + bap8 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + foodmart + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + foodmart + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + \ No newline at end of file diff --git a/observer/src/test/resources/configure/test_data_source.xml b/observer/src/test/resources/configure/test_data_source.xml new file mode 100644 index 000000000000..2e45d5ee869c --- /dev/null +++ b/observer/src/test/resources/configure/test_data_source.xml @@ -0,0 +1,19 @@ + + + + design + Z + jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive + sa + sasasa + com.microsoft.sqlserver.jdbc.SQLServerDriver + SQLSERVER2008 + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + \ No newline at end of file diff --git a/observer/src/test/resources/configure/uat.properties b/observer/src/test/resources/configure/uat.properties new file mode 100644 index 000000000000..f0b076c2de77 --- /dev/null +++ b/observer/src/test/resources/configure/uat.properties @@ -0,0 +1,33 @@ +#project information +app_name=App Name +app_version=V6.5 + +#Common Configure +##UAPHOME path, USE '/' for path separator +nc_home= +##verify log path, USE '/' for path separator +log_file=debug.log + +# 0 don't print app log information on test result log +# 1 only print app log information on test result log for fail testcase +# 2 print application log information on test result log for all testcase +uatlog_switch=2 + +#dataFile Configure ,backup database data and restore database data +data_backup_file = c:/temp/datafile.xml + +#default datasource +default_datasource=design + +#BusinessServer configure +serverstart=off +login_username= +login_password= + +#resources settings +nc_configure_dir=resources/configure/ +testdata_config_dir=resources/data/conf/ +testdata_springfile_dir=resources/data/spring/ +testdata_objectfile_dir=resources/data/object/ +testdata_excelfile_dir=resources/data/excel/ +testdata_backup_dir=resources/data/backup/ diff --git a/observer/src/test/resources/configure/uat_spring_conf.xml b/observer/src/test/resources/configure/uat_spring_conf.xml new file mode 100644 index 000000000000..169a91514700 --- /dev/null +++ b/observer/src/test/resources/configure/uat_spring_conf.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/observer/src/test/resources/data/backup/README b/observer/src/test/resources/data/backup/README new file mode 100644 index 000000000000..a5b99861a7dc --- /dev/null +++ b/observer/src/test/resources/data/backup/README @@ -0,0 +1 @@ +ļ \ No newline at end of file diff --git a/observer/src/test/resources/data/config/README b/observer/src/test/resources/data/config/README new file mode 100644 index 000000000000..4849e2aef709 --- /dev/null +++ b/observer/src/test/resources/data/config/README @@ -0,0 +1 @@ +Objectļ \ No newline at end of file diff --git a/observer/src/test/resources/data/excel/README b/observer/src/test/resources/data/excel/README new file mode 100644 index 000000000000..4849e2aef709 --- /dev/null +++ b/observer/src/test/resources/data/excel/README @@ -0,0 +1 @@ +Objectļ \ No newline at end of file diff --git a/observer/src/test/resources/data/object/README b/observer/src/test/resources/data/object/README new file mode 100644 index 000000000000..271c286f3687 --- /dev/null +++ b/observer/src/test/resources/data/object/README @@ -0,0 +1 @@ +̻ļ \ No newline at end of file diff --git a/observer/src/test/resources/data/spring/README b/observer/src/test/resources/data/spring/README new file mode 100644 index 000000000000..961ee7009fd2 --- /dev/null +++ b/observer/src/test/resources/data/spring/README @@ -0,0 +1 @@ +spring ļ \ No newline at end of file diff --git a/observer/src/test/resources/temp/README b/observer/src/test/resources/temp/README new file mode 100644 index 000000000000..ccffba66ffdd --- /dev/null +++ b/observer/src/test/resources/temp/README @@ -0,0 +1 @@ +ʱļ \ No newline at end of file diff --git a/observer/src/test/testng.xml b/observer/src/test/testng.xml new file mode 100644 index 000000000000..1fa0f7461a59 --- /dev/null +++ b/observer/src/test/testng.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/prototype/src/main/java/com/iluwatar/App.java b/prototype/src/main/java/com/iluwatar/prototype/App.java similarity index 94% rename from prototype/src/main/java/com/iluwatar/App.java rename to prototype/src/main/java/com/iluwatar/prototype/App.java index ff3790010239..e704103fa74b 100644 --- a/prototype/src/main/java/com/iluwatar/App.java +++ b/prototype/src/main/java/com/iluwatar/prototype/App.java @@ -1,35 +1,35 @@ -package com.iluwatar; - -/** - * - * In Prototype we have a factory class (HeroFactoryImpl) producing - * objects by cloning existing ones. In this example the factory's - * prototype objects are given as constructor parameters. - * - */ -public class App -{ - public static void main( String[] args ) - { - HeroFactory factory; - Mage mage; - Warlord warlord; - Beast beast; - - factory = new HeroFactoryImpl(new ElfMage(), new ElfWarlord(), new ElfBeast()); - mage = factory.createMage(); - warlord = factory.createWarlord(); - beast = factory.createBeast(); - System.out.println(mage); - System.out.println(warlord); - System.out.println(beast); - - factory = new HeroFactoryImpl(new OrcMage(), new OrcWarlord(), new OrcBeast()); - mage = factory.createMage(); - warlord = factory.createWarlord(); - beast = factory.createBeast(); - System.out.println(mage); - System.out.println(warlord); - System.out.println(beast); - } -} +package com.iluwatar.prototype; + +/** + * + * In Prototype we have a factory class (HeroFactoryImpl) producing + * objects by cloning existing ones. In this example the factory's + * prototype objects are given as constructor parameters. + * + */ +public class App +{ + public static void main( String[] args ) + { + HeroFactory factory; + Mage mage; + Warlord warlord; + Beast beast; + + factory = new HeroFactoryImpl(new ElfMage(), new ElfWarlord(), new ElfBeast()); + mage = factory.createMage(); + warlord = factory.createWarlord(); + beast = factory.createBeast(); + System.out.println(mage); + System.out.println(warlord); + System.out.println(beast); + + factory = new HeroFactoryImpl(new OrcMage(), new OrcWarlord(), new OrcBeast()); + mage = factory.createMage(); + warlord = factory.createWarlord(); + beast = factory.createBeast(); + System.out.println(mage); + System.out.println(warlord); + System.out.println(beast); + } +} diff --git a/prototype/src/main/java/com/iluwatar/Beast.java b/prototype/src/main/java/com/iluwatar/prototype/Beast.java similarity index 80% rename from prototype/src/main/java/com/iluwatar/Beast.java rename to prototype/src/main/java/com/iluwatar/prototype/Beast.java index 2d1e978c0c03..ad01ad718e7c 100644 --- a/prototype/src/main/java/com/iluwatar/Beast.java +++ b/prototype/src/main/java/com/iluwatar/prototype/Beast.java @@ -1,8 +1,8 @@ -package com.iluwatar; - -public abstract class Beast extends Prototype { - - @Override - public abstract Beast clone() throws CloneNotSupportedException; - -} +package com.iluwatar.prototype; + +public abstract class Beast extends Prototype { + + @Override + public abstract Beast clone() throws CloneNotSupportedException; + +} diff --git a/prototype/src/main/java/com/iluwatar/ElfBeast.java b/prototype/src/main/java/com/iluwatar/prototype/ElfBeast.java similarity index 86% rename from prototype/src/main/java/com/iluwatar/ElfBeast.java rename to prototype/src/main/java/com/iluwatar/prototype/ElfBeast.java index 40fac06b8757..b51f24d0558a 100644 --- a/prototype/src/main/java/com/iluwatar/ElfBeast.java +++ b/prototype/src/main/java/com/iluwatar/prototype/ElfBeast.java @@ -1,21 +1,21 @@ -package com.iluwatar; - -public class ElfBeast extends Beast { - - public ElfBeast() { - } - - public ElfBeast(ElfBeast beast) { - } - - @Override - public Beast clone() throws CloneNotSupportedException { - return new ElfBeast(this); - } - - @Override - public String toString() { - return "Elven eagle"; - } - -} +package com.iluwatar.prototype; + +public class ElfBeast extends Beast { + + public ElfBeast() { + } + + public ElfBeast(ElfBeast beast) { + } + + @Override + public Beast clone() throws CloneNotSupportedException { + return new ElfBeast(this); + } + + @Override + public String toString() { + return "Elven eagle"; + } + +} diff --git a/prototype/src/main/java/com/iluwatar/ElfMage.java b/prototype/src/main/java/com/iluwatar/prototype/ElfMage.java similarity index 86% rename from prototype/src/main/java/com/iluwatar/ElfMage.java rename to prototype/src/main/java/com/iluwatar/prototype/ElfMage.java index 52919c91dc7d..26e60499f28e 100644 --- a/prototype/src/main/java/com/iluwatar/ElfMage.java +++ b/prototype/src/main/java/com/iluwatar/prototype/ElfMage.java @@ -1,21 +1,21 @@ -package com.iluwatar; - -public class ElfMage extends Mage { - - public ElfMage() { - } - - public ElfMage(ElfMage mage) { - } - - @Override - public Mage clone() throws CloneNotSupportedException { - return new ElfMage(this); - } - - @Override - public String toString() { - return "Elven mage"; - } - -} +package com.iluwatar.prototype; + +public class ElfMage extends Mage { + + public ElfMage() { + } + + public ElfMage(ElfMage mage) { + } + + @Override + public Mage clone() throws CloneNotSupportedException { + return new ElfMage(this); + } + + @Override + public String toString() { + return "Elven mage"; + } + +} diff --git a/prototype/src/main/java/com/iluwatar/ElfWarlord.java b/prototype/src/main/java/com/iluwatar/prototype/ElfWarlord.java similarity index 87% rename from prototype/src/main/java/com/iluwatar/ElfWarlord.java rename to prototype/src/main/java/com/iluwatar/prototype/ElfWarlord.java index 51c52afdc5ca..6e098660112a 100644 --- a/prototype/src/main/java/com/iluwatar/ElfWarlord.java +++ b/prototype/src/main/java/com/iluwatar/prototype/ElfWarlord.java @@ -1,21 +1,21 @@ -package com.iluwatar; - -public class ElfWarlord extends Warlord { - - public ElfWarlord() { - } - - public ElfWarlord(ElfWarlord warlord) { - } - - @Override - public Warlord clone() throws CloneNotSupportedException { - return new ElfWarlord(this); - } - - @Override - public String toString() { - return "Elven warlord"; - } - -} +package com.iluwatar.prototype; + +public class ElfWarlord extends Warlord { + + public ElfWarlord() { + } + + public ElfWarlord(ElfWarlord warlord) { + } + + @Override + public Warlord clone() throws CloneNotSupportedException { + return new ElfWarlord(this); + } + + @Override + public String toString() { + return "Elven warlord"; + } + +} diff --git a/prototype/src/main/java/com/iluwatar/HeroFactory.java b/prototype/src/main/java/com/iluwatar/prototype/HeroFactory.java similarity index 80% rename from prototype/src/main/java/com/iluwatar/HeroFactory.java rename to prototype/src/main/java/com/iluwatar/prototype/HeroFactory.java index e7145fa88571..d66ab298e2db 100644 --- a/prototype/src/main/java/com/iluwatar/HeroFactory.java +++ b/prototype/src/main/java/com/iluwatar/prototype/HeroFactory.java @@ -1,16 +1,16 @@ -package com.iluwatar; - -/** - * - * Interface for the factory class. - * - */ -public interface HeroFactory { - - Mage createMage(); - - Warlord createWarlord(); - - Beast createBeast(); - -} +package com.iluwatar.prototype; + +/** + * + * Interface for the factory class. + * + */ +public interface HeroFactory { + + Mage createMage(); + + Warlord createWarlord(); + + Beast createBeast(); + +} diff --git a/prototype/src/main/java/com/iluwatar/HeroFactoryImpl.java b/prototype/src/main/java/com/iluwatar/prototype/HeroFactoryImpl.java similarity index 91% rename from prototype/src/main/java/com/iluwatar/HeroFactoryImpl.java rename to prototype/src/main/java/com/iluwatar/prototype/HeroFactoryImpl.java index 7c96fc8a5f37..207b6f9ec56d 100644 --- a/prototype/src/main/java/com/iluwatar/HeroFactoryImpl.java +++ b/prototype/src/main/java/com/iluwatar/prototype/HeroFactoryImpl.java @@ -1,44 +1,44 @@ -package com.iluwatar; - -/** - * - * Concrete factory class. - * - */ -public class HeroFactoryImpl implements HeroFactory { - - private Mage mage; - private Warlord warlord; - private Beast beast; - - public HeroFactoryImpl(Mage mage, Warlord warlord, Beast beast) { - this.mage = mage; - this.warlord = warlord; - this.beast = beast; - } - - public Mage createMage() { - try { - return mage.clone(); - } catch (CloneNotSupportedException e) { - return null; - } - } - - public Warlord createWarlord() { - try { - return warlord.clone(); - } catch (CloneNotSupportedException e) { - return null; - } - } - - public Beast createBeast() { - try { - return beast.clone(); - } catch (CloneNotSupportedException e) { - return null; - } - } - -} +package com.iluwatar.prototype; + +/** + * + * Concrete factory class. + * + */ +public class HeroFactoryImpl implements HeroFactory { + + private Mage mage; + private Warlord warlord; + private Beast beast; + + public HeroFactoryImpl(Mage mage, Warlord warlord, Beast beast) { + this.mage = mage; + this.warlord = warlord; + this.beast = beast; + } + + public Mage createMage() { + try { + return mage.clone(); + } catch (CloneNotSupportedException e) { + return null; + } + } + + public Warlord createWarlord() { + try { + return warlord.clone(); + } catch (CloneNotSupportedException e) { + return null; + } + } + + public Beast createBeast() { + try { + return beast.clone(); + } catch (CloneNotSupportedException e) { + return null; + } + } + +} diff --git a/prototype/src/main/java/com/iluwatar/Mage.java b/prototype/src/main/java/com/iluwatar/prototype/Mage.java similarity index 80% rename from prototype/src/main/java/com/iluwatar/Mage.java rename to prototype/src/main/java/com/iluwatar/prototype/Mage.java index 726150633295..8c735a927ee5 100644 --- a/prototype/src/main/java/com/iluwatar/Mage.java +++ b/prototype/src/main/java/com/iluwatar/prototype/Mage.java @@ -1,8 +1,8 @@ -package com.iluwatar; - -public abstract class Mage extends Prototype { - - @Override - public abstract Mage clone() throws CloneNotSupportedException; - -} +package com.iluwatar.prototype; + +public abstract class Mage extends Prototype { + + @Override + public abstract Mage clone() throws CloneNotSupportedException; + +} diff --git a/prototype/src/main/java/com/iluwatar/OrcBeast.java b/prototype/src/main/java/com/iluwatar/prototype/OrcBeast.java similarity index 86% rename from prototype/src/main/java/com/iluwatar/OrcBeast.java rename to prototype/src/main/java/com/iluwatar/prototype/OrcBeast.java index a5f52232c9f1..7a68c54b1738 100644 --- a/prototype/src/main/java/com/iluwatar/OrcBeast.java +++ b/prototype/src/main/java/com/iluwatar/prototype/OrcBeast.java @@ -1,21 +1,21 @@ -package com.iluwatar; - -public class OrcBeast extends Beast { - - public OrcBeast() { - } - - public OrcBeast(OrcBeast beast) { - } - - @Override - public Beast clone() throws CloneNotSupportedException { - return new OrcBeast(this); - } - - @Override - public String toString() { - return "Orcish wolf"; - } - -} +package com.iluwatar.prototype; + +public class OrcBeast extends Beast { + + public OrcBeast() { + } + + public OrcBeast(OrcBeast beast) { + } + + @Override + public Beast clone() throws CloneNotSupportedException { + return new OrcBeast(this); + } + + @Override + public String toString() { + return "Orcish wolf"; + } + +} diff --git a/prototype/src/main/java/com/iluwatar/OrcMage.java b/prototype/src/main/java/com/iluwatar/prototype/OrcMage.java similarity index 86% rename from prototype/src/main/java/com/iluwatar/OrcMage.java rename to prototype/src/main/java/com/iluwatar/prototype/OrcMage.java index 88e7718ac55b..5ea31a465521 100644 --- a/prototype/src/main/java/com/iluwatar/OrcMage.java +++ b/prototype/src/main/java/com/iluwatar/prototype/OrcMage.java @@ -1,21 +1,21 @@ -package com.iluwatar; - -public class OrcMage extends Mage { - - public OrcMage() { - } - - public OrcMage(OrcMage mage) { - } - - @Override - public Mage clone() throws CloneNotSupportedException { - return new OrcMage(this); - } - - @Override - public String toString() { - return "Orcish mage"; - } - -} +package com.iluwatar.prototype; + +public class OrcMage extends Mage { + + public OrcMage() { + } + + public OrcMage(OrcMage mage) { + } + + @Override + public Mage clone() throws CloneNotSupportedException { + return new OrcMage(this); + } + + @Override + public String toString() { + return "Orcish mage"; + } + +} diff --git a/prototype/src/main/java/com/iluwatar/OrcWarlord.java b/prototype/src/main/java/com/iluwatar/prototype/OrcWarlord.java similarity index 87% rename from prototype/src/main/java/com/iluwatar/OrcWarlord.java rename to prototype/src/main/java/com/iluwatar/prototype/OrcWarlord.java index 62ab25975d66..3b7b5358fa7e 100644 --- a/prototype/src/main/java/com/iluwatar/OrcWarlord.java +++ b/prototype/src/main/java/com/iluwatar/prototype/OrcWarlord.java @@ -1,21 +1,21 @@ -package com.iluwatar; - -public class OrcWarlord extends Warlord { - - public OrcWarlord() { - } - - public OrcWarlord(OrcWarlord warlord) { - } - - @Override - public Warlord clone() throws CloneNotSupportedException { - return new OrcWarlord(this); - } - - @Override - public String toString() { - return "Orcish warlord"; - } - -} +package com.iluwatar.prototype; + +public class OrcWarlord extends Warlord { + + public OrcWarlord() { + } + + public OrcWarlord(OrcWarlord warlord) { + } + + @Override + public Warlord clone() throws CloneNotSupportedException { + return new OrcWarlord(this); + } + + @Override + public String toString() { + return "Orcish warlord"; + } + +} diff --git a/prototype/src/main/java/com/iluwatar/Prototype.java b/prototype/src/main/java/com/iluwatar/prototype/Prototype.java similarity index 81% rename from prototype/src/main/java/com/iluwatar/Prototype.java rename to prototype/src/main/java/com/iluwatar/prototype/Prototype.java index e508aea6e606..48fbabbd52a4 100644 --- a/prototype/src/main/java/com/iluwatar/Prototype.java +++ b/prototype/src/main/java/com/iluwatar/prototype/Prototype.java @@ -1,8 +1,8 @@ -package com.iluwatar; - -public abstract class Prototype implements Cloneable { - - @Override - public abstract Object clone() throws CloneNotSupportedException; - -} +package com.iluwatar.prototype; + +public abstract class Prototype implements Cloneable { + + @Override + public abstract Object clone() throws CloneNotSupportedException; + +} diff --git a/prototype/src/main/java/com/iluwatar/Warlord.java b/prototype/src/main/java/com/iluwatar/prototype/Warlord.java similarity index 80% rename from prototype/src/main/java/com/iluwatar/Warlord.java rename to prototype/src/main/java/com/iluwatar/prototype/Warlord.java index 4ddcdd251135..80f1b7b4b67c 100644 --- a/prototype/src/main/java/com/iluwatar/Warlord.java +++ b/prototype/src/main/java/com/iluwatar/prototype/Warlord.java @@ -1,8 +1,8 @@ -package com.iluwatar; - -public abstract class Warlord extends Prototype { - - @Override - public abstract Warlord clone() throws CloneNotSupportedException; - -} +package com.iluwatar.prototype; + +public abstract class Warlord extends Prototype { + + @Override + public abstract Warlord clone() throws CloneNotSupportedException; + +} diff --git a/proxy/src/main/java/com/iluwatar/App.java b/proxy/src/main/java/com/iluwatar/App.java deleted file mode 100644 index ceca214b23df..000000000000 --- a/proxy/src/main/java/com/iluwatar/App.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.iluwatar; - -/** - * - * Proxy (WizardTowerProxy) controls access to the - * actual object (WizardTower). - * - */ -public class App -{ - public static void main( String[] args ) - { - - WizardTowerProxy tower = new WizardTowerProxy(); - tower.enter(new Wizard("Red wizard")); - tower.enter(new Wizard("White wizard")); - tower.enter(new Wizard("Black wizard")); - tower.enter(new Wizard("Green wizard")); - tower.enter(new Wizard("Brown wizard")); - - } -} diff --git a/proxy/src/main/java/com/iluwatar/proxy/App.java b/proxy/src/main/java/com/iluwatar/proxy/App.java new file mode 100644 index 000000000000..09ddbe3838e8 --- /dev/null +++ b/proxy/src/main/java/com/iluwatar/proxy/App.java @@ -0,0 +1,24 @@ +package com.iluwatar.proxy; + + + +/** + * + * Proxy (WizardTowerProxy) controls access to the + * actual object (WizardTower). + * + */ +public class App +{ + public static void main( String[] args ) + { + + WizardTowerProxy tower = new WizardTowerProxy(); + tower.enter(new Wizard("Red wizard")); + tower.enter(new Wizard("White wizard")); + tower.enter(new Wizard("Black wizard")); + tower.enter(new Wizard("Green wizard")); + tower.enter(new Wizard("Brown wizard")); + + } +} diff --git a/proxy/src/main/java/com/iluwatar/Wizard.java b/proxy/src/main/java/com/iluwatar/proxy/Wizard.java similarity index 81% rename from proxy/src/main/java/com/iluwatar/Wizard.java rename to proxy/src/main/java/com/iluwatar/proxy/Wizard.java index 41c838fdcb73..1aa291d57f2d 100644 --- a/proxy/src/main/java/com/iluwatar/Wizard.java +++ b/proxy/src/main/java/com/iluwatar/proxy/Wizard.java @@ -1,16 +1,16 @@ -package com.iluwatar; - -public class Wizard { - - private String name; - - public Wizard(String name) { - this.name = name; - } - - @Override - public String toString() { - return name; - } - -} +package com.iluwatar.proxy; + +public class Wizard { + + private String name; + + public Wizard(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } + +} diff --git a/proxy/src/main/java/com/iluwatar/WizardTower.java b/proxy/src/main/java/com/iluwatar/proxy/WizardTower.java similarity index 79% rename from proxy/src/main/java/com/iluwatar/WizardTower.java rename to proxy/src/main/java/com/iluwatar/proxy/WizardTower.java index 1b7320a3ede0..31b2a4103106 100644 --- a/proxy/src/main/java/com/iluwatar/WizardTower.java +++ b/proxy/src/main/java/com/iluwatar/proxy/WizardTower.java @@ -1,14 +1,16 @@ -package com.iluwatar; - -/** - * - * The object to be proxyed. - * - */ -public class WizardTower { - - public void enter(Wizard wizard) { - System.out.println(wizard + " enters the tower."); - } - -} +package com.iluwatar.proxy; + + + +/** + * + * The object to be proxyed. + * + */ +public class WizardTower { + + public void enter(Wizard wizard) { + System.out.println(wizard + " enters the tower."); + } + +} diff --git a/proxy/src/main/java/com/iluwatar/WizardTowerProxy.java b/proxy/src/main/java/com/iluwatar/proxy/WizardTowerProxy.java similarity index 88% rename from proxy/src/main/java/com/iluwatar/WizardTowerProxy.java rename to proxy/src/main/java/com/iluwatar/proxy/WizardTowerProxy.java index 1be1cacea582..661a118f8321 100644 --- a/proxy/src/main/java/com/iluwatar/WizardTowerProxy.java +++ b/proxy/src/main/java/com/iluwatar/proxy/WizardTowerProxy.java @@ -1,23 +1,25 @@ -package com.iluwatar; - -/** - * - * The proxy controlling access to WizardTower. - * - */ -public class WizardTowerProxy extends WizardTower { - - private static final int NUM_WIZARDS_ALLOWED = 3; - - private int numWizards; - - @Override - public void enter(Wizard wizard) { - if (numWizards < NUM_WIZARDS_ALLOWED) { - super.enter(wizard); - numWizards++; - } else { - System.out.println(wizard + " is not allowed to enter!"); - } - } -} +package com.iluwatar.proxy; + + + +/** + * + * The proxy controlling access to WizardTower. + * + */ +public class WizardTowerProxy extends WizardTower { + + private static final int NUM_WIZARDS_ALLOWED = 3; + + private int numWizards; + + @Override + public void enter(Wizard wizard) { + if (numWizards < NUM_WIZARDS_ALLOWED) { + super.enter(wizard); + numWizards++; + } else { + System.out.println(wizard + " is not allowed to enter!"); + } + } +} diff --git a/singleton/.gitignore b/singleton/.gitignore new file mode 100644 index 000000000000..5e56e040ec09 --- /dev/null +++ b/singleton/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/singleton/out/.gitignore b/singleton/out/.gitignore new file mode 100644 index 000000000000..5e56e040ec09 --- /dev/null +++ b/singleton/out/.gitignore @@ -0,0 +1 @@ +/bin diff --git a/singleton/src/main/java/com/iluwatar/App.java b/singleton/src/main/java/com/iluwatar/singleton/App.java similarity index 91% rename from singleton/src/main/java/com/iluwatar/App.java rename to singleton/src/main/java/com/iluwatar/singleton/App.java index 01e26c4af1de..c0dbb0d23bf7 100644 --- a/singleton/src/main/java/com/iluwatar/App.java +++ b/singleton/src/main/java/com/iluwatar/singleton/App.java @@ -1,20 +1,20 @@ -package com.iluwatar; - -/** - * - * Singleton pattern ensures that the class (IvoryTower) can have only - * one existing instance and provides global access to that instance. - * - */ -public class App -{ - public static void main( String[] args ) - { - - IvoryTower ivoryTower1 = IvoryTower.getInstance(); - IvoryTower ivoryTower2 = IvoryTower.getInstance(); - System.out.println("ivoryTower1=" + ivoryTower1); - System.out.println("ivoryTower2=" + ivoryTower2); - - } -} +package com.iluwatar.singleton; + +/** + * + * Singleton pattern ensures that the class (IvoryTower) can have only + * one existing instance and provides global access to that instance. + * + */ +public class App +{ + public static void main( String[] args ) + { + + IvoryTower ivoryTower1 = IvoryTower.getInstance(); + IvoryTower ivoryTower2 = IvoryTower.getInstance(); + System.out.println("ivoryTower1=" + ivoryTower1); + System.out.println("ivoryTower2=" + ivoryTower2); + + } +} diff --git a/singleton/src/main/java/com/iluwatar/IvoryTower.java b/singleton/src/main/java/com/iluwatar/singleton/IvoryTower.java similarity index 53% rename from singleton/src/main/java/com/iluwatar/IvoryTower.java rename to singleton/src/main/java/com/iluwatar/singleton/IvoryTower.java index 113962eb84c7..699281af2f61 100644 --- a/singleton/src/main/java/com/iluwatar/IvoryTower.java +++ b/singleton/src/main/java/com/iluwatar/singleton/IvoryTower.java @@ -1,17 +1,20 @@ -package com.iluwatar; - -/** - * - * Singleton class. - * - */ -public class IvoryTower { - - private static IvoryTower instance = new IvoryTower(); - - private IvoryTower() {} - - public static IvoryTower getInstance() { - return instance; - } -} +package com.iluwatar.singleton; + +/** + * + * Singleton class. + * + */ +public class IvoryTower { + + private static IvoryTower instance = null; + + private IvoryTower() {} + + public static IvoryTower getInstance() { + if(instance == null){ + instance = new IvoryTower(); + } + return instance; + } +} diff --git a/singleton/src/test/log4j.xml b/singleton/src/test/log4j.xml new file mode 100644 index 000000000000..748d0c1a5271 --- /dev/null +++ b/singleton/src/test/log4j.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/singleton/src/test/resources/configure/UATApplicationContext.xml b/singleton/src/test/resources/configure/UATApplicationContext.xml new file mode 100644 index 000000000000..818ef52f909e --- /dev/null +++ b/singleton/src/test/resources/configure/UATApplicationContext.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/singleton/src/test/resources/configure/prop.xml b/singleton/src/test/resources/configure/prop.xml new file mode 100644 index 000000000000..c7afbd60d256 --- /dev/null +++ b/singleton/src/test/resources/configure/prop.xml @@ -0,0 +1,133 @@ + + + false + + + $JAVA_HOME + server + -server -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -Duser.timezone=GMT+8 -Djava.awt.headless=true + 8005 + + 80 + + + + true + + StartTomcat + nc.bs.tomcat.startup.BootStrapTomcatService + 15 + true + false + start|stop + + + EJB_SERVICE + nc.bs.mw.naming.EJBContainerService + 15 + true + false + start|stop + + nc.bs.mw.tran.IerpTransactionManagerProxy + nc.bs.mw.tran.IerpUserTransaction + nc.bs.mw.tran.IerpTransactionManager + nc.bs.mw.sql.UFSqlObject + nc.bs.mw.ejbsql.IerpXADataSource + + design + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + baptest807 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + bafi + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + bafi + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + iufo6103312 + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + iufo6103312 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + batm + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + batm + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + bap8 + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + bap8 + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + + foodmart + Z + jdbc:oracle:thin:@20.10.130.235:1521:orcl + foodmart + jlehfdffcfmohiag + oracle.jdbc.OracleDriver + ORACLE11G + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + \ No newline at end of file diff --git a/singleton/src/test/resources/configure/test_data_source.xml b/singleton/src/test/resources/configure/test_data_source.xml new file mode 100644 index 000000000000..2e45d5ee869c --- /dev/null +++ b/singleton/src/test/resources/configure/test_data_source.xml @@ -0,0 +1,19 @@ + + + + design + Z + jdbc:sqlserver://uapxt02:1433;database=newwf_1010;sendStringParametersAsUnicode=false;responseBuffering=adaptive + sa + sasasa + com.microsoft.sqlserver.jdbc.SQLServerDriver + SQLSERVER2008 + 50 + 1 + nc.bs.mw.ejb.xares.IerpDataSource + nc.bs.mw.ejb.xares.IerpXADataSource + 0 + 0 + 0 + + \ No newline at end of file diff --git a/singleton/src/test/resources/configure/uat.properties b/singleton/src/test/resources/configure/uat.properties new file mode 100644 index 000000000000..f0b076c2de77 --- /dev/null +++ b/singleton/src/test/resources/configure/uat.properties @@ -0,0 +1,33 @@ +#project information +app_name=App Name +app_version=V6.5 + +#Common Configure +##UAPHOME path, USE '/' for path separator +nc_home= +##verify log path, USE '/' for path separator +log_file=debug.log + +# 0 don't print app log information on test result log +# 1 only print app log information on test result log for fail testcase +# 2 print application log information on test result log for all testcase +uatlog_switch=2 + +#dataFile Configure ,backup database data and restore database data +data_backup_file = c:/temp/datafile.xml + +#default datasource +default_datasource=design + +#BusinessServer configure +serverstart=off +login_username= +login_password= + +#resources settings +nc_configure_dir=resources/configure/ +testdata_config_dir=resources/data/conf/ +testdata_springfile_dir=resources/data/spring/ +testdata_objectfile_dir=resources/data/object/ +testdata_excelfile_dir=resources/data/excel/ +testdata_backup_dir=resources/data/backup/ diff --git a/singleton/src/test/resources/configure/uat_spring_conf.xml b/singleton/src/test/resources/configure/uat_spring_conf.xml new file mode 100644 index 000000000000..169a91514700 --- /dev/null +++ b/singleton/src/test/resources/configure/uat_spring_conf.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/singleton/src/test/resources/data/backup/README b/singleton/src/test/resources/data/backup/README new file mode 100644 index 000000000000..a5b99861a7dc --- /dev/null +++ b/singleton/src/test/resources/data/backup/README @@ -0,0 +1 @@ +ļ \ No newline at end of file diff --git a/singleton/src/test/resources/data/config/README b/singleton/src/test/resources/data/config/README new file mode 100644 index 000000000000..4849e2aef709 --- /dev/null +++ b/singleton/src/test/resources/data/config/README @@ -0,0 +1 @@ +Objectļ \ No newline at end of file diff --git a/singleton/src/test/resources/data/excel/README b/singleton/src/test/resources/data/excel/README new file mode 100644 index 000000000000..4849e2aef709 --- /dev/null +++ b/singleton/src/test/resources/data/excel/README @@ -0,0 +1 @@ +Objectļ \ No newline at end of file diff --git a/singleton/src/test/resources/data/object/README b/singleton/src/test/resources/data/object/README new file mode 100644 index 000000000000..271c286f3687 --- /dev/null +++ b/singleton/src/test/resources/data/object/README @@ -0,0 +1 @@ +̻ļ \ No newline at end of file diff --git a/singleton/src/test/resources/data/spring/README b/singleton/src/test/resources/data/spring/README new file mode 100644 index 000000000000..961ee7009fd2 --- /dev/null +++ b/singleton/src/test/resources/data/spring/README @@ -0,0 +1 @@ +spring ļ \ No newline at end of file diff --git a/singleton/src/test/resources/temp/README b/singleton/src/test/resources/temp/README new file mode 100644 index 000000000000..ccffba66ffdd --- /dev/null +++ b/singleton/src/test/resources/temp/README @@ -0,0 +1 @@ +ʱļ \ No newline at end of file diff --git a/singleton/src/test/testng.xml b/singleton/src/test/testng.xml new file mode 100644 index 000000000000..1fa0f7461a59 --- /dev/null +++ b/singleton/src/test/testng.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/state/src/main/java/com/iluwatar/AngryState.java b/state/src/main/java/com/iluwatar/state/AngryState.java similarity index 89% rename from state/src/main/java/com/iluwatar/AngryState.java rename to state/src/main/java/com/iluwatar/state/AngryState.java index 0a3de44e8973..6b4d2bdc47ae 100644 --- a/state/src/main/java/com/iluwatar/AngryState.java +++ b/state/src/main/java/com/iluwatar/state/AngryState.java @@ -1,21 +1,21 @@ -package com.iluwatar; - -public class AngryState implements State { - - private Mammoth mammoth; - - public AngryState(Mammoth mammoth) { - this.mammoth = mammoth; - } - - @Override - public void observe() { - System.out.println(String.format("%s is furious!", mammoth)); - } - - @Override - public void onEnterState() { - System.out.println(String.format("%s gets angry!", mammoth)); - } - -} +package com.iluwatar.state; + +public class AngryState implements State { + + private Mammoth mammoth; + + public AngryState(Mammoth mammoth) { + this.mammoth = mammoth; + } + + @Override + public void observe() { + System.out.println(String.format("%s is furious!", mammoth)); + } + + @Override + public void onEnterState() { + System.out.println(String.format("%s gets angry!", mammoth)); + } + +} diff --git a/state/src/main/java/com/iluwatar/App.java b/state/src/main/java/com/iluwatar/state/App.java similarity index 90% rename from state/src/main/java/com/iluwatar/App.java rename to state/src/main/java/com/iluwatar/state/App.java index 92a87619dd0a..249b0d135cce 100644 --- a/state/src/main/java/com/iluwatar/App.java +++ b/state/src/main/java/com/iluwatar/state/App.java @@ -1,24 +1,24 @@ -package com.iluwatar; - -/** - * - * In State pattern the object (Mammoth) has internal - * state object (State) that defines the current - * behavior. The state object can be changed - * to alter the behavior. - * - */ -public class App -{ - public static void main( String[] args ) - { - - Mammoth mammoth = new Mammoth(); - mammoth.observe(); - mammoth.timePasses(); - mammoth.observe(); - mammoth.timePasses(); - mammoth.observe(); - - } -} +package com.iluwatar.state; + +/** + * + * In State pattern the object (Mammoth) has internal + * state object (State) that defines the current + * behavior. The state object can be changed + * to alter the behavior. + * + */ +public class App +{ + public static void main( String[] args ) + { + + Mammoth mammoth = new Mammoth(); + mammoth.observe(); + mammoth.timePasses(); + mammoth.observe(); + mammoth.timePasses(); + mammoth.observe(); + + } +} diff --git a/state/src/main/java/com/iluwatar/Mammoth.java b/state/src/main/java/com/iluwatar/state/Mammoth.java similarity index 90% rename from state/src/main/java/com/iluwatar/Mammoth.java rename to state/src/main/java/com/iluwatar/state/Mammoth.java index 78fb19682168..4327bbaf9deb 100644 --- a/state/src/main/java/com/iluwatar/Mammoth.java +++ b/state/src/main/java/com/iluwatar/state/Mammoth.java @@ -1,37 +1,37 @@ -package com.iluwatar; - -/** - * - * Mammoth has internal state that defines its behavior. - * - */ -public class Mammoth { - - private State state; - - public Mammoth() { - state = new PeacefulState(this); - } - - public void timePasses() { - if (state.getClass().equals(PeacefulState.class)) { - changeStateTo(new AngryState(this)); - } else { - changeStateTo(new PeacefulState(this)); - } - } - - private void changeStateTo(State newState) { - this.state = newState; - this.state.onEnterState(); - } - - @Override - public String toString() { - return "The mammoth"; - } - - public void observe() { - this.state.observe(); - } -} +package com.iluwatar.state; + +/** + * + * Mammoth has internal state that defines its behavior. + * + */ +public class Mammoth { + + private State state; + + public Mammoth() { + state = new PeacefulState(this); + } + + public void timePasses() { + if (state.getClass().equals(PeacefulState.class)) { + changeStateTo(new AngryState(this)); + } else { + changeStateTo(new PeacefulState(this)); + } + } + + private void changeStateTo(State newState) { + this.state = newState; + this.state.onEnterState(); + } + + @Override + public String toString() { + return "The mammoth"; + } + + public void observe() { + this.state.observe(); + } +} diff --git a/state/src/main/java/com/iluwatar/PeacefulState.java b/state/src/main/java/com/iluwatar/state/PeacefulState.java similarity index 89% rename from state/src/main/java/com/iluwatar/PeacefulState.java rename to state/src/main/java/com/iluwatar/state/PeacefulState.java index 6d6179a8b1be..293b584e3da3 100644 --- a/state/src/main/java/com/iluwatar/PeacefulState.java +++ b/state/src/main/java/com/iluwatar/state/PeacefulState.java @@ -1,21 +1,21 @@ -package com.iluwatar; - -public class PeacefulState implements State { - - private Mammoth mammoth; - - public PeacefulState(Mammoth mammoth) { - this.mammoth = mammoth; - } - - @Override - public void observe() { - System.out.println(String.format("%s is calm and peaceful.", mammoth)); - } - - @Override - public void onEnterState() { - System.out.println(String.format("%s calms down.", mammoth)); - } - -} +package com.iluwatar.state; + +public class PeacefulState implements State { + + private Mammoth mammoth; + + public PeacefulState(Mammoth mammoth) { + this.mammoth = mammoth; + } + + @Override + public void observe() { + System.out.println(String.format("%s is calm and peaceful.", mammoth)); + } + + @Override + public void onEnterState() { + System.out.println(String.format("%s calms down.", mammoth)); + } + +} diff --git a/state/src/main/java/com/iluwatar/State.java b/state/src/main/java/com/iluwatar/state/State.java similarity index 74% rename from state/src/main/java/com/iluwatar/State.java rename to state/src/main/java/com/iluwatar/state/State.java index 3570a63f7e04..0163236e87ce 100644 --- a/state/src/main/java/com/iluwatar/State.java +++ b/state/src/main/java/com/iluwatar/state/State.java @@ -1,14 +1,14 @@ -package com.iluwatar; - -/** - * - * State interface. - * - */ -public interface State { - - void onEnterState(); - - void observe(); - -} +package com.iluwatar.state; + +/** + * + * State interface. + * + */ +public interface State { + + void onEnterState(); + + void observe(); + +} diff --git a/strategy/src/main/java/com/iluwatar/App.java b/strategy/src/main/java/com/iluwatar/strategy/App.java similarity index 93% rename from strategy/src/main/java/com/iluwatar/App.java rename to strategy/src/main/java/com/iluwatar/strategy/App.java index 26e047dc8002..3a663c6632a4 100644 --- a/strategy/src/main/java/com/iluwatar/App.java +++ b/strategy/src/main/java/com/iluwatar/strategy/App.java @@ -1,23 +1,23 @@ -package com.iluwatar; - -/** - * - * Strategy (DragonSlayingStrategy) encapsulates the algorithm to use. - * The object (DragonSlayer) can alter its behavior by changing its strategy. - * - */ -public class App -{ - public static void main( String[] args ) - { - System.out.println("Green dragon spotted ahead!"); - DragonSlayer dragonSlayer = new DragonSlayer(new MeleeStrategy()); - dragonSlayer.goToBattle(); - System.out.println("Red dragon emerges."); - dragonSlayer.changeStrategy(new ProjectileStrategy()); - dragonSlayer.goToBattle(); - System.out.println("Black dragon lands before you."); - dragonSlayer.changeStrategy(new SpellStrategy()); - dragonSlayer.goToBattle(); - } -} +package com.iluwatar.strategy; + +/** + * + * Strategy (DragonSlayingStrategy) encapsulates the algorithm to use. + * The object (DragonSlayer) can alter its behavior by changing its strategy. + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println("Green dragon spotted ahead!"); + DragonSlayer dragonSlayer = new DragonSlayer(new MeleeStrategy()); + dragonSlayer.goToBattle(); + System.out.println("Red dragon emerges."); + dragonSlayer.changeStrategy(new ProjectileStrategy()); + dragonSlayer.goToBattle(); + System.out.println("Black dragon lands before you."); + dragonSlayer.changeStrategy(new SpellStrategy()); + dragonSlayer.goToBattle(); + } +} diff --git a/strategy/src/main/java/com/iluwatar/DragonSlayer.java b/strategy/src/main/java/com/iluwatar/strategy/DragonSlayer.java similarity index 89% rename from strategy/src/main/java/com/iluwatar/DragonSlayer.java rename to strategy/src/main/java/com/iluwatar/strategy/DragonSlayer.java index 0111c7e66dec..466b6e628651 100644 --- a/strategy/src/main/java/com/iluwatar/DragonSlayer.java +++ b/strategy/src/main/java/com/iluwatar/strategy/DragonSlayer.java @@ -1,23 +1,23 @@ -package com.iluwatar; - -/** - * - * DragonSlayer uses different strategies to slay the dragon. - * - */ -public class DragonSlayer { - - private DragonSlayingStrategy strategy; - - public DragonSlayer(DragonSlayingStrategy strategy) { - this.strategy = strategy; - } - - public void changeStrategy(DragonSlayingStrategy strategy) { - this.strategy = strategy; - } - - public void goToBattle() { - strategy.execute(); - } -} +package com.iluwatar.strategy; + +/** + * + * DragonSlayer uses different strategies to slay the dragon. + * + */ +public class DragonSlayer { + + private DragonSlayingStrategy strategy; + + public DragonSlayer(DragonSlayingStrategy strategy) { + this.strategy = strategy; + } + + public void changeStrategy(DragonSlayingStrategy strategy) { + this.strategy = strategy; + } + + public void goToBattle() { + strategy.execute(); + } +} diff --git a/strategy/src/main/java/com/iluwatar/DragonSlayingStrategy.java b/strategy/src/main/java/com/iluwatar/strategy/DragonSlayingStrategy.java similarity index 75% rename from strategy/src/main/java/com/iluwatar/DragonSlayingStrategy.java rename to strategy/src/main/java/com/iluwatar/strategy/DragonSlayingStrategy.java index 100ad29ed20f..b5c2a08681b8 100644 --- a/strategy/src/main/java/com/iluwatar/DragonSlayingStrategy.java +++ b/strategy/src/main/java/com/iluwatar/strategy/DragonSlayingStrategy.java @@ -1,12 +1,12 @@ -package com.iluwatar; - -/** - * - * Strategy interface. - * - */ -public interface DragonSlayingStrategy { - - void execute(); - -} +package com.iluwatar.strategy; + +/** + * + * Strategy interface. + * + */ +public interface DragonSlayingStrategy { + + void execute(); + +} diff --git a/strategy/src/main/java/com/iluwatar/MeleeStrategy.java b/strategy/src/main/java/com/iluwatar/strategy/MeleeStrategy.java similarity index 84% rename from strategy/src/main/java/com/iluwatar/MeleeStrategy.java rename to strategy/src/main/java/com/iluwatar/strategy/MeleeStrategy.java index 49c06e826a67..0ae08fc62db6 100644 --- a/strategy/src/main/java/com/iluwatar/MeleeStrategy.java +++ b/strategy/src/main/java/com/iluwatar/strategy/MeleeStrategy.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class MeleeStrategy implements DragonSlayingStrategy { - - @Override - public void execute() { - System.out.println("With your Excalibur you severe the dragon's head!"); - } - -} +package com.iluwatar.strategy; + +public class MeleeStrategy implements DragonSlayingStrategy { + + @Override + public void execute() { + System.out.println("With your Excalibur you severe the dragon's head!"); + } + +} diff --git a/strategy/src/main/java/com/iluwatar/ProjectileStrategy.java b/strategy/src/main/java/com/iluwatar/strategy/ProjectileStrategy.java similarity index 87% rename from strategy/src/main/java/com/iluwatar/ProjectileStrategy.java rename to strategy/src/main/java/com/iluwatar/strategy/ProjectileStrategy.java index 37c4a14cc73b..66a6bc7feddf 100644 --- a/strategy/src/main/java/com/iluwatar/ProjectileStrategy.java +++ b/strategy/src/main/java/com/iluwatar/strategy/ProjectileStrategy.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class ProjectileStrategy implements DragonSlayingStrategy { - - @Override - public void execute() { - System.out.println("You shoot the dragon with the magical crossbow and it falls dead on the ground!"); - } - -} +package com.iluwatar.strategy; + +public class ProjectileStrategy implements DragonSlayingStrategy { + + @Override + public void execute() { + System.out.println("You shoot the dragon with the magical crossbow and it falls dead on the ground!"); + } + +} diff --git a/strategy/src/main/java/com/iluwatar/SpellStrategy.java b/strategy/src/main/java/com/iluwatar/strategy/SpellStrategy.java similarity index 86% rename from strategy/src/main/java/com/iluwatar/SpellStrategy.java rename to strategy/src/main/java/com/iluwatar/strategy/SpellStrategy.java index 3dab043296a1..21497e66e928 100644 --- a/strategy/src/main/java/com/iluwatar/SpellStrategy.java +++ b/strategy/src/main/java/com/iluwatar/strategy/SpellStrategy.java @@ -1,10 +1,10 @@ -package com.iluwatar; - -public class SpellStrategy implements DragonSlayingStrategy { - - @Override - public void execute() { - System.out.println("You cast the spell of disintegration and the dragon vaporizes in a pile of dust!"); - } - -} +package com.iluwatar.strategy; + +public class SpellStrategy implements DragonSlayingStrategy { + + @Override + public void execute() { + System.out.println("You cast the spell of disintegration and the dragon vaporizes in a pile of dust!"); + } + +} diff --git a/template-method/src/main/java/com/iluwatar/App.java b/template-method/src/main/java/com/iluwatar/template/method/App.java similarity index 90% rename from template-method/src/main/java/com/iluwatar/App.java rename to template-method/src/main/java/com/iluwatar/template/method/App.java index 0f6ccd6443e4..87d087d49b77 100644 --- a/template-method/src/main/java/com/iluwatar/App.java +++ b/template-method/src/main/java/com/iluwatar/template/method/App.java @@ -1,19 +1,19 @@ -package com.iluwatar; - -/** - * - * Template Method (StealingMethod) defines skeleton for the - * algorithm and subclasses (HitAndRunMethod, SubtleMethod) - * fill in the blanks. - * - */ -public class App -{ - public static void main( String[] args ) - { - HalflingThief thief = new HalflingThief(new HitAndRunMethod()); - thief.steal(); - thief.changeMethod(new SubtleMethod()); - thief.steal(); - } -} +package com.iluwatar.template.method; + +/** + * + * Template Method (StealingMethod) defines skeleton for the + * algorithm and subclasses (HitAndRunMethod, SubtleMethod) + * fill in the blanks. + * + */ +public class App +{ + public static void main( String[] args ) + { + HalflingThief thief = new HalflingThief(new HitAndRunMethod()); + thief.steal(); + thief.changeMethod(new SubtleMethod()); + thief.steal(); + } +} diff --git a/template-method/src/main/java/com/iluwatar/HalflingThief.java b/template-method/src/main/java/com/iluwatar/template/method/HalflingThief.java similarity index 87% rename from template-method/src/main/java/com/iluwatar/HalflingThief.java rename to template-method/src/main/java/com/iluwatar/template/method/HalflingThief.java index 844fd00f895a..9fce6a45a6e5 100644 --- a/template-method/src/main/java/com/iluwatar/HalflingThief.java +++ b/template-method/src/main/java/com/iluwatar/template/method/HalflingThief.java @@ -1,23 +1,23 @@ -package com.iluwatar; - -/** - * - * Halfling thief uses StealingMethod to steal. - * - */ -public class HalflingThief { - - private StealingMethod method; - - public HalflingThief(StealingMethod method) { - this.method = method; - } - - public void steal() { - method.steal(); - } - - public void changeMethod(StealingMethod method) { - this.method = method; - } -} +package com.iluwatar.template.method; + +/** + * + * Halfling thief uses StealingMethod to steal. + * + */ +public class HalflingThief { + + private StealingMethod method; + + public HalflingThief(StealingMethod method) { + this.method = method; + } + + public void steal() { + method.steal(); + } + + public void changeMethod(StealingMethod method) { + this.method = method; + } +} diff --git a/template-method/src/main/java/com/iluwatar/HitAndRunMethod.java b/template-method/src/main/java/com/iluwatar/template/method/HitAndRunMethod.java similarity index 90% rename from template-method/src/main/java/com/iluwatar/HitAndRunMethod.java rename to template-method/src/main/java/com/iluwatar/template/method/HitAndRunMethod.java index 99c0d61d12c3..313ead3a5f8a 100644 --- a/template-method/src/main/java/com/iluwatar/HitAndRunMethod.java +++ b/template-method/src/main/java/com/iluwatar/template/method/HitAndRunMethod.java @@ -1,20 +1,20 @@ -package com.iluwatar; - -public class HitAndRunMethod extends StealingMethod { - - @Override - protected String pickTarget() { - return "old goblin woman"; - } - - @Override - protected void confuseTarget(String target) { - System.out.println("Approach the " + target + " from behind."); - } - - @Override - protected void stealTheItem(String target) { - System.out.println("Grab the handbag and run away fast!"); - } - -} +package com.iluwatar.template.method; + +public class HitAndRunMethod extends StealingMethod { + + @Override + protected String pickTarget() { + return "old goblin woman"; + } + + @Override + protected void confuseTarget(String target) { + System.out.println("Approach the " + target + " from behind."); + } + + @Override + protected void stealTheItem(String target) { + System.out.println("Grab the handbag and run away fast!"); + } + +} diff --git a/template-method/src/main/java/com/iluwatar/StealingMethod.java b/template-method/src/main/java/com/iluwatar/template/method/StealingMethod.java similarity index 90% rename from template-method/src/main/java/com/iluwatar/StealingMethod.java rename to template-method/src/main/java/com/iluwatar/template/method/StealingMethod.java index a57d8296f58f..3a75786ccf56 100644 --- a/template-method/src/main/java/com/iluwatar/StealingMethod.java +++ b/template-method/src/main/java/com/iluwatar/template/method/StealingMethod.java @@ -1,22 +1,22 @@ -package com.iluwatar; - -/** - * - * Template Method base class. - * - */ -public abstract class StealingMethod { - - protected abstract String pickTarget(); - - protected abstract void confuseTarget(String target); - - protected abstract void stealTheItem(String target); - - public void steal() { - String target = pickTarget(); - System.out.println("The target has been chosen as " + target + "."); - confuseTarget(target); - stealTheItem(target); - } -} +package com.iluwatar.template.method; + +/** + * + * Template Method base class. + * + */ +public abstract class StealingMethod { + + protected abstract String pickTarget(); + + protected abstract void confuseTarget(String target); + + protected abstract void stealTheItem(String target); + + public void steal() { + String target = pickTarget(); + System.out.println("The target has been chosen as " + target + "."); + confuseTarget(target); + stealTheItem(target); + } +} diff --git a/template-method/src/main/java/com/iluwatar/SubtleMethod.java b/template-method/src/main/java/com/iluwatar/template/method/SubtleMethod.java similarity index 90% rename from template-method/src/main/java/com/iluwatar/SubtleMethod.java rename to template-method/src/main/java/com/iluwatar/template/method/SubtleMethod.java index 8967a92d6426..2c851c43673f 100644 --- a/template-method/src/main/java/com/iluwatar/SubtleMethod.java +++ b/template-method/src/main/java/com/iluwatar/template/method/SubtleMethod.java @@ -1,20 +1,20 @@ -package com.iluwatar; - -public class SubtleMethod extends StealingMethod { - - @Override - protected String pickTarget() { - return "shop keeper"; - } - - @Override - protected void confuseTarget(String target) { - System.out.println("Approach the " + target + " with tears running and hug him!"); - } - - @Override - protected void stealTheItem(String target) { - System.out.println("While in close contact grab the " + target + "'s wallet."); - } - -} +package com.iluwatar.template.method; + +public class SubtleMethod extends StealingMethod { + + @Override + protected String pickTarget() { + return "shop keeper"; + } + + @Override + protected void confuseTarget(String target) { + System.out.println("Approach the " + target + " with tears running and hug him!"); + } + + @Override + protected void stealTheItem(String target) { + System.out.println("While in close contact grab the " + target + "'s wallet."); + } + +} diff --git a/visitor/src/main/java/com/iluwatar/App.java b/visitor/src/main/java/com/iluwatar/visitor/App.java similarity index 92% rename from visitor/src/main/java/com/iluwatar/App.java rename to visitor/src/main/java/com/iluwatar/visitor/App.java index 1de762fff7b9..659a6c7908cc 100644 --- a/visitor/src/main/java/com/iluwatar/App.java +++ b/visitor/src/main/java/com/iluwatar/visitor/App.java @@ -1,23 +1,23 @@ -package com.iluwatar; - -/** - * - * Visitor pattern defines mechanism to apply operations - * (UnitVisitor) on nodes (Unit) in hierarchy. New operations - * can be added without altering the node interface. - * - */ -public class App -{ - public static void main( String[] args ) - { - - Commander commander = new Commander( - new Sergeant(new Soldier(), new Soldier(), new Soldier()), - new Sergeant(new Soldier(), new Soldier(), new Soldier())); - commander.accept(new SoldierVisitor()); - commander.accept(new SergeantVisitor()); - commander.accept(new CommanderVisitor()); - - } -} +package com.iluwatar.visitor; + +/** + * + * Visitor pattern defines mechanism to apply operations + * (UnitVisitor) on nodes (Unit) in hierarchy. New operations + * can be added without altering the node interface. + * + */ +public class App +{ + public static void main( String[] args ) + { + + Commander commander = new Commander( + new Sergeant(new Soldier(), new Soldier(), new Soldier()), + new Sergeant(new Soldier(), new Soldier(), new Soldier())); + commander.accept(new SoldierVisitor()); + commander.accept(new SergeantVisitor()); + commander.accept(new CommanderVisitor()); + + } +} diff --git a/visitor/src/main/java/com/iluwatar/Commander.java b/visitor/src/main/java/com/iluwatar/visitor/Commander.java similarity index 87% rename from visitor/src/main/java/com/iluwatar/Commander.java rename to visitor/src/main/java/com/iluwatar/visitor/Commander.java index 6366abeafbf1..5ba51ea8969a 100644 --- a/visitor/src/main/java/com/iluwatar/Commander.java +++ b/visitor/src/main/java/com/iluwatar/visitor/Commander.java @@ -1,19 +1,19 @@ -package com.iluwatar; - -public class Commander extends Unit { - - public Commander(Unit ... children) { - super(children); - } - - @Override - public void accept(UnitVisitor visitor) { - visitor.visitCommander(this); - super.accept(visitor); - } - - @Override - public String toString() { - return "commander"; - } -} +package com.iluwatar.visitor; + +public class Commander extends Unit { + + public Commander(Unit ... children) { + super(children); + } + + @Override + public void accept(UnitVisitor visitor) { + visitor.visitCommander(this); + super.accept(visitor); + } + + @Override + public String toString() { + return "commander"; + } +} diff --git a/visitor/src/main/java/com/iluwatar/CommanderVisitor.java b/visitor/src/main/java/com/iluwatar/visitor/CommanderVisitor.java similarity index 89% rename from visitor/src/main/java/com/iluwatar/CommanderVisitor.java rename to visitor/src/main/java/com/iluwatar/visitor/CommanderVisitor.java index 63904aa2c99c..8cc2625058bb 100644 --- a/visitor/src/main/java/com/iluwatar/CommanderVisitor.java +++ b/visitor/src/main/java/com/iluwatar/visitor/CommanderVisitor.java @@ -1,22 +1,22 @@ -package com.iluwatar; - -public class CommanderVisitor implements UnitVisitor { - - @Override - public void visitSoldier(Soldier soldier) { - // TODO Auto-generated method stub - - } - - @Override - public void visitSergeant(Sergeant sergeant) { - // TODO Auto-generated method stub - - } - - @Override - public void visitCommander(Commander commander) { - System.out.println("Good to see you " + commander); - } - -} +package com.iluwatar.visitor; + +public class CommanderVisitor implements UnitVisitor { + + @Override + public void visitSoldier(Soldier soldier) { + // TODO Auto-generated method stub + + } + + @Override + public void visitSergeant(Sergeant sergeant) { + // TODO Auto-generated method stub + + } + + @Override + public void visitCommander(Commander commander) { + System.out.println("Good to see you " + commander); + } + +} diff --git a/visitor/src/main/java/com/iluwatar/Sergeant.java b/visitor/src/main/java/com/iluwatar/visitor/Sergeant.java similarity index 87% rename from visitor/src/main/java/com/iluwatar/Sergeant.java rename to visitor/src/main/java/com/iluwatar/visitor/Sergeant.java index f56b3fc7aded..45d0b58f3029 100644 --- a/visitor/src/main/java/com/iluwatar/Sergeant.java +++ b/visitor/src/main/java/com/iluwatar/visitor/Sergeant.java @@ -1,19 +1,19 @@ -package com.iluwatar; - -public class Sergeant extends Unit { - - public Sergeant(Unit ... children) { - super(children); - } - - @Override - public void accept(UnitVisitor visitor) { - visitor.visitSergeant(this); - super.accept(visitor); - } - - @Override - public String toString() { - return "sergeant"; - } -} +package com.iluwatar.visitor; + +public class Sergeant extends Unit { + + public Sergeant(Unit ... children) { + super(children); + } + + @Override + public void accept(UnitVisitor visitor) { + visitor.visitSergeant(this); + super.accept(visitor); + } + + @Override + public String toString() { + return "sergeant"; + } +} diff --git a/visitor/src/main/java/com/iluwatar/SergeantVisitor.java b/visitor/src/main/java/com/iluwatar/visitor/SergeantVisitor.java similarity index 89% rename from visitor/src/main/java/com/iluwatar/SergeantVisitor.java rename to visitor/src/main/java/com/iluwatar/visitor/SergeantVisitor.java index 5257ca4b577c..123db4d9c2bc 100644 --- a/visitor/src/main/java/com/iluwatar/SergeantVisitor.java +++ b/visitor/src/main/java/com/iluwatar/visitor/SergeantVisitor.java @@ -1,22 +1,22 @@ -package com.iluwatar; - -public class SergeantVisitor implements UnitVisitor { - - @Override - public void visitSoldier(Soldier soldier) { - // TODO Auto-generated method stub - - } - - @Override - public void visitSergeant(Sergeant sergeant) { - System.out.println("Hello " + sergeant); - } - - @Override - public void visitCommander(Commander commander) { - // TODO Auto-generated method stub - - } - -} +package com.iluwatar.visitor; + +public class SergeantVisitor implements UnitVisitor { + + @Override + public void visitSoldier(Soldier soldier) { + // TODO Auto-generated method stub + + } + + @Override + public void visitSergeant(Sergeant sergeant) { + System.out.println("Hello " + sergeant); + } + + @Override + public void visitCommander(Commander commander) { + // TODO Auto-generated method stub + + } + +} diff --git a/visitor/src/main/java/com/iluwatar/Soldier.java b/visitor/src/main/java/com/iluwatar/visitor/Soldier.java similarity index 87% rename from visitor/src/main/java/com/iluwatar/Soldier.java rename to visitor/src/main/java/com/iluwatar/visitor/Soldier.java index 45b9b1554937..b222df076a1f 100644 --- a/visitor/src/main/java/com/iluwatar/Soldier.java +++ b/visitor/src/main/java/com/iluwatar/visitor/Soldier.java @@ -1,19 +1,19 @@ -package com.iluwatar; - -public class Soldier extends Unit { - - public Soldier(Unit ... children) { - super(children); - } - - @Override - public void accept(UnitVisitor visitor) { - visitor.visitSoldier(this); - super.accept(visitor); - } - - @Override - public String toString() { - return "soldier"; - } -} +package com.iluwatar.visitor; + +public class Soldier extends Unit { + + public Soldier(Unit ... children) { + super(children); + } + + @Override + public void accept(UnitVisitor visitor) { + visitor.visitSoldier(this); + super.accept(visitor); + } + + @Override + public String toString() { + return "soldier"; + } +} diff --git a/visitor/src/main/java/com/iluwatar/SoldierVisitor.java b/visitor/src/main/java/com/iluwatar/visitor/SoldierVisitor.java similarity index 89% rename from visitor/src/main/java/com/iluwatar/SoldierVisitor.java rename to visitor/src/main/java/com/iluwatar/visitor/SoldierVisitor.java index fd80d553c1c9..c6b73b76ed08 100644 --- a/visitor/src/main/java/com/iluwatar/SoldierVisitor.java +++ b/visitor/src/main/java/com/iluwatar/visitor/SoldierVisitor.java @@ -1,22 +1,22 @@ -package com.iluwatar; - -public class SoldierVisitor implements UnitVisitor { - - @Override - public void visitSoldier(Soldier soldier) { - System.out.println("Greetings " + soldier); - } - - @Override - public void visitSergeant(Sergeant sergeant) { - // TODO Auto-generated method stub - - } - - @Override - public void visitCommander(Commander commander) { - // TODO Auto-generated method stub - - } - -} +package com.iluwatar.visitor; + +public class SoldierVisitor implements UnitVisitor { + + @Override + public void visitSoldier(Soldier soldier) { + System.out.println("Greetings " + soldier); + } + + @Override + public void visitSergeant(Sergeant sergeant) { + // TODO Auto-generated method stub + + } + + @Override + public void visitCommander(Commander commander) { + // TODO Auto-generated method stub + + } + +} diff --git a/visitor/src/main/java/com/iluwatar/Unit.java b/visitor/src/main/java/com/iluwatar/visitor/Unit.java similarity index 87% rename from visitor/src/main/java/com/iluwatar/Unit.java rename to visitor/src/main/java/com/iluwatar/visitor/Unit.java index 32cc93ed321c..2eb324fb0643 100644 --- a/visitor/src/main/java/com/iluwatar/Unit.java +++ b/visitor/src/main/java/com/iluwatar/visitor/Unit.java @@ -1,21 +1,21 @@ -package com.iluwatar; - -/** - * - * Interface for the nodes in hierarchy. - * - */ -public abstract class Unit { - - private Unit[] children; - - public Unit(Unit ... children) { - this.children = children; - } - - public void accept(UnitVisitor visitor) { - for (Unit child: children) { - child.accept(visitor); - } - } -} +package com.iluwatar.visitor; + +/** + * + * Interface for the nodes in hierarchy. + * + */ +public abstract class Unit { + + private Unit[] children; + + public Unit(Unit ... children) { + this.children = children; + } + + public void accept(UnitVisitor visitor) { + for (Unit child: children) { + child.accept(visitor); + } + } +} diff --git a/visitor/src/main/java/com/iluwatar/UnitVisitor.java b/visitor/src/main/java/com/iluwatar/visitor/UnitVisitor.java similarity index 84% rename from visitor/src/main/java/com/iluwatar/UnitVisitor.java rename to visitor/src/main/java/com/iluwatar/visitor/UnitVisitor.java index 298b9f8cbfc7..64cfce4b5f05 100644 --- a/visitor/src/main/java/com/iluwatar/UnitVisitor.java +++ b/visitor/src/main/java/com/iluwatar/visitor/UnitVisitor.java @@ -1,14 +1,14 @@ -package com.iluwatar; - -/** - * - * Visitor interface. - * - */ -public interface UnitVisitor { - - void visitSoldier(Soldier soldier); - void visitSergeant(Sergeant sergeant); - void visitCommander(Commander commander); - -} +package com.iluwatar.visitor; + +/** + * + * Visitor interface. + * + */ +public interface UnitVisitor { + + void visitSoldier(Soldier soldier); + void visitSergeant(Sergeant sergeant); + void visitCommander(Commander commander); + +} From 3c4d5a646096b99cdaa479163d06acb552e28178 Mon Sep 17 00:00:00 2001 From: duanmenghua Date: Sun, 30 Jul 2017 11:22:49 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/pom.xml | 22 ++++++++++++++++ .../main/java/com/ronly/lambda/Lambda.java | 25 +++++++++++++++++++ test/test.iml | 15 +++++++++++ 3 files changed, 62 insertions(+) create mode 100644 test/pom.xml create mode 100644 test/src/main/java/com/ronly/lambda/Lambda.java create mode 100644 test/test.iml diff --git a/test/pom.xml b/test/pom.xml new file mode 100644 index 000000000000..3c14bd179cb2 --- /dev/null +++ b/test/pom.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + + com.iluwatar + test + 1.0-SNAPSHOT + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.8 + 1.8 + + + + + + \ No newline at end of file diff --git a/test/src/main/java/com/ronly/lambda/Lambda.java b/test/src/main/java/com/ronly/lambda/Lambda.java new file mode 100644 index 000000000000..6d2f8a92174d --- /dev/null +++ b/test/src/main/java/com/ronly/lambda/Lambda.java @@ -0,0 +1,25 @@ +package com.ronly.lambda; + +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Created by duanmenghua on 2017-07-24. + */ +public class Lambda { + public static void main(String[] args) { + + List result = new LinkedList<>(); + result.add(1); + result.add(3); + result.add(4); + result.add(7); + result.add(5); + result.add(7); + List collect = result.stream().filter(x -> x > 3).distinct().collect(Collectors.toList()); + System.out.println(collect); + + + } +} diff --git a/test/test.iml b/test/test.iml new file mode 100644 index 000000000000..bc7ef2d9d966 --- /dev/null +++ b/test/test.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file From 919ab66c2d41972d209e68de75a2eb17be741cbf Mon Sep 17 00:00:00 2001 From: duanmenghua Date: Sun, 30 Jul 2017 17:38:03 +0800 Subject: [PATCH 3/3] =?UTF-8?q?LRU=20=E7=BC=93=E5=AD=98=E3=80=81=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E4=BB=A3=E7=90=86=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/compiler.xml | 81 ++ .idea/copyright/profiles_settings.xml | 3 + .idea/encodings.xml | 30 + .idea/java-design-patterns.iml | 12 + .idea/libraries/Maven__junit_junit_3_8_1.xml | 13 + .idea/misc.xml | 25 + .idea/modules.xml | 33 + .idea/vcs.xml | 6 + .idea/workspace.xml | 835 ++++++++++++++++++ abstract-factory/abstract-factory.iml | 15 + adapter/adapter.iml | 15 + bridge/bridge.iml | 14 + builder/builder.iml | 14 + chain/chain.iml | 14 + command/command.iml | 15 + composite/composite.iml | 15 + decorator/decorator.iml | 14 + .../double-checked-locking.iml | 14 + facade/facade.iml | 14 + factory-method/factory-method.iml | 15 + flyweight/flyweight.iml | 14 + interpreter/interpreter.iml | 14 + iterator/iterator.iml | 14 + lambda/pom.xml | 27 + .../java/com/iluwatar/lambda/LRUCache.java | 48 + .../main/java/com/iluwatar/lambda/Lambda.java | 65 ++ .../java/com/iluwatar/proxy/HelloService.java | 6 + .../proxy/HelloServiceCGLIBProxy.java | 37 + .../com/iluwatar/proxy/HelloServiceImpl.java | 10 + .../iluwatar/proxy/HelloServiceJDKProxy.java | 32 + .../com/iluwatar/reflect/ReflectService.java | 23 + mediator/mediator.iml | 14 + memento/memento.iml | 14 + observer/observer.iml | 15 + pom.xml | 123 +-- prototype/prototype.iml | 14 + proxy/proxy.iml | 14 + singleton/singleton.iml | 15 + state/state.iml | 14 + strategy/strategy.iml | 14 + template-method/template-method.iml | 14 + test/pom.xml | 7 +- visitor/visitor.iml | 14 + 43 files changed, 1697 insertions(+), 62 deletions(-) create mode 100644 .idea/compiler.xml create mode 100644 .idea/copyright/profiles_settings.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/java-design-patterns.iml create mode 100644 .idea/libraries/Maven__junit_junit_3_8_1.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 abstract-factory/abstract-factory.iml create mode 100644 adapter/adapter.iml create mode 100644 bridge/bridge.iml create mode 100644 builder/builder.iml create mode 100644 chain/chain.iml create mode 100644 command/command.iml create mode 100644 composite/composite.iml create mode 100644 decorator/decorator.iml create mode 100644 double-checked-locking/double-checked-locking.iml create mode 100644 facade/facade.iml create mode 100644 factory-method/factory-method.iml create mode 100644 flyweight/flyweight.iml create mode 100644 interpreter/interpreter.iml create mode 100644 iterator/iterator.iml create mode 100644 lambda/pom.xml create mode 100644 lambda/src/main/java/com/iluwatar/lambda/LRUCache.java create mode 100644 lambda/src/main/java/com/iluwatar/lambda/Lambda.java create mode 100644 lambda/src/main/java/com/iluwatar/proxy/HelloService.java create mode 100644 lambda/src/main/java/com/iluwatar/proxy/HelloServiceCGLIBProxy.java create mode 100644 lambda/src/main/java/com/iluwatar/proxy/HelloServiceImpl.java create mode 100644 lambda/src/main/java/com/iluwatar/proxy/HelloServiceJDKProxy.java create mode 100644 lambda/src/main/java/com/iluwatar/reflect/ReflectService.java create mode 100644 mediator/mediator.iml create mode 100644 memento/memento.iml create mode 100644 observer/observer.iml create mode 100644 prototype/prototype.iml create mode 100644 proxy/proxy.iml create mode 100644 singleton/singleton.iml create mode 100644 state/state.iml create mode 100644 strategy/strategy.iml create mode 100644 template-method/template-method.iml create mode 100644 visitor/visitor.iml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 000000000000..b585897e78e9 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml new file mode 100644 index 000000000000..c7d1c5a837aa --- /dev/null +++ b/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 000000000000..f010e509b037 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/java-design-patterns.iml b/.idea/java-design-patterns.iml new file mode 100644 index 000000000000..b26c4d073e4c --- /dev/null +++ b/.idea/java-design-patterns.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__junit_junit_3_8_1.xml b/.idea/libraries/Maven__junit_junit_3_8_1.xml new file mode 100644 index 000000000000..d9146a8e175a --- /dev/null +++ b/.idea/libraries/Maven__junit_junit_3_8_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 000000000000..9b34e120e4aa --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000000..a0829f89b78c --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000000..35eb1ddfbbc0 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 000000000000..4ff8c22184d0 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,835 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + DEFINITION_ORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + project + + + + + + + + + + + + + + + + project + + + true + + + + DIRECTORY + + false + + + + + + + + + + + + + + + + + + + + + + + 1500906645504 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + file://$PROJECT_DIR$/test/src/main/java/com/ronly/lambda/Lambda.java + 20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No facets are configured + + + + + + + + + + + + + + + 1.8 + + + + + + + + test + + + + + + + + 1.8 + + + + + + + + Maven: junit:junit:3.8.1 + + + + + + + + \ No newline at end of file diff --git a/abstract-factory/abstract-factory.iml b/abstract-factory/abstract-factory.iml new file mode 100644 index 000000000000..57a0548ee6df --- /dev/null +++ b/abstract-factory/abstract-factory.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/adapter/adapter.iml b/adapter/adapter.iml new file mode 100644 index 000000000000..57a0548ee6df --- /dev/null +++ b/adapter/adapter.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bridge/bridge.iml b/bridge/bridge.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/bridge/bridge.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/builder/builder.iml b/builder/builder.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/builder/builder.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/chain/chain.iml b/chain/chain.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/chain/chain.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/command/command.iml b/command/command.iml new file mode 100644 index 000000000000..57a0548ee6df --- /dev/null +++ b/command/command.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/composite/composite.iml b/composite/composite.iml new file mode 100644 index 000000000000..57a0548ee6df --- /dev/null +++ b/composite/composite.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/decorator/decorator.iml b/decorator/decorator.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/decorator/decorator.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/double-checked-locking/double-checked-locking.iml b/double-checked-locking/double-checked-locking.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/double-checked-locking/double-checked-locking.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/facade/facade.iml b/facade/facade.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/facade/facade.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/factory-method/factory-method.iml b/factory-method/factory-method.iml new file mode 100644 index 000000000000..57a0548ee6df --- /dev/null +++ b/factory-method/factory-method.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/flyweight/flyweight.iml b/flyweight/flyweight.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/flyweight/flyweight.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/interpreter/interpreter.iml b/interpreter/interpreter.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/interpreter/interpreter.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/iterator/iterator.iml b/iterator/iterator.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/iterator/iterator.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lambda/pom.xml b/lambda/pom.xml new file mode 100644 index 000000000000..f56729207b3b --- /dev/null +++ b/lambda/pom.xml @@ -0,0 +1,27 @@ + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.0-SNAPSHOT + + lambda + lambda + + + + cglib + cglib + 3.2.5 + + + + org.mybatis + mybatis + 3.2.1 + + + + + \ No newline at end of file diff --git a/lambda/src/main/java/com/iluwatar/lambda/LRUCache.java b/lambda/src/main/java/com/iluwatar/lambda/LRUCache.java new file mode 100644 index 000000000000..109345fcc2a8 --- /dev/null +++ b/lambda/src/main/java/com/iluwatar/lambda/LRUCache.java @@ -0,0 +1,48 @@ +package com.iluwatar.lambda; +/** + * LRU缓存 + * @author duanmenghua + * + */ + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Random; + +public class LRUCache { + + private static Integer cacheSize = 5; + + static LinkedHashMap cache = new LinkedHashMap(cacheSize, 0.75f, true) { + private static final long serialVersionUID = 4389287907499075284L; + protected boolean removeEldestEntry(Map.Entry eldest) { + + if (size()>cacheSize) { + System.out.println(cache.keySet()); + System.out.println("to remove key: "+ eldest.getKey()+ " value: "+eldest.getValue()); + return true; + } + + return false; + } + + }; + + public static void main(String[] args) throws InterruptedException { + while(true) { + if (cache.size()>=cacheSize) { + Integer key = cache.keySet().stream().findFirst().get(); + System.out.println("get value: key: "+ key+" value: "+cache.get(key)); + } + + int nextKey = new Random(System.nanoTime()).nextInt(10); + String value = "test"; + cache.put(nextKey, value); + System.out.println("put value: key: "+ nextKey+" value: "+value); + System.out.println(cache.keySet()); + Thread.sleep(2000); + + } + } + +} diff --git a/lambda/src/main/java/com/iluwatar/lambda/Lambda.java b/lambda/src/main/java/com/iluwatar/lambda/Lambda.java new file mode 100644 index 000000000000..678bb4f81061 --- /dev/null +++ b/lambda/src/main/java/com/iluwatar/lambda/Lambda.java @@ -0,0 +1,65 @@ +package com.iluwatar.lambda; + +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.Optional; +import java.util.Random; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +/** + * Created by duanmenghua on 2017-07-24. + */ +public class Lambda { + public static void main(String[] args) { + +// List result = new LinkedList<>(); +// result.add(1); +// result.add(3); +// result.add(4); +// result.add(7); +// result.add(5); +// result.add(7); +// List collect = result.stream().filter(x -> x > 3).distinct().collect(Collectors.toList()); +// Collections.sort(collect, (x,y)-> {return y-x;}); +// System.out.println(collect); +// collect.forEach(System.out::println); +// System.out.println("predicate"); +// evaluate(collect, n->n<=5); +// Integer reduce = collect.stream().map(x->x*x).reduce((x,y)->x+y).get(); +// System.out.println(collect); + compare(); + } + + public static void evaluate(List list, Predicate predicate) { + list.forEach((x)->{if(predicate.test(x)) System.out.print(x+" ");}); + } + public static void compare() { + List values = new LinkedList<>(); + for (int i = 0; i < 50000000; i++) { + Random random = new Random(System.currentTimeMillis()); + values.add(random.nextInt()); + } + int max = Integer.MIN_VALUE; + long start = System.currentTimeMillis(); + System.out.println("for start "); + for (Integer integer : values) { + if (integer > max) { + max = integer; + } + } + long end = System.currentTimeMillis(); + + System.out.println("max is: "+max); + System.out.println("for start "+(end-start)*1.0/1000); + max = Integer.MIN_VALUE; + max = values.stream().reduce(Integer.MIN_VALUE,Math::max); + long last = System.currentTimeMillis(); + System.out.println("max is: "+max); + System.out.println("for start "+(last-end)*1.0/1000); + + + } + +} diff --git a/lambda/src/main/java/com/iluwatar/proxy/HelloService.java b/lambda/src/main/java/com/iluwatar/proxy/HelloService.java new file mode 100644 index 000000000000..b7f28e8f8d8c --- /dev/null +++ b/lambda/src/main/java/com/iluwatar/proxy/HelloService.java @@ -0,0 +1,6 @@ +package com.iluwatar.proxy; + +public interface HelloService { + public void Hello(String name); + +} diff --git a/lambda/src/main/java/com/iluwatar/proxy/HelloServiceCGLIBProxy.java b/lambda/src/main/java/com/iluwatar/proxy/HelloServiceCGLIBProxy.java new file mode 100644 index 000000000000..2920225bdfc7 --- /dev/null +++ b/lambda/src/main/java/com/iluwatar/proxy/HelloServiceCGLIBProxy.java @@ -0,0 +1,37 @@ +package com.iluwatar.proxy; + +import java.lang.reflect.Method; + +import net.sf.cglib.proxy.Enhancer; +import net.sf.cglib.proxy.MethodInterceptor; +import net.sf.cglib.proxy.MethodProxy; + +public class HelloServiceCGLIBProxy implements MethodInterceptor{ + + private Object target; + + public Object getInstance(Object target) { + this.target = target; + Enhancer enhancer = new Enhancer(); + enhancer.setSuperclass(target.getClass()); + enhancer.setCallback(this); + return enhancer.create(); + } + + @Override + public Object intercept(Object object, Method method, Object[] args, MethodProxy proxy) throws Throwable { + System.out.println("CGLIB代理方法将开始执行"); + Object result = proxy.invokeSuper(object, args); + System.out.println("CGLIB代理方法将执行结束"); + return result; + } + + public static void main(String[] args) { + HelloServiceCGLIBProxy handler = new HelloServiceCGLIBProxy(); + HelloService proxy = (HelloService) handler.getInstance(new HelloServiceImpl()); + proxy.Hello("duanmenghua"); + } + + + +} diff --git a/lambda/src/main/java/com/iluwatar/proxy/HelloServiceImpl.java b/lambda/src/main/java/com/iluwatar/proxy/HelloServiceImpl.java new file mode 100644 index 000000000000..bfce1d5106c1 --- /dev/null +++ b/lambda/src/main/java/com/iluwatar/proxy/HelloServiceImpl.java @@ -0,0 +1,10 @@ +package com.iluwatar.proxy; + +public class HelloServiceImpl implements HelloService{ + + @Override + public void Hello(String name) { + System.out.println("Hello "+name); + } + +} diff --git a/lambda/src/main/java/com/iluwatar/proxy/HelloServiceJDKProxy.java b/lambda/src/main/java/com/iluwatar/proxy/HelloServiceJDKProxy.java new file mode 100644 index 000000000000..3b377d0d797b --- /dev/null +++ b/lambda/src/main/java/com/iluwatar/proxy/HelloServiceJDKProxy.java @@ -0,0 +1,32 @@ +package com.iluwatar.proxy; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; + +public class HelloServiceJDKProxy implements InvocationHandler{ + + private Object target; + + public Object bind(Object target) { + this.target = target; + return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); + + } + + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + System.out.println("代理方法将开始执行"); + Object result = method.invoke(target, args); + System.out.println("代理方法将执行结束"); + + return result; + } + + public static void main(String[] args) { + HelloServiceJDKProxy handler = new HelloServiceJDKProxy(); + HelloService proxy = (HelloService) handler.bind(new HelloServiceImpl()); + proxy.Hello("duanmenghua"); + } + +} diff --git a/lambda/src/main/java/com/iluwatar/reflect/ReflectService.java b/lambda/src/main/java/com/iluwatar/reflect/ReflectService.java new file mode 100644 index 000000000000..2cd9ec810369 --- /dev/null +++ b/lambda/src/main/java/com/iluwatar/reflect/ReflectService.java @@ -0,0 +1,23 @@ +package com.iluwatar.reflect; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +/** + * 反射 + * @author duanmenghua + * + */ +public class ReflectService { + public void Hello(String name) { + System.out.println("hello word "+ name); + } + + public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException { + + Object service = Class.forName(ReflectService.class.getName()).newInstance(); + Method method = service.getClass().getMethod("Hello", String.class); + method.invoke(service, "duanmenghua"); + } + +} diff --git a/mediator/mediator.iml b/mediator/mediator.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/mediator/mediator.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/memento/memento.iml b/memento/memento.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/memento/memento.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/observer/observer.iml b/observer/observer.iml new file mode 100644 index 000000000000..57a0548ee6df --- /dev/null +++ b/observer/observer.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 4da45cbe67e8..e27d0261fa3e 100644 --- a/pom.xml +++ b/pom.xml @@ -1,62 +1,63 @@ - - - 4.0.0 - - com.iluwatar - java-design-patterns - 1.0-SNAPSHOT - pom - - - - website - scp://webhost.company.com/www/website - - - - - UTF-8 - - - abstract-factory - builder - factory-method - prototype - singleton - adapter - bridge - composite - decorator - facade - flyweight - proxy - chain - command - interpreter - iterator - mediator - memento - observer - state - strategy - template-method - visitor - double-checked-locking - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.0 - - 1.7 - 1.7 - - - - - + + + 4.0.0 + + com.iluwatar + java-design-patterns + 1.0-SNAPSHOT + pom + + + + website + scp://webhost.company.com/www/website + + + + + UTF-8 + + + abstract-factory + builder + factory-method + prototype + singleton + adapter + bridge + composite + decorator + facade + flyweight + proxy + chain + command + interpreter + iterator + mediator + memento + observer + state + strategy + template-method + visitor + double-checked-locking + lambda + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.0 + + 1.7 + 1.7 + + + + + \ No newline at end of file diff --git a/prototype/prototype.iml b/prototype/prototype.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/prototype/prototype.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/proxy/proxy.iml b/proxy/proxy.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/proxy/proxy.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/singleton/singleton.iml b/singleton/singleton.iml new file mode 100644 index 000000000000..57a0548ee6df --- /dev/null +++ b/singleton/singleton.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/state/state.iml b/state/state.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/state/state.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/strategy/strategy.iml b/strategy/strategy.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/strategy/strategy.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/template-method/template-method.iml b/template-method/template-method.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/template-method/template-method.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/pom.xml b/test/pom.xml index 3c14bd179cb2..3421d505fcf2 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -3,10 +3,15 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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.0-SNAPSHOT + com.iluwatar test 1.0-SNAPSHOT + test org.apache.maven.plugins maven-compiler-plugin diff --git a/visitor/visitor.iml b/visitor/visitor.iml new file mode 100644 index 000000000000..622a13cd7540 --- /dev/null +++ b/visitor/visitor.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file