master 2d39fe7ed8ac cached
2957 files
9.3 MB
2.6M tokens
6874 symbols
2 requests
Copy disabled (too large) Download .txt
Showing preview only (10,405K chars total). Download the full file to get everything.
Repository: iluwatar/java-design-patterns
Branch: master
Commit: 2d39fe7ed8ac
Files: 2957
Total size: 9.3 MB

Directory structure:
gitextract_iyxrb95i/

├── .all-contributorsrc
├── .editorconfig
├── .github/
│   ├── FUNDING.yml
│   ├── dependabot.yml
│   └── workflows/
│       ├── maven-ci.yml
│       ├── maven-pr-builder.yml
│       ├── presubmit.yml
│       └── stale.yml
├── .gitignore
├── .mvn/
│   └── wrapper/
│       └── maven-wrapper.properties
├── CONTRIBUTING.MD
├── LICENSE.md
├── PULL_REQUEST_TEMPLATE.md
├── README.md
├── abstract-document/
│   ├── README.md
│   ├── etc/
│   │   ├── abstract-document.ucls
│   │   └── abstract-document.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── abstractdocument/
│       │                   ├── AbstractDocument.java
│       │                   ├── App.java
│       │                   ├── Document.java
│       │                   └── domain/
│       │                       ├── Car.java
│       │                       ├── HasModel.java
│       │                       ├── HasParts.java
│       │                       ├── HasPrice.java
│       │                       ├── HasType.java
│       │                       ├── Part.java
│       │                       └── enums/
│       │                           └── Property.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── abstractdocument/
│                           ├── AbstractDocumentTest.java
│                           ├── AppTest.java
│                           └── DomainTest.java
├── abstract-factory/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   └── abstract-factory.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── abstractfactory/
│       │                   ├── App.java
│       │                   ├── Army.java
│       │                   ├── Castle.java
│       │                   ├── ElfArmy.java
│       │                   ├── ElfCastle.java
│       │                   ├── ElfKing.java
│       │                   ├── ElfKingdomFactory.java
│       │                   ├── King.java
│       │                   ├── Kingdom.java
│       │                   ├── KingdomFactory.java
│       │                   ├── OrcArmy.java
│       │                   ├── OrcCastle.java
│       │                   ├── OrcKing.java
│       │                   └── OrcKingdomFactory.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── abstractfactory/
│                           ├── AbstractFactoryTest.java
│                           └── AppTest.java
├── active-object/
│   ├── README.md
│   ├── etc/
│   │   └── active-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── activeobject/
│       │                   ├── ActiveCreature.java
│       │                   ├── App.java
│       │                   └── Orc.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── activeobject/
│                           ├── ActiveCreatureTest.java
│                           └── AppTest.java
├── actor-model/
│   ├── README.md
│   ├── etc/
│   │   └── actor-model.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── actormodel/
│       │                   ├── Actor.java
│       │                   ├── ActorSystem.java
│       │                   ├── App.java
│       │                   ├── ExampleActor.java
│       │                   ├── ExampleActor2.java
│       │                   └── Message.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── actor/
│                           └── ActorModelTest.java
├── acyclic-visitor/
│   ├── README.md
│   ├── etc/
│   │   └── acyclic-visitor.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── acyclicvisitor/
│       │                   ├── AllModemVisitor.java
│       │                   ├── App.java
│       │                   ├── ConfigureForDosVisitor.java
│       │                   ├── ConfigureForUnixVisitor.java
│       │                   ├── Hayes.java
│       │                   ├── HayesVisitor.java
│       │                   ├── Modem.java
│       │                   ├── ModemVisitor.java
│       │                   ├── Zoom.java
│       │                   └── ZoomVisitor.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── acyclicvisitor/
│                           ├── AppTest.java
│                           ├── HayesTest.java
│                           └── ZoomTest.java
├── adapter/
│   ├── README.md
│   ├── etc/
│   │   └── adapter.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── adapter/
│       │                   ├── App.java
│       │                   ├── Captain.java
│       │                   ├── FishingBoat.java
│       │                   ├── FishingBoatAdapter.java
│       │                   ├── RowingBoat.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── adapter/
│                           ├── AdapterPatternTest.java
│                           └── AppTest.java
├── ambassador/
│   ├── README.md
│   ├── etc/
│   │   └── ambassador.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── ambassador/
│       │                   ├── App.java
│       │                   ├── Client.java
│       │                   ├── RemoteService.java
│       │                   ├── RemoteServiceInterface.java
│       │                   ├── RemoteServiceStatus.java
│       │                   ├── ServiceAmbassador.java
│       │                   └── util/
│       │                       └── RandomProvider.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── ambassador/
│                           ├── AppTest.java
│                           ├── ClientTest.java
│                           ├── RemoteServiceTest.java
│                           └── ServiceAmbassadorTest.java
├── anti-corruption-layer/
│   ├── README.md
│   ├── etc/
│   │   └── anti-corruption-layer.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── corruption/
│       │   │               ├── App.java
│       │   │               ├── package-info.java
│       │   │               └── system/
│       │   │                   ├── AntiCorruptionLayer.java
│       │   │                   ├── DataStore.java
│       │   │                   ├── ShopException.java
│       │   │                   ├── legacy/
│       │   │                   │   ├── LegacyOrder.java
│       │   │                   │   ├── LegacyShop.java
│       │   │                   │   └── LegacyStore.java
│       │   │                   └── modern/
│       │   │                       ├── Customer.java
│       │   │                       ├── ModernOrder.java
│       │   │                       ├── ModernShop.java
│       │   │                       ├── ModernStore.java
│       │   │                       └── Shipment.java
│       │   └── resources/
│       │       └── application.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── corruption/
│                           └── system/
│                               └── AntiCorruptionLayerTest.java
├── arrange-act-assert/
│   ├── README.md
│   ├── etc/
│   │   └── arrange-act-assert.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── arrangeactassert/
│       │                   └── Cash.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── arrangeactassert/
│                           ├── CashAAATest.java
│                           └── CashAntiAAATest.java
├── async-method-invocation/
│   ├── README.md
│   ├── etc/
│   │   └── async-method-invocation.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── async/
│       │                   └── method/
│       │                       └── invocation/
│       │                           ├── App.java
│       │                           ├── AsyncCallback.java
│       │                           ├── AsyncExecutor.java
│       │                           ├── AsyncResult.java
│       │                           └── ThreadAsyncExecutor.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── async/
│                           └── method/
│                               └── invocation/
│                                   ├── AppTest.java
│                                   └── ThreadAsyncExecutorTest.java
├── backpressure/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── backpressure/
│       │                   ├── App.java
│       │                   ├── Publisher.java
│       │                   └── Subscriber.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── backpressure/
│                           ├── AppTest.java
│                           ├── LoggerExtension.java
│                           ├── PublisherTest.java
│                           └── SubscriberTest.java
├── balking/
│   ├── README.md
│   ├── etc/
│   │   ├── balking.ucls
│   │   └── balking.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── balking/
│       │                   ├── App.java
│       │                   ├── DelayProvider.java
│       │                   ├── WashingMachine.java
│       │                   └── WashingMachineState.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── balking/
│                           ├── AppTest.java
│                           └── WashingMachineTest.java
├── bloc/
│   ├── README.md
│   ├── etc/
│   │   ├── bloc.puml
│   │   └── bloc.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── bloc/
│       │                   ├── Bloc.java
│       │                   ├── BlocUi.java
│       │                   ├── ListenerManager.java
│       │                   ├── Main.java
│       │                   ├── State.java
│       │                   └── StateListener.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── bloc/
│                           ├── BlocTest.java
│                           └── BlocUiTest.java
├── bridge/
│   ├── README.md
│   ├── etc/
│   │   └── bridge.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── bridge/
│       │                   ├── App.java
│       │                   ├── Enchantment.java
│       │                   ├── FlyingEnchantment.java
│       │                   ├── Hammer.java
│       │                   ├── SoulEatingEnchantment.java
│       │                   ├── Sword.java
│       │                   └── Weapon.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── bridge/
│                           ├── AppTest.java
│                           ├── HammerTest.java
│                           ├── SwordTest.java
│                           └── WeaponTest.java
├── builder/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   └── builder.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── builder/
│       │                   ├── App.java
│       │                   ├── Armor.java
│       │                   ├── HairColor.java
│       │                   ├── HairType.java
│       │                   ├── Hero.java
│       │                   ├── Profession.java
│       │                   └── Weapon.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── builder/
│                           ├── AppTest.java
│                           └── HeroTest.java
├── business-delegate/
│   ├── README.md
│   ├── etc/
│   │   └── business-delegate.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── business/
│       │                   └── delegate/
│       │                       ├── App.java
│       │                       ├── BusinessDelegate.java
│       │                       ├── BusinessLookup.java
│       │                       ├── MobileClient.java
│       │                       ├── NetflixService.java
│       │                       ├── VideoStreamingService.java
│       │                       └── YouTubeService.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── business/
│                           └── delegate/
│                               ├── AppTest.java
│                               └── BusinessDelegateTest.java
├── bytecode/
│   ├── README.md
│   ├── etc/
│   │   └── bytecode.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── bytecode/
│       │                   ├── App.java
│       │                   ├── Instruction.java
│       │                   ├── VirtualMachine.java
│       │                   ├── Wizard.java
│       │                   └── util/
│       │                       └── InstructionConverterUtil.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── bytecode/
│                           ├── AppTest.java
│                           ├── VirtualMachineTest.java
│                           └── util/
│                               └── InstructionConverterUtilTest.java
├── caching/
│   ├── .gitignore
│   ├── README.md
│   ├── docker-compose.yml
│   ├── etc/
│   │   ├── caching.ucls
│   │   └── caching.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── caching/
│       │                   ├── App.java
│       │                   ├── AppManager.java
│       │                   ├── CacheStore.java
│       │                   ├── CachingPolicy.java
│       │                   ├── LruCache.java
│       │                   ├── UserAccount.java
│       │                   ├── constants/
│       │                   │   ├── CachingConstants.java
│       │                   │   └── package-info.java
│       │                   ├── database/
│       │                   │   ├── DbManager.java
│       │                   │   ├── DbManagerFactory.java
│       │                   │   ├── MongoDb.java
│       │                   │   ├── VirtualDb.java
│       │                   │   └── package-info.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── caching/
│                           ├── AppTest.java
│                           ├── CachingTest.java
│                           └── database/
│                               └── MongoDbTest.java
├── callback/
│   ├── README.md
│   ├── etc/
│   │   ├── callback.ucls
│   │   └── callback.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── callback/
│       │                   ├── App.java
│       │                   ├── Callback.java
│       │                   ├── SimpleTask.java
│       │                   ├── Task.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── callback/
│                           ├── AppTest.java
│                           └── CallbackTest.java
├── chain-of-responsibility/
│   ├── README.md
│   ├── etc/
│   │   └── chain-of-responsibility.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── chain/
│       │                   ├── App.java
│       │                   ├── OrcCommander.java
│       │                   ├── OrcKing.java
│       │                   ├── OrcOfficer.java
│       │                   ├── OrcSoldier.java
│       │                   ├── Request.java
│       │                   ├── RequestHandler.java
│       │                   └── RequestType.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── chain/
│                           ├── AppTest.java
│                           └── OrcKingTest.java
├── checkstyle-suppressions.xml
├── circuit-breaker/
│   ├── README.md
│   ├── etc/
│   │   └── circuit-breaker.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── circuitbreaker/
│       │                   ├── App.java
│       │                   ├── CircuitBreaker.java
│       │                   ├── DefaultCircuitBreaker.java
│       │                   ├── DelayedRemoteService.java
│       │                   ├── MonitoringService.java
│       │                   ├── QuickRemoteService.java
│       │                   ├── RemoteService.java
│       │                   ├── RemoteServiceException.java
│       │                   └── State.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── circuitbreaker/
│                           ├── AppTest.java
│                           ├── DefaultCircuitBreakerTest.java
│                           ├── DelayedRemoteServiceTest.java
│                           └── MonitoringServiceTest.java
├── clean-architecture/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── cleanarchitecture/
│       │                   ├── App.java
│       │                   ├── Cart.java
│       │                   ├── CartController.java
│       │                   ├── CartRepository.java
│       │                   ├── InMemoryCartRepository.java
│       │                   ├── InMemoryOrderRepository.java
│       │                   ├── InMemoryProductRepository.java
│       │                   ├── Order.java
│       │                   ├── OrderController.java
│       │                   ├── OrderRepository.java
│       │                   ├── Product.java
│       │                   ├── ProductRepository.java
│       │                   ├── ShoppingCartService.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── cleanarchitecture/
│                           ├── AppTest.java
│                           └── CartControllerTest.java
├── client-session/
│   ├── README.md
│   ├── etc/
│   │   └── client-session.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── client/
│       │                   └── session/
│       │                       ├── App.java
│       │                       ├── Request.java
│       │                       ├── Server.java
│       │                       └── Session.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── client/
│                           └── session/
│                               ├── AppTest.java
│                               └── ServerTest.java
├── collecting-parameter/
│   ├── README.md
│   ├── etc/
│   │   └── collecting-parameter.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── collectingparameter/
│       │                   ├── App.java
│       │                   ├── PaperSizes.java
│       │                   ├── PrinterItem.java
│       │                   └── PrinterQueue.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── collectingparameter/
│                           ├── AppTest.java
│                           ├── CollectingParameterTest.java
│                           └── PrinterQueueTest.java
├── collection-pipeline/
│   ├── README.md
│   ├── etc/
│   │   └── collection-pipeline.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── collectionpipeline/
│       │                   ├── App.java
│       │                   ├── Car.java
│       │                   ├── CarFactory.java
│       │                   ├── Category.java
│       │                   ├── FunctionalProgramming.java
│       │                   ├── ImperativeProgramming.java
│       │                   └── Person.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── collectionpipeline/
│                           └── AppTest.java
├── combinator/
│   ├── README.md
│   ├── etc/
│   │   └── combinator.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── combinator/
│       │                   ├── CombinatorApp.java
│       │                   ├── Finder.java
│       │                   └── Finders.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── combinator/
│                           ├── CombinatorAppTest.java
│                           ├── FinderTest.java
│                           └── FindersTest.java
├── command/
│   ├── README.md
│   ├── etc/
│   │   ├── command.ucls
│   │   └── command.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── command/
│       │                   ├── App.java
│       │                   ├── Goblin.java
│       │                   ├── Size.java
│       │                   ├── Target.java
│       │                   ├── Visibility.java
│       │                   └── Wizard.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── command/
│                           ├── AppTest.java
│                           └── CommandTest.java
├── command-query-responsibility-segregation/
│   ├── README.md
│   ├── etc/
│   │   ├── command-query-responsibility-segregation.urm.puml
│   │   ├── cqrs.ucls
│   │   └── cqrs.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── cqrs/
│       │   │               ├── app/
│       │   │               │   └── App.java
│       │   │               ├── commandes/
│       │   │               │   ├── CommandService.java
│       │   │               │   └── CommandServiceImpl.java
│       │   │               ├── constants/
│       │   │               │   └── AppConstants.java
│       │   │               ├── domain/
│       │   │               │   └── model/
│       │   │               │       ├── Author.java
│       │   │               │       └── Book.java
│       │   │               ├── dto/
│       │   │               │   ├── Author.java
│       │   │               │   └── Book.java
│       │   │               ├── queries/
│       │   │               │   ├── QueryService.java
│       │   │               │   └── QueryServiceImpl.java
│       │   │               └── util/
│       │   │                   └── HibernateUtil.java
│       │   └── resources/
│       │       ├── hibernate.cfg.xml
│       │       └── logback.xml
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── iluwatar/
│           │           └── cqrs/
│           │               └── IntegrationTest.java
│           └── resources/
│               ├── hibernate.cfg.xml
│               └── logback.xml
├── commander/
│   ├── README.md
│   ├── etc/
│   │   └── commander.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── commander/
│       │                   ├── AppAllCases.java
│       │                   ├── Commander.java
│       │                   ├── Database.java
│       │                   ├── Order.java
│       │                   ├── Retry.java
│       │                   ├── RetryParams.java
│       │                   ├── Service.java
│       │                   ├── TimeLimits.java
│       │                   ├── User.java
│       │                   ├── employeehandle/
│       │                   │   ├── EmployeeDatabase.java
│       │                   │   └── EmployeeHandle.java
│       │                   ├── exceptions/
│       │                   │   ├── DatabaseUnavailableException.java
│       │                   │   ├── IsEmptyException.java
│       │                   │   ├── ItemUnavailableException.java
│       │                   │   ├── PaymentDetailsErrorException.java
│       │                   │   └── ShippingNotPossibleException.java
│       │                   ├── messagingservice/
│       │                   │   ├── MessagingDatabase.java
│       │                   │   └── MessagingService.java
│       │                   ├── paymentservice/
│       │                   │   ├── PaymentDatabase.java
│       │                   │   └── PaymentService.java
│       │                   ├── queue/
│       │                   │   ├── Queue.java
│       │                   │   ├── QueueDatabase.java
│       │                   │   └── QueueTask.java
│       │                   └── shippingservice/
│       │                       ├── ShippingDatabase.java
│       │                       └── ShippingService.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── commander/
│                           ├── CommanderTest.java
│                           └── RetryTest.java
├── component/
│   ├── README.md
│   ├── etc/
│   │   ├── component.uml.puml
│   │   └── component.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── component/
│       │                   ├── App.java
│       │                   ├── GameObject.java
│       │                   └── component/
│       │                       ├── graphiccomponent/
│       │                       │   ├── GraphicComponent.java
│       │                       │   └── ObjectGraphicComponent.java
│       │                       ├── inputcomponent/
│       │                       │   ├── DemoInputComponent.java
│       │                       │   ├── InputComponent.java
│       │                       │   └── PlayerInputComponent.java
│       │                       └── physiccomponent/
│       │                           ├── ObjectPhysicComponent.java
│       │                           └── PhysicComponent.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── component/
│                           ├── AppTest.java
│                           └── GameObjectTest.java
├── composite/
│   ├── README.md
│   ├── etc/
│   │   └── composite.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── composite/
│       │                   ├── App.java
│       │                   ├── Letter.java
│       │                   ├── LetterComposite.java
│       │                   ├── Messenger.java
│       │                   ├── Sentence.java
│       │                   └── Word.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── composite/
│                           ├── AppTest.java
│                           └── MessengerTest.java
├── composite-entity/
│   ├── README.md
│   ├── etc/
│   │   └── composite-entity.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── compositeentity/
│       │                   ├── App.java
│       │                   ├── CoarseGrainedObject.java
│       │                   ├── CompositeEntity.java
│       │                   ├── ConsoleCoarseGrainedObject.java
│       │                   ├── DependentObject.java
│       │                   ├── MessageDependentObject.java
│       │                   └── SignalDependentObject.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── compositeentity/
│                           ├── AppTest.java
│                           └── PersistenceTest.java
├── composite-view/
│   ├── README.md
│   ├── etc/
│   │   └── composite-view.urm.puml
│   ├── pom.xml
│   ├── src/
│   │   ├── main/
│   │   │   └── java/
│   │   │       └── com/
│   │   │           └── iluwatar/
│   │   │               └── compositeview/
│   │   │                   ├── AppServlet.java
│   │   │                   └── ClientPropertiesBean.java
│   │   └── test/
│   │       └── java/
│   │           └── com/
│   │               └── iluwatar/
│   │                   └── compositeview/
│   │                       ├── AppServletTest.java
│   │                       └── JavaBeansTest.java
│   └── web/
│       ├── WEB-INF/
│       │   └── web.xml
│       ├── businessNews.jsp
│       ├── header.jsp
│       ├── index.jsp
│       ├── localNews.jsp
│       ├── newsDisplay.jsp
│       ├── scienceNews.jsp
│       ├── sportsNews.jsp
│       └── worldNews.jsp
├── context-object/
│   ├── README.md
│   ├── etc/
│   │   └── context-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── context/
│       │                   └── object/
│       │                       ├── App.java
│       │                       ├── LayerA.java
│       │                       ├── LayerB.java
│       │                       ├── LayerC.java
│       │                       ├── ServiceContext.java
│       │                       └── ServiceContextFactory.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── contect/
│                           └── object/
│                               ├── AppTest.java
│                               └── ServiceContextTest.java
├── converter/
│   ├── README.md
│   ├── etc/
│   │   ├── Converter.ucls
│   │   └── converter.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── converter/
│       │                   ├── App.java
│       │                   ├── Converter.java
│       │                   ├── User.java
│       │                   ├── UserConverter.java
│       │                   └── UserDto.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── converter/
│                           ├── AppTest.java
│                           └── ConverterTest.java
├── curiously-recurring-template-pattern/
│   ├── README.md
│   ├── etc/
│   │   └── curiously-recurring-template-pattern.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── crtp/
│       │           ├── App.java
│       │           ├── Fighter.java
│       │           ├── MmaBantamweightFighter.java
│       │           ├── MmaFighter.java
│       │           ├── MmaHeavyweightFighter.java
│       │           └── MmaLightweightFighter.java
│       └── test/
│           └── java/
│               └── crtp/
│                   ├── AppTest.java
│                   └── FightTest.java
├── currying/
│   ├── README.md
│   ├── etc/
│   │   └── currying.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── currying/
│       │                   ├── App.java
│       │                   ├── Book.java
│       │                   └── Genre.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── currying/
│                           ├── AppTest.java
│                           └── BookCurryingTest.java
├── dao-factory/
│   ├── README.md
│   ├── etc/
│   │   └── dao-factory.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── daofactory/
│       │   │               ├── App.java
│       │   │               ├── CustomException.java
│       │   │               ├── Customer.java
│       │   │               ├── CustomerDAO.java
│       │   │               ├── DAOFactory.java
│       │   │               ├── DAOFactoryProvider.java
│       │   │               ├── DataSourceType.java
│       │   │               ├── FlatFileCustomerDAO.java
│       │   │               ├── FlatFileDataSourceFactory.java
│       │   │               ├── H2CustomerDAO.java
│       │   │               ├── H2DataSourceFactory.java
│       │   │               ├── MongoCustomerDAO.java
│       │   │               └── MongoDataSourceFactory.java
│       │   └── resources/
│       │       └── logback.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── daofactory/
│                           ├── AppTest.java
│                           ├── DAOFactoryTest.java
│                           ├── FlatFileCustomerDAOTest.java
│                           ├── H2CustomerDAOTest.java
│                           └── MongoCustomerDAOTest.java
├── data-access-object/
│   ├── README.md
│   ├── etc/
│   │   ├── dao.ucls
│   │   ├── dao.urm.puml
│   │   └── data-access-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── dao/
│       │                   ├── App.java
│       │                   ├── CustomException.java
│       │                   ├── Customer.java
│       │                   ├── CustomerDao.java
│       │                   ├── CustomerSchemaSql.java
│       │                   ├── DbCustomerDao.java
│       │                   └── InMemoryCustomerDao.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── dao/
│                           ├── AppTest.java
│                           ├── CustomerTest.java
│                           ├── DbCustomerDaoTest.java
│                           └── InMemoryCustomerDaoTest.java
├── data-bus/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   └── data-bus.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── databus/
│       │                   ├── AbstractDataType.java
│       │                   ├── App.java
│       │                   ├── DataBus.java
│       │                   ├── DataType.java
│       │                   ├── Member.java
│       │                   ├── data/
│       │                   │   ├── MessageData.java
│       │                   │   ├── StartingData.java
│       │                   │   └── StoppingData.java
│       │                   └── members/
│       │                       ├── MessageCollectorMember.java
│       │                       └── StatusMember.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── databus/
│                           ├── DataBusTest.java
│                           └── members/
│                               ├── MessageCollectorMemberTest.java
│                               └── StatusMemberTest.java
├── data-locality/
│   ├── README.md
│   ├── etc/
│   │   └── data-locality.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── data/
│       │                   └── locality/
│       │                       ├── Application.java
│       │                       └── game/
│       │                           ├── GameEntity.java
│       │                           └── component/
│       │                               ├── AiComponent.java
│       │                               ├── Component.java
│       │                               ├── PhysicsComponent.java
│       │                               ├── RenderComponent.java
│       │                               └── manager/
│       │                                   ├── AiComponentManager.java
│       │                                   ├── PhysicsComponentManager.java
│       │                                   └── RenderComponentManager.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── data/
│                           └── locality/
│                               └── ApplicationTest.java
├── data-mapper/
│   ├── README.md
│   ├── etc/
│   │   ├── data-mapper.ucls
│   │   └── data-mapper.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── datamapper/
│       │                   ├── App.java
│       │                   ├── DataMapperException.java
│       │                   ├── Student.java
│       │                   ├── StudentDataMapper.java
│       │                   └── StudentDataMapperImpl.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── datamapper/
│                           ├── AppTest.java
│                           ├── DataMapperTest.java
│                           └── StudentTest.java
├── data-transfer-object/
│   ├── README.md
│   ├── etc/
│   │   ├── data-transfer-object.ucls
│   │   └── data-transfer-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── datatransfer/
│       │                   ├── App.java
│       │                   ├── customer/
│       │                   │   ├── CustomerDto.java
│       │                   │   └── CustomerResource.java
│       │                   └── product/
│       │                       ├── Product.java
│       │                       ├── ProductDto.java
│       │                       └── ProductResource.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── datatransfer/
│                           ├── AppTest.java
│                           └── customer/
│                               └── CustomerResourceTest.java
├── decorator/
│   ├── README.md
│   ├── etc/
│   │   └── decorator.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── decorator/
│       │                   ├── App.java
│       │                   ├── ClubbedTroll.java
│       │                   ├── SimpleTroll.java
│       │                   └── Troll.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── decorator/
│                           ├── AppTest.java
│                           ├── ClubbedTrollTest.java
│                           └── SimpleTrollTest.java
├── delegation/
│   ├── README.md
│   ├── etc/
│   │   ├── delegation.ucls
│   │   └── delegation.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── delegation/
│       │                   └── simple/
│       │                       ├── App.java
│       │                       ├── Printer.java
│       │                       ├── PrinterController.java
│       │                       └── printers/
│       │                           ├── CanonPrinter.java
│       │                           ├── EpsonPrinter.java
│       │                           └── HpPrinter.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── delegation/
│                           └── simple/
│                               ├── AppTest.java
│                               └── DelegateTest.java
├── dependency-injection/
│   ├── README.md
│   ├── etc/
│   │   ├── dependency-injection.ucls
│   │   └── dependency-injection.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── dependency/
│       │                   └── injection/
│       │                       ├── AdvancedSorceress.java
│       │                       ├── AdvancedWizard.java
│       │                       ├── App.java
│       │                       ├── GuiceWizard.java
│       │                       ├── OldTobyTobacco.java
│       │                       ├── RivendellTobacco.java
│       │                       ├── SecondBreakfastTobacco.java
│       │                       ├── SimpleWizard.java
│       │                       ├── Tobacco.java
│       │                       ├── TobaccoModule.java
│       │                       └── Wizard.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── dependency/
│                           └── injection/
│                               ├── AdvancedSorceressTest.java
│                               ├── AdvancedWizardTest.java
│                               ├── AppTest.java
│                               ├── GuiceWizardTest.java
│                               ├── SimpleWizardTest.java
│                               └── utils/
│                                   └── InMemoryAppender.java
├── dirty-flag/
│   ├── README.md
│   ├── etc/
│   │   ├── dirty-flag.ucls
│   │   └── dirty-flag.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── dirtyflag/
│       │   │               ├── App.java
│       │   │               ├── DataFetcher.java
│       │   │               └── World.java
│       │   └── resources/
│       │       └── world.txt
│       └── test/
│           └── java/
│               └── org/
│                   └── dirty/
│                       └── flag/
│                           ├── AppTest.java
│                           └── DirtyFlagTest.java
├── domain-model/
│   ├── README.md
│   ├── etc/
│   │   └── domain-model.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── domainmodel/
│       │                   ├── App.java
│       │                   ├── Customer.java
│       │                   ├── CustomerDao.java
│       │                   ├── CustomerDaoImpl.java
│       │                   ├── Product.java
│       │                   ├── ProductDao.java
│       │                   └── ProductDaoImpl.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── domainmodel/
│                           ├── AppTest.java
│                           ├── CustomerDaoImplTest.java
│                           ├── CustomerTest.java
│                           ├── ProductDaoImplTest.java
│                           ├── ProductTest.java
│                           └── TestUtils.java
├── double-buffer/
│   ├── README.md
│   ├── etc/
│   │   └── double-buffer.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── doublebuffer/
│       │                   ├── App.java
│       │                   ├── Buffer.java
│       │                   ├── FrameBuffer.java
│       │                   ├── Pixel.java
│       │                   └── Scene.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── doublebuffer/
│                           ├── AppTest.java
│                           ├── FrameBufferTest.java
│                           └── SceneTest.java
├── double-checked-locking/
│   ├── README.md
│   ├── etc/
│   │   ├── double-checked-locking.ucls
│   │   └── double-checked-locking.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── doublechecked/
│       │   │               └── locking/
│       │   │                   ├── App.java
│       │   │                   ├── Inventory.java
│       │   │                   └── Item.java
│       │   └── resources/
│       │       └── logback.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── doublechecked/
│                           └── locking/
│                               ├── AppTest.java
│                               └── InventoryTest.java
├── double-dispatch/
│   ├── README.md
│   ├── etc/
│   │   ├── double-dispatch.ucls
│   │   └── double-dispatch.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── doubledispatch/
│       │                   ├── App.java
│       │                   ├── FlamingAsteroid.java
│       │                   ├── GameObject.java
│       │                   ├── Meteoroid.java
│       │                   ├── Rectangle.java
│       │                   ├── SpaceStationIss.java
│       │                   ├── SpaceStationMir.java
│       │                   └── constants/
│       │                       └── AppConstants.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── doubledispatch/
│                           ├── AppTest.java
│                           ├── CollisionTest.java
│                           ├── FlamingAsteroidTest.java
│                           ├── MeteoroidTest.java
│                           ├── RectangleTest.java
│                           ├── SpaceStationIssTest.java
│                           └── SpaceStationMirTest.java
├── dynamic-proxy/
│   ├── README.md
│   ├── etc/
│   │   └── dynamic-proxy.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── dynamicproxy/
│       │                   ├── Album.java
│       │                   ├── AlbumInvocationHandler.java
│       │                   ├── AlbumService.java
│       │                   ├── App.java
│       │                   └── tinyrestclient/
│       │                       ├── JsonUtil.java
│       │                       ├── TinyRestClient.java
│       │                       └── annotation/
│       │                           ├── Body.java
│       │                           ├── Delete.java
│       │                           ├── Get.java
│       │                           ├── Http.java
│       │                           ├── Path.java
│       │                           ├── Post.java
│       │                           └── Put.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── dynamicproxy/
│                           └── AppTest.java
├── event-aggregator/
│   ├── README.md
│   ├── etc/
│   │   ├── classes.ucls
│   │   └── event-aggregator.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── event/
│       │                   └── aggregator/
│       │                       ├── App.java
│       │                       ├── Event.java
│       │                       ├── EventEmitter.java
│       │                       ├── EventObserver.java
│       │                       ├── KingJoffrey.java
│       │                       ├── KingsHand.java
│       │                       ├── LordBaelish.java
│       │                       ├── LordVarys.java
│       │                       ├── Scout.java
│       │                       └── Weekday.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── event/
│                           └── aggregator/
│                               ├── AppTest.java
│                               ├── EventEmitterTest.java
│                               ├── EventTest.java
│                               ├── KingJoffreyTest.java
│                               ├── KingsHandTest.java
│                               ├── LordBaelishTest.java
│                               ├── LordVarysTest.java
│                               ├── ScoutTest.java
│                               └── WeekdayTest.java
├── event-based-asynchronous/
│   ├── README.md
│   ├── etc/
│   │   ├── event-asynchronous.ucls
│   │   ├── event-asynchronous.urm.puml
│   │   └── event-based-asynchronous.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── event/
│       │   │               └── asynchronous/
│       │   │                   ├── App.java
│       │   │                   ├── AsyncEvent.java
│       │   │                   ├── Event.java
│       │   │                   ├── EventDoesNotExistException.java
│       │   │                   ├── EventManager.java
│       │   │                   ├── InvalidOperationException.java
│       │   │                   ├── LongRunningEventException.java
│       │   │                   ├── MaxNumOfEventsAllowedException.java
│       │   │                   └── ThreadCompleteListener.java
│       │   └── resources/
│       │       └── config.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── event/
│                           └── asynchronous/
│                               ├── AppTest.java
│                               └── EventAsynchronousTest.java
├── event-driven-architecture/
│   ├── README.md
│   ├── etc/
│   │   ├── eda.ucls
│   │   └── event-driven-architecture.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── eda/
│       │                   ├── App.java
│       │                   ├── event/
│       │                   │   ├── AbstractEvent.java
│       │                   │   ├── UserCreatedEvent.java
│       │                   │   └── UserUpdatedEvent.java
│       │                   ├── framework/
│       │                   │   ├── Event.java
│       │                   │   ├── EventDispatcher.java
│       │                   │   └── Handler.java
│       │                   ├── handler/
│       │                   │   ├── UserCreatedEventHandler.java
│       │                   │   └── UserUpdatedEventHandler.java
│       │                   └── model/
│       │                       └── User.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── eda/
│                           ├── AppTest.java
│                           ├── event/
│                           │   └── UserCreatedEventTest.java
│                           └── framework/
│                               └── EventDispatcherTest.java
├── event-queue/
│   ├── README.md
│   ├── etc/
│   │   ├── Bass-Drum-1.aif
│   │   ├── Closed-Hi-Hat-1.aif
│   │   └── event-queue.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── event/
│       │                   └── queue/
│       │                       ├── App.java
│       │                       ├── Audio.java
│       │                       └── PlayMessage.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── event/
│                           └── queue/
│                               └── AudioTest.java
├── event-sourcing/
│   ├── README.md
│   ├── etc/
│   │   ├── event-sourcing.ucls
│   │   └── event-sourcing.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── event/
│       │                   └── sourcing/
│       │                       ├── app/
│       │                       │   └── App.java
│       │                       ├── domain/
│       │                       │   └── Account.java
│       │                       ├── event/
│       │                       │   ├── AccountCreateEvent.java
│       │                       │   ├── DomainEvent.java
│       │                       │   ├── MoneyDepositEvent.java
│       │                       │   └── MoneyTransferEvent.java
│       │                       ├── processor/
│       │                       │   ├── DomainEventProcessor.java
│       │                       │   ├── EventJournal.java
│       │                       │   └── JsonFileJournal.java
│       │                       └── state/
│       │                           └── AccountAggregate.java
│       └── test/
│           └── java/
│               └── IntegrationTest.java
├── execute-around/
│   ├── README.md
│   ├── etc/
│   │   ├── execute-around.ucls
│   │   └── execute-around.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── execute/
│       │                   └── around/
│       │                       ├── App.java
│       │                       ├── FileWriterAction.java
│       │                       └── SimpleFileWriter.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── execute/
│                           └── around/
│                               ├── AppTest.java
│                               └── SimpleFileWriterTest.java
├── extension-objects/
│   ├── README.md
│   ├── etc/
│   │   ├── extension-objects.urm.puml
│   │   └── extension_obj.ucls
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       ├── App.java
│       │       ├── abstractextensions/
│       │       │   ├── CommanderExtension.java
│       │       │   ├── SergeantExtension.java
│       │       │   ├── SoldierExtension.java
│       │       │   └── UnitExtension.java
│       │       ├── concreteextensions/
│       │       │   ├── Commander.java
│       │       │   ├── Sergeant.java
│       │       │   └── Soldier.java
│       │       └── units/
│       │           ├── CommanderUnit.java
│       │           ├── SergeantUnit.java
│       │           ├── SoldierUnit.java
│       │           └── Unit.java
│       └── test/
│           └── java/
│               ├── AppTest.java
│               ├── concreteextensions/
│               │   ├── CommanderTest.java
│               │   ├── SergeantTest.java
│               │   └── SoldierTest.java
│               └── units/
│                   ├── CommanderUnitTest.java
│                   ├── SergeantUnitTest.java
│                   ├── SoldierUnitTest.java
│                   └── UnitTest.java
├── facade/
│   ├── README.md
│   ├── etc/
│   │   └── facade.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── facade/
│       │                   ├── App.java
│       │                   ├── DwarvenCartOperator.java
│       │                   ├── DwarvenGoldDigger.java
│       │                   ├── DwarvenGoldmineFacade.java
│       │                   ├── DwarvenMineWorker.java
│       │                   └── DwarvenTunnelDigger.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── facade/
│                           ├── AppTest.java
│                           └── DwarvenGoldmineFacadeTest.java
├── factory/
│   ├── README.md
│   ├── etc/
│   │   └── factory.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── factory/
│       │                   ├── App.java
│       │                   ├── Coin.java
│       │                   ├── CoinFactory.java
│       │                   ├── CoinType.java
│       │                   ├── CopperCoin.java
│       │                   └── GoldCoin.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── factory/
│                           ├── AppTest.java
│                           └── CoinFactoryTest.java
├── factory-kit/
│   ├── README.md
│   ├── etc/
│   │   ├── factory-kit.ucls
│   │   └── factory-kit.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── factorykit/
│       │                   ├── App.java
│       │                   ├── Axe.java
│       │                   ├── Bow.java
│       │                   ├── Builder.java
│       │                   ├── Spear.java
│       │                   ├── Sword.java
│       │                   ├── Weapon.java
│       │                   ├── WeaponFactory.java
│       │                   └── WeaponType.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── factorykit/
│                           ├── app/
│                           │   └── AppTest.java
│                           └── factorykit/
│                               └── FactoryKitTest.java
├── factory-method/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   └── factory-method.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── factory/
│       │                   └── method/
│       │                       ├── App.java
│       │                       ├── Blacksmith.java
│       │                       ├── ElfBlacksmith.java
│       │                       ├── ElfWeapon.java
│       │                       ├── OrcBlacksmith.java
│       │                       ├── OrcWeapon.java
│       │                       ├── Weapon.java
│       │                       └── WeaponType.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── factory/
│                           └── method/
│                               ├── AppTest.java
│                               └── FactoryMethodTest.java
├── fanout-fanin/
│   ├── README.md
│   ├── etc/
│   │   └── fanout-fanin.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── fanout/
│       │                   └── fanin/
│       │                       ├── App.java
│       │                       ├── Consumer.java
│       │                       ├── FanOutFanIn.java
│       │                       └── SquareNumberRequest.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── fanout/
│                           └── fanin/
│                               ├── AppTest.java
│                               ├── FanOutFanInTest.java
│                               └── SquareNumberRequestTest.java
├── feature-toggle/
│   ├── README.md
│   ├── etc/
│   │   ├── feature-toggle.ucls
│   │   └── feature-toggle.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── featuretoggle/
│       │                   ├── App.java
│       │                   ├── pattern/
│       │                   │   ├── Service.java
│       │                   │   ├── propertiesversion/
│       │                   │   │   └── PropertiesFeatureToggleVersion.java
│       │                   │   └── tieredversion/
│       │                   │       └── TieredFeatureToggleVersion.java
│       │                   └── user/
│       │                       ├── User.java
│       │                       └── UserGroup.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── featuretoggle/
│                           ├── pattern/
│                           │   ├── propertiesversion/
│                           │   │   └── PropertiesFeatureToggleVersionTest.java
│                           │   └── tieredversion/
│                           │       └── TieredFeatureToggleVersionTest.java
│                           └── user/
│                               └── UserGroupTest.java
├── filterer/
│   ├── README.md
│   ├── etc/
│   │   └── filterer.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── filterer/
│       │                   ├── App.java
│       │                   ├── domain/
│       │                   │   └── Filterer.java
│       │                   └── threat/
│       │                       ├── ProbabilisticThreatAwareSystem.java
│       │                       ├── ProbableThreat.java
│       │                       ├── SimpleProbabilisticThreatAwareSystem.java
│       │                       ├── SimpleProbableThreat.java
│       │                       ├── SimpleThreat.java
│       │                       ├── SimpleThreatAwareSystem.java
│       │                       ├── Threat.java
│       │                       ├── ThreatAwareSystem.java
│       │                       └── ThreatType.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── filterer/
│                           ├── AppTest.java
│                           └── threat/
│                               ├── SimpleProbabilisticThreatAwareSystemTest.java
│                               └── SimpleThreatAwareSystemTest.java
├── fluent-interface/
│   ├── README.md
│   ├── etc/
│   │   ├── fluent-interface.urm.puml
│   │   ├── fluentinterface.ucls
│   │   └── fluentinterface.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── fluentinterface/
│       │                   ├── app/
│       │                   │   └── App.java
│       │                   └── fluentiterable/
│       │                       ├── FluentIterable.java
│       │                       ├── lazy/
│       │                       │   ├── DecoratingIterator.java
│       │                       │   └── LazyFluentIterable.java
│       │                       └── simple/
│       │                           └── SimpleFluentIterable.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── fluentinterface/
│                           ├── app/
│                           │   └── AppTest.java
│                           └── fluentiterable/
│                               ├── FluentIterableTest.java
│                               ├── lazy/
│                               │   └── LazyFluentIterableTest.java
│                               └── simple/
│                                   └── SimpleFluentIterableTest.java
├── flux/
│   ├── README.md
│   ├── etc/
│   │   ├── flux.ucls
│   │   └── flux.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── flux/
│       │                   ├── action/
│       │                   │   ├── Action.java
│       │                   │   ├── ActionType.java
│       │                   │   ├── Content.java
│       │                   │   ├── ContentAction.java
│       │                   │   ├── MenuAction.java
│       │                   │   └── MenuItem.java
│       │                   ├── app/
│       │                   │   └── App.java
│       │                   ├── dispatcher/
│       │                   │   └── Dispatcher.java
│       │                   ├── store/
│       │                   │   ├── ContentStore.java
│       │                   │   ├── MenuStore.java
│       │                   │   └── Store.java
│       │                   └── view/
│       │                       ├── ContentView.java
│       │                       ├── MenuView.java
│       │                       └── View.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── flux/
│                           ├── action/
│                           │   ├── ContentTest.java
│                           │   └── MenuItemTest.java
│                           ├── app/
│                           │   └── AppTest.java
│                           ├── dispatcher/
│                           │   └── DispatcherTest.java
│                           ├── store/
│                           │   ├── ContentStoreTest.java
│                           │   └── MenuStoreTest.java
│                           └── view/
│                               ├── ContentViewTest.java
│                               └── MenuViewTest.java
├── flyweight/
│   ├── README.md
│   ├── etc/
│   │   └── flyweight.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── flyweight/
│       │                   ├── AlchemistShop.java
│       │                   ├── App.java
│       │                   ├── HealingPotion.java
│       │                   ├── HolyWaterPotion.java
│       │                   ├── InvisibilityPotion.java
│       │                   ├── PoisonPotion.java
│       │                   ├── Potion.java
│       │                   ├── PotionFactory.java
│       │                   ├── PotionType.java
│       │                   └── StrengthPotion.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── flyweight/
│                           ├── AlchemistShopTest.java
│                           └── AppTest.java
├── front-controller/
│   ├── README.md
│   ├── etc/
│   │   ├── front-controller.ucls
│   │   └── front-controller.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── front/
│       │                   └── controller/
│       │                       ├── App.java
│       │                       ├── ApplicationException.java
│       │                       ├── ArcherCommand.java
│       │                       ├── ArcherView.java
│       │                       ├── CatapultCommand.java
│       │                       ├── CatapultView.java
│       │                       ├── Command.java
│       │                       ├── Dispatcher.java
│       │                       ├── ErrorView.java
│       │                       ├── FrontController.java
│       │                       ├── UnknownCommand.java
│       │                       └── View.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── front/
│                           └── controller/
│                               ├── AppTest.java
│                               ├── ApplicationExceptionTest.java
│                               ├── CommandTest.java
│                               ├── DispatcherTest.java
│                               ├── FrontControllerTest.java
│                               ├── ViewTest.java
│                               └── utils/
│                                   └── InMemoryAppender.java
├── function-composition/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   ├── function-composition.urm.puml
│   │   └── function.composition.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── function/
│       │                   └── composition/
│       │                       ├── App.java
│       │                       └── FunctionComposer.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── function/
│                           └── composition/
│                               ├── AppTest.java
│                               └── FunctionComposerTest.java
├── game-loop/
│   ├── README.md
│   ├── etc/
│   │   └── game-loop.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── gameloop/
│       │                   ├── App.java
│       │                   ├── Bullet.java
│       │                   ├── FixedStepGameLoop.java
│       │                   ├── FrameBasedGameLoop.java
│       │                   ├── GameController.java
│       │                   ├── GameLoop.java
│       │                   ├── GameStatus.java
│       │                   └── VariableStepGameLoop.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── gameloop/
│                           ├── AppTest.java
│                           ├── FixedStepGameLoopTest.java
│                           ├── FrameBasedGameLoopTest.java
│                           ├── GameControllerTest.java
│                           ├── GameLoopTest.java
│                           └── VariableStepGameLoopTest.java
├── gateway/
│   ├── README.md
│   ├── etc/
│   │   └── gateway.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── gateway/
│       │                   ├── App.java
│       │                   ├── ExternalServiceA.java
│       │                   ├── ExternalServiceB.java
│       │                   ├── ExternalServiceC.java
│       │                   ├── Gateway.java
│       │                   └── GatewayFactory.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── gateway/
│                           ├── AppTest.java
│                           └── ServiceFactoryTest.java
├── guarded-suspension/
│   ├── README.md
│   ├── etc/
│   │   ├── guarded-suspension.ucls
│   │   └── guarded-suspension.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── guarded/
│       │                   └── suspension/
│       │                       ├── App.java
│       │                       └── GuardedQueue.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── guarded/
│                           └── suspension/
│                               └── GuardedQueueTest.java
├── half-sync-half-async/
│   ├── README.md
│   ├── etc/
│   │   ├── half-sync-half-async.ucls
│   │   └── half-sync-half-async.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── halfsynchalfasync/
│       │                   ├── App.java
│       │                   ├── AsyncTask.java
│       │                   └── AsynchronousService.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── halfsynchalfasync/
│                           ├── AppTest.java
│                           └── AsynchronousServiceTest.java
├── health-check/
│   ├── README.md
│   ├── etc/
│   │   ├── health-check.puml
│   │   └── health-check.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── health/
│       │   │               └── check/
│       │   │                   ├── App.java
│       │   │                   ├── AsynchronousHealthChecker.java
│       │   │                   ├── CpuHealthIndicator.java
│       │   │                   ├── CustomHealthIndicator.java
│       │   │                   ├── DatabaseTransactionHealthIndicator.java
│       │   │                   ├── GarbageCollectionHealthIndicator.java
│       │   │                   ├── HealthCheck.java
│       │   │                   ├── HealthCheckInterruptedException.java
│       │   │                   ├── HealthCheckRepository.java
│       │   │                   ├── MemoryHealthIndicator.java
│       │   │                   └── RetryConfig.java
│       │   └── resources/
│       │       └── application.properties
│       └── test/
│           └── java/
│               ├── AppTest.java
│               ├── AsynchronousHealthCheckerTest.java
│               ├── CpuHealthIndicatorTest.java
│               ├── CustomHealthIndicatorTest.java
│               ├── DatabaseTransactionHealthIndicatorTest.java
│               ├── GarbageCollectionHealthIndicatorTest.java
│               ├── HealthCheckRepositoryTest.java
│               ├── HealthEndpointIntegrationTest.java
│               ├── MemoryHealthIndicatorTest.java
│               └── RetryConfigTest.java
├── hexagonal-architecture/
│   ├── README.md
│   ├── etc/
│   │   ├── hexagonal-architecture.urm.puml
│   │   ├── hexagonal.ucls
│   │   └── hexagonal.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── hexagonal/
│       │                   ├── App.java
│       │                   ├── administration/
│       │                   │   ├── ConsoleAdministration.java
│       │                   │   ├── ConsoleAdministrationSrv.java
│       │                   │   └── ConsoleAdministrationSrvImpl.java
│       │                   ├── banking/
│       │                   │   ├── InMemoryBank.java
│       │                   │   ├── MongoBank.java
│       │                   │   └── WireTransfers.java
│       │                   ├── database/
│       │                   │   ├── InMemoryTicketRepository.java
│       │                   │   ├── LotteryTicketRepository.java
│       │                   │   └── MongoTicketRepository.java
│       │                   ├── domain/
│       │                   │   ├── LotteryAdministration.java
│       │                   │   ├── LotteryConstants.java
│       │                   │   ├── LotteryNumbers.java
│       │                   │   ├── LotteryService.java
│       │                   │   ├── LotteryTicket.java
│       │                   │   ├── LotteryTicketCheckResult.java
│       │                   │   ├── LotteryTicketId.java
│       │                   │   ├── LotteryUtils.java
│       │                   │   └── PlayerDetails.java
│       │                   ├── eventlog/
│       │                   │   ├── LotteryEventLog.java
│       │                   │   ├── MongoEventLog.java
│       │                   │   └── StdOutEventLog.java
│       │                   ├── module/
│       │                   │   ├── LotteryModule.java
│       │                   │   └── LotteryTestingModule.java
│       │                   ├── mongo/
│       │                   │   └── MongoConnectionPropertiesLoader.java
│       │                   ├── sampledata/
│       │                   │   └── SampleData.java
│       │                   └── service/
│       │                       ├── ConsoleLottery.java
│       │                       ├── LotteryConsoleService.java
│       │                       └── LotteryConsoleServiceImpl.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── hexagonal/
│                           ├── AppTest.java
│                           ├── banking/
│                           │   ├── InMemoryBankTest.java
│                           │   └── MongoBankTest.java
│                           ├── database/
│                           │   ├── InMemoryTicketRepositoryTest.java
│                           │   └── MongoTicketRepositoryTest.java
│                           ├── domain/
│                           │   ├── LotteryNumbersTest.java
│                           │   ├── LotteryTest.java
│                           │   ├── LotteryTicketCheckResultTest.java
│                           │   ├── LotteryTicketIdTest.java
│                           │   ├── LotteryTicketTest.java
│                           │   └── PlayerDetailsTest.java
│                           ├── eventlog/
│                           │   └── MongoEventLogTest.java
│                           └── test/
│                               └── LotteryTestUtils.java
├── identity-map/
│   ├── README.md
│   ├── etc/
│   │   └── identity-map.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── identitymap/
│       │                   ├── App.java
│       │                   ├── IdNotFoundException.java
│       │                   ├── IdentityMap.java
│       │                   ├── Person.java
│       │                   ├── PersonDbSimulator.java
│       │                   ├── PersonDbSimulatorImplementation.java
│       │                   └── PersonFinder.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── identitymap/
│                           ├── AppTest.java
│                           ├── IdentityMapTest.java
│                           ├── PersonDbSimulatorImplementationTest.java
│                           ├── PersonFinderTest.java
│                           └── PersonTest.java
├── intercepting-filter/
│   ├── README.md
│   ├── etc/
│   │   ├── intercepting-filter.ucls
│   │   └── intercepting-filter.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── intercepting/
│       │                   └── filter/
│       │                       ├── AbstractFilter.java
│       │                       ├── AddressFilter.java
│       │                       ├── App.java
│       │                       ├── Client.java
│       │                       ├── ContactFilter.java
│       │                       ├── DepositFilter.java
│       │                       ├── Filter.java
│       │                       ├── FilterChain.java
│       │                       ├── FilterManager.java
│       │                       ├── NameFilter.java
│       │                       ├── Order.java
│       │                       ├── OrderFilter.java
│       │                       └── Target.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── intercepting/
│                           └── filter/
│                               ├── AppTest.java
│                               ├── FilterManagerTest.java
│                               ├── FilterTest.java
│                               ├── OrderTest.java
│                               └── TargetTest.java
├── interpreter/
│   ├── README.md
│   ├── etc/
│   │   ├── interpreter.ucls
│   │   └── interpreter.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── interpreter/
│       │                   ├── App.java
│       │                   ├── Expression.java
│       │                   ├── MinusExpression.java
│       │                   ├── MultiplyExpression.java
│       │                   ├── NumberExpression.java
│       │                   └── PlusExpression.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── interpreter/
│                           ├── AppTest.java
│                           ├── ExpressionTest.java
│                           ├── MinusExpressionTest.java
│                           ├── MultiplyExpressionTest.java
│                           ├── NumberExpressionTest.java
│                           └── PlusExpressionTest.java
├── iterator/
│   ├── README.md
│   ├── etc/
│   │   ├── iterator.ucls
│   │   └── iterator.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── iterator/
│       │                   ├── App.java
│       │                   ├── Iterator.java
│       │                   ├── bst/
│       │                   │   ├── BstIterator.java
│       │                   │   ├── README.md
│       │                   │   └── TreeNode.java
│       │                   └── list/
│       │                       ├── Item.java
│       │                       ├── ItemType.java
│       │                       ├── TreasureChest.java
│       │                       └── TreasureChestItemIterator.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── iterator/
│                           ├── AppTest.java
│                           ├── bst/
│                           │   └── BstIteratorTest.java
│                           └── list/
│                               └── TreasureChestTest.java
├── layered-architecture/
│   ├── README.md
│   ├── etc/
│   │   ├── layers.ucls
│   │   └── layers.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   ├── com/
│       │   │   │   └── iluwatar/
│       │   │   │       └── layers/
│       │   │   │           ├── Runner.java
│       │   │   │           └── app/
│       │   │   │               └── LayersApp.java
│       │   │   ├── dao/
│       │   │   │   ├── CakeDao.java
│       │   │   │   ├── CakeLayerDao.java
│       │   │   │   └── CakeToppingDao.java
│       │   │   ├── dto/
│       │   │   │   ├── CakeInfo.java
│       │   │   │   ├── CakeLayerInfo.java
│       │   │   │   └── CakeToppingInfo.java
│       │   │   ├── entity/
│       │   │   │   ├── Cake.java
│       │   │   │   ├── CakeLayer.java
│       │   │   │   └── CakeTopping.java
│       │   │   ├── exception/
│       │   │   │   └── CakeBakingException.java
│       │   │   ├── service/
│       │   │   │   ├── CakeBakingService.java
│       │   │   │   └── CakeBakingServiceImpl.java
│       │   │   └── view/
│       │   │       ├── CakeViewImpl.java
│       │   │       └── View.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── logback.xml
│       │       └── application.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── layers/
│                           ├── app/
│                           │   └── LayersAppTests.java
│                           ├── entity/
│                           │   └── CakeTest.java
│                           ├── exception/
│                           │   └── CakeBakingExceptionTest.java
│                           ├── service/
│                           │   └── CakeBakingServiceImplTest.java
│                           └── view/
│                               └── CakeViewImplTest.java
├── lazy-loading/
│   ├── README.md
│   ├── etc/
│   │   ├── lazy-loading.ucls
│   │   └── lazy-loading.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── lazy/
│       │                   └── loading/
│       │                       ├── App.java
│       │                       ├── Heavy.java
│       │                       ├── HolderNaive.java
│       │                       ├── HolderThreadSafe.java
│       │                       └── Java8Holder.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── lazy/
│                           └── loading/
│                               ├── AbstractHolderTest.java
│                               ├── AppTest.java
│                               ├── HolderNaiveTest.java
│                               ├── HolderThreadSafeTest.java
│                               └── Java8HolderTest.java
├── leader-election/
│   ├── README.md
│   ├── etc/
│   │   └── leader-election.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── leaderelection/
│       │                   ├── AbstractInstance.java
│       │                   ├── AbstractMessageManager.java
│       │                   ├── Instance.java
│       │                   ├── Message.java
│       │                   ├── MessageManager.java
│       │                   ├── MessageType.java
│       │                   ├── bully/
│       │                   │   ├── BullyApp.java
│       │                   │   ├── BullyInstance.java
│       │                   │   └── BullyMessageManager.java
│       │                   └── ring/
│       │                       ├── RingApp.java
│       │                       ├── RingInstance.java
│       │                       └── RingMessageManager.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── leaderelection/
│                           ├── MessageTest.java
│                           ├── bully/
│                           │   ├── BullyAppTest.java
│                           │   ├── BullyMessageManagerTest.java
│                           │   └── BullyinstanceTest.java
│                           └── ring/
│                               ├── RingAppTest.java
│                               ├── RingInstanceTest.java
│                               └── RingMessageManagerTest.java
├── leader-followers/
│   ├── README.md
│   ├── etc/
│   │   └── leader-followers.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── leaderfollowers/
│       │                   ├── App.java
│       │                   ├── Task.java
│       │                   ├── TaskHandler.java
│       │                   ├── TaskSet.java
│       │                   ├── WorkCenter.java
│       │                   └── Worker.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── leaderfollowers/
│                           ├── AppTest.java
│                           ├── TaskHandlerTest.java
│                           ├── TaskSetTest.java
│                           └── WorkCenterTest.java
├── lgpl-3.0.txt
├── localization/
│   ├── ar/
│   │   ├── README.md
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   └── README.md
│   │   ├── acyclic-visitor/
│   │   │   └── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── aggregator-microservices/
│   │   │   └── README.md
│   │   ├── ambassador/
│   │   │   └── README.md
│   │   ├── api-gateway/
│   │   │   └── README.md
│   │   ├── arrange-act-assert/
│   │   │   └── README.md
│   │   ├── async-method-invocation/
│   │   │   └── README.md
│   │   ├── balking/
│   │   │   └── README.md
│   │   ├── bridge/
│   │   │   └── README.md
│   │   ├── builder/
│   │   │   └── README.md
│   │   ├── business-delegate/
│   │   │   └── README.md
│   │   ├── bytecode/
│   │   │   └── README.md
│   │   ├── chain-of-responsibility/
│   │   │   └── README.md
│   │   ├── client-session/
│   │   │   └── README.md
│   │   ├── collecting-parameter/
│   │   │   └── README.md
│   │   ├── command/
│   │   │   └── README.md
│   │   ├── commander/
│   │   │   └── README.md
│   │   ├── composite/
│   │   │   └── README.md
│   │   ├── composite-entity/
│   │   │   └── README.md
│   │   ├── composite-view/
│   │   │   └── README.md
│   │   ├── context-object/
│   │   │   └── README.md
│   │   ├── converter/
│   │   │   └── README.md
│   │   ├── crtp/
│   │   │   └── README.md
│   │   ├── data-locality/
│   │   │   └── README.md
│   │   ├── decorator/
│   │   │   └── README.md
│   │   ├── delegation/
│   │   │   └── README.md
│   │   ├── dependency-injection/
│   │   │   └── README.md
│   │   ├── dirty-flag/
│   │   │   └── README.md
│   │   ├── double-buffer/
│   │   │   └── README.md
│   │   ├── embedded-value/
│   │   │   └── README.md
│   │   ├── event-aggregator/
│   │   │   └── README.md
│   │   ├── extension-objects/
│   │   │   └── README.md
│   │   ├── facade/
│   │   │   └── README.md
│   │   └── factory/
│   │       └── README.md
│   ├── bn/
│   │   └── README.md
│   ├── da/
│   │   └── README.md
│   ├── de/
│   │   ├── README.md
│   │   └── abstract-document/
│   │       └── README.md
│   ├── el/
│   │   └── README.md
│   ├── es/
│   │   ├── README.md
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   └── README.md
│   │   ├── acyclic-visitor/
│   │   │   └── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── aggregator-microservices/
│   │   │   └── README.md
│   │   ├── ambassador/
│   │   │   └── README.md
│   │   ├── api-gateway/
│   │   │   └── README.md
│   │   ├── arrange-act-assert/
│   │   │   └── README.md
│   │   ├── async-method-invocation/
│   │   │   └── README.md
│   │   ├── balking/
│   │   │   └── README.md
│   │   ├── bridge/
│   │   │   └── README.md
│   │   ├── builder/
│   │   │   └── README.md
│   │   ├── business-delegate/
│   │   │   └── README.md
│   │   ├── bytecode/
│   │   │   └── README.md
│   │   ├── chain-of-responsibility/
│   │   │   └── README.md
│   │   ├── client-session/
│   │   │   └── README.md
│   │   ├── collecting-parameter/
│   │   │   └── README.md
│   │   ├── command/
│   │   │   └── README.md
│   │   ├── commander/
│   │   │   └── README.md
│   │   ├── composite/
│   │   │   └── README.md
│   │   ├── composite-entity/
│   │   │   └── README.md
│   │   ├── composite-view/
│   │   │   └── README.md
│   │   ├── context-object/
│   │   │   └── README.md
│   │   ├── converter/
│   │   │   └── README.md
│   │   ├── crtp/
│   │   │   └── README.md
│   │   ├── data-locality/
│   │   │   └── README.md
│   │   ├── decorator/
│   │   │   └── README.md
│   │   ├── delegation/
│   │   │   └── README.md
│   │   ├── dependency-injection/
│   │   │   └── README.md
│   │   ├── dirty-flag/
│   │   │   └── README.md
│   │   ├── double-buffer/
│   │   │   └── README.md
│   │   ├── embedded-value/
│   │   │   └── README.md
│   │   ├── event-aggregator/
│   │   │   └── README.md
│   │   ├── extension-objects/
│   │   │   └── README.md
│   │   ├── facade/
│   │   │   └── README.md
│   │   ├── factory/
│   │   │   └── README.md
│   │   ├── factory-kit/
│   │   │   └── README.md
│   │   ├── factory-method/
│   │   │   └── README.md
│   │   ├── feature-toggle/
│   │   │   └── README.md
│   │   ├── flux/
│   │   │   └── README.md
│   │   ├── flyweight/
│   │   │   └── README.md
│   │   ├── front-controller/
│   │   │   └── README.md
│   │   ├── game-loop/
│   │   │   └── README.md
│   │   ├── gateway/
│   │   │   └── README.md
│   │   ├── health-check/
│   │   │   └── README.md
│   │   ├── identity-map/
│   │   │   └── README.md
│   │   ├── intercepting-filter/
│   │   │   └── README.md
│   │   ├── interpreter/
│   │   │   └── README.md
│   │   ├── iterator/
│   │   │   └── README.md
│   │   ├── layers/
│   │   │   └── README.md
│   │   ├── lazy-loading/
│   │   │   └── README.md
│   │   ├── leader-election/
│   │   │   └── README.md
│   │   ├── map-reduce/
│   │   │   └── README.md
│   │   ├── marker/
│   │   │   └── README.md
│   │   ├── mediator/
│   │   │   └── README.md
│   │   ├── memento/
│   │   │   └── README.md
│   │   ├── module/
│   │   │   └── README.md
│   │   ├── monostate/
│   │   │   └── README.md
│   │   ├── multiton/
│   │   │   └── README.md
│   │   ├── null-object/
│   │   │   └── README.md
│   │   ├── object-mother/
│   │   │   └── README.md
│   │   ├── object-pool/
│   │   │   └── README.md
│   │   ├── observer/
│   │   │   └── README.md
│   │   ├── page-controller/
│   │   │   └── README.md
│   │   ├── page-object/
│   │   │   └── README.md
│   │   ├── parameter-object/
│   │   │   └── README.md
│   │   ├── partial-response/
│   │   │   └── README.md
│   │   ├── pipeline/
│   │   │   └── README.md
│   │   ├── poison-pill/
│   │   │   └── README.md
│   │   ├── presentation-model/
│   │   │   └── README.md
│   │   ├── priority-queue/
│   │   │   └── README.md
│   │   ├── property/
│   │   │   └── README.md
│   │   ├── prototype/
│   │   │   └── README.md
│   │   ├── proxy/
│   │   │   └── README.md
│   │   ├── registry/
│   │   │   └── README.md
│   │   ├── retry/
│   │   │   └── README.md
│   │   ├── role-object/
│   │   │   └── README.md
│   │   ├── separated-interface/
│   │   │   └── README.md
│   │   ├── servant/
│   │   │   └── README.md
│   │   ├── sharding/
│   │   │   └── README.md
│   │   ├── single-table-inheritance/
│   │   │   └── README.md
│   │   ├── singleton/
│   │   │   └── README.md
│   │   ├── spatial-partition/
│   │   │   └── README.md
│   │   ├── special-case/
│   │   │   └── README.md
│   │   ├── specification/
│   │   │   └── README.md
│   │   ├── state/
│   │   │   └── README.md
│   │   ├── step-builder/
│   │   │   └── README.md
│   │   ├── strangler/
│   │   │   └── README.md
│   │   ├── strategy/
│   │   │   └── README.md
│   │   ├── subclass-sandbox/
│   │   │   └── README.md
│   │   ├── table-module/
│   │   │   └── README.md
│   │   ├── template-method/
│   │   │   └── README.md
│   │   ├── throttling/
│   │   │   └── README.md
│   │   ├── trampoline/
│   │   │   └── README.md
│   │   ├── transaction-script/
│   │   │   └── README.md
│   │   ├── twin/
│   │   │   └── README.md
│   │   ├── typeobjectpattern/
│   │   │   └── README.md
│   │   ├── update-method/
│   │   │   └── README.md
│   │   ├── value-object/
│   │   │   └── README.md
│   │   └── visitor/
│   │       └── README.md
│   ├── fa/
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   ├── README.md
│   │   │   └── etc/
│   │   │       └── active-object.urm.puml
│   │   └── factory/
│   │       └── README.md
│   ├── fr/
│   │   ├── README.md
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   └── README.md
│   │   ├── acyclic-visitore/
│   │   │   └── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── aggregator-microservices/
│   │   │   └── README.md
│   │   ├── ambassador/
│   │   │   └── README.md
│   │   ├── anti-corruption-layer/
│   │   │   └── README.md
│   │   ├── api-gateway/
│   │   │   └── README.md
│   │   ├── arrange-act-assert/
│   │   │   └── README.md
│   │   ├── async-method-invocation/
│   │   │   └── README.md
│   │   ├── balking/
│   │   │   └── README.md
│   │   ├── bridge/
│   │   │   └── README.md
│   │   ├── builder/
│   │   │   └── README.md
│   │   └── business-delegate/
│   │       └── README.md
│   ├── hi/
│   │   ├── README.md
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   └── README.md
│   │   ├── acyclic-visitor/
│   │   │   └── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── aggregator-microservices/
│   │   │   └── README.md
│   │   ├── ambassador/
│   │   │   └── README.md
│   │   ├── api-gateway/
│   │   │   └── README.md
│   │   ├── arrange-act-assert/
│   │   │   └── README.md
│   │   ├── async-method-invocation/
│   │   │   └── README.md
│   │   ├── balking/
│   │   │   └── README.md
│   │   ├── bridge/
│   │   │   └── README.md
│   │   ├── builder/
│   │   │   └── README.md
│   │   ├── business-delegate/
│   │   │   └── README.md
│   │   ├── bytecode/
│   │   │   └── README.md
│   │   ├── caching/
│   │   │   └── README.md
│   │   ├── callback/
│   │   │   └── README.md
│   │   ├── chain-of-responsibility/
│   │   │   └── README.md
│   │   ├── circuit-breaker/
│   │   │   └── README.md
│   │   ├── client-session/
│   │   │   └── README.md
│   │   ├── collecting-parameter/
│   │   │   └── README.md
│   │   ├── collection-pipeline/
│   │   │   └── README.md
│   │   ├── combinator/
│   │   │   └── README.md
│   │   ├── command/
│   │   │   └── README.md
│   │   ├── factory-method/
│   │   │   └── README.md
│   │   └── module/
│   │       └── README.md
│   ├── id/
│   │   ├── README.md
│   │   └── decorator/
│   │       └── README.md
│   ├── it/
│   │   ├── README.md
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   └── README.md
│   │   ├── acyclic-visitor/
│   │   │   └── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── iterator/
│   │   │   └── README.md
│   │   └── observer/
│   │       └── README.md
│   ├── ja/
│   │   ├── README.md
│   │   └── decorator/
│   │       └── README.md
│   ├── ko/
│   │   ├── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── builder/
│   │   │   └── README.md
│   │   ├── callback/
│   │   │   └── README.md
│   │   ├── decorater/
│   │   │   └── README.md
│   │   ├── event-driven-architecture/
│   │   │   └── README.md
│   │   ├── event-sourcing/
│   │   │   └── README.md
│   │   ├── facade/
│   │   │   └── README.md
│   │   ├── factory/
│   │   │   └── README.md
│   │   ├── factory-method/
│   │   │   └── README.md
│   │   ├── iterator/
│   │   │   └── README.md
│   │   ├── observer/
│   │   │   └── README.md
│   │   ├── prototype/
│   │   │   └── README.md
│   │   ├── proxy/
│   │   │   └── README.md
│   │   ├── singleton/
│   │   │   └── README.md
│   │   ├── strategy/
│   │   │   └── README.md
│   │   ├── template-method/
│   │   │   └── README.md
│   │   └── visitor/
│   │       └── README.md
│   ├── mr/
│   │   └── README.md
│   ├── ne/
│   │   └── README.md
│   ├── pt/
│   │   ├── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── builder/
│   │   │   └── README.md
│   │   ├── caching/
│   │   │   └── README.md
│   │   ├── chain-of-responsability/
│   │   │   └── README.md
│   │   ├── facade/
│   │   │   └── README.md
│   │   ├── factory/
│   │   │   └── README.md
│   │   ├── proxy/
│   │   │   └── README.md
│   │   └── singleton/
│   │       └── README.md
│   ├── ru/
│   │   ├── README.md
│   │   └── abstract-factory/
│   │       └── README.md
│   ├── si/
│   │   └── README.md
│   ├── tr/
│   │   ├── README.md
│   │   └── singleton/
│   │       └── README.md
│   ├── ur/
│   │   ├── README.md
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   └── README.md
│   │   └── acyclic-visitor/
│   │       └── README.md
│   ├── vi/
│   │   ├── README.md
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   └── README.md
│   │   ├── acyclic-visitor/
│   │   │   └── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── aggregator-microservices/
│   │   │   └── README.md
│   │   ├── builder/
│   │   │   └── README.md
│   │   └── game-loop/
│   │       └── README.md
│   └── zh/
│       ├── README.md
│       ├── abstract-document/
│       │   └── README.md
│       ├── abstract-factory/
│       │   └── README.md
│       ├── active-object/
│       │   └── README.md
│       ├── acyclic-visitor/
│       │   └── README.md
│       ├── adapter/
│       │   └── README.md
│       ├── aggregator-microservices/
│       │   └── README.md
│       ├── ambassador/
│       │   └── README.md
│       ├── api-gateway/
│       │   └── README.md
│       ├── arrange-act-assert/
│       │   └── README.md
│       ├── async-method-invocation/
│       │   └── README.md
│       ├── balking/
│       │   └── README.md
│       ├── bridge/
│       │   └── README.md
│       ├── builder/
│       │   └── README.md
│       ├── business-delegate/
│       │   └── README.md
│       ├── bytecode/
│       │   └── README.md
│       ├── caching/
│       │   └── README.md
│       ├── callback/
│       │   └── README.md
│       ├── chain/
│       │   └── README.md
│       ├── circuit-breaker/
│       │   └── README.md
│       ├── cloud-static-content-hosting/
│       │   └── README.md
│       ├── collection-pipeline/
│       │   └── README.md
│       ├── combinator/
│       │   └── README.md
│       ├── command/
│       │   └── README.md
│       ├── commander/
│       │   └── README.md
│       ├── composite/
│       │   └── README.md
│       ├── composite-entity/
│       │   └── README.md
│       ├── converter/
│       │   └── README.md
│       ├── crtp/
│       │   └── README.md
│       ├── dao/
│       │   └── README.md
│       ├── data-bus/
│       │   └── README.md
│       ├── data-mapper/
│       │   └── README.md
│       ├── data-transfer-object/
│       │   └── README.md
│       ├── decorator/
│       │   └── README.md
│       ├── delegation/
│       │   └── README.md
│       ├── dependency-injection/
│       │   └── README.md
│       ├── dirty-flag/
│       │   └── README.md
│       ├── double-checked-locking/
│       │   └── README.md
│       ├── facade/
│       │   └── README.md
│       ├── factory/
│       │   └── README.md
│       ├── factory-kit/
│       │   └── README.md
│       ├── factory-method/
│       │   └── README.md
│       ├── interpreter/
│       │   └── README.md
│       ├── iterator/
│       │   └── README.md
│       ├── monitor/
│       │   └── README.md
│       ├── observer/
│       │   └── README.md
│       ├── private-class-data/
│       │   └── README.md
│       ├── producer-consumer/
│       │   └── README.md
│       ├── proxy/
│       │   └── README.md
│       ├── servant/
│       │   └── README.md
│       ├── sharding/
│       │   └── README.md
│       ├── singleton/
│       │   └── README.md
│       ├── state/
│       │   └── README.md
│       ├── step-builder/
│       │   └── README.md
│       ├── strategy/
│       │   └── README.md
│       ├── table-module/
│       │   └── README.md
│       ├── template-method/
│       │   └── README.md
│       ├── trampoline/
│       │   └── README.md
│       ├── unit-of-work/
│       │   └── README.md
│       ├── update-method/
│       │   └── README.md
│       ├── value-object/
│       │   └── README.md
│       ├── version-number/
│       │   └── README.md
│       └── visitor/
│           └── README.md
├── lockable-object/
│   ├── README.md
│   ├── etc/
│   │   └── lockable-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── lockableobject/
│       │                   ├── App.java
│       │                   ├── Lockable.java
│       │                   ├── LockingException.java
│       │                   ├── SwordOfAragorn.java
│       │                   └── domain/
│       │                       ├── Creature.java
│       │                       ├── CreatureStats.java
│       │                       ├── CreatureType.java
│       │                       ├── Elf.java
│       │                       ├── Feind.java
│       │                       ├── Human.java
│       │                       └── Orc.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── lockableobject/
│                           ├── AppTest.java
│                           ├── CreatureTest.java
│                           ├── ExceptionsTest.java
│                           ├── FeindTest.java
│                           ├── SubCreaturesTests.java
│                           └── TheSwordOfAragornTest.java
├── lombok.config
├── map-reduce/
│   ├── README.md
│   ├── etc/
│   │   └── map-reduce.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               ├── Main.java
│       │               ├── MapReduce.java
│       │               ├── Mapper.java
│       │               ├── Reducer.java
│       │               └── Shuffler.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       ├── MapReduceTest.java
│                       ├── MapperTest.java
│                       ├── ReducerTest.java
│                       └── ShufflerTest.java
├── marker-interface/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   ├── MarkerDiagram.ucls
│   │   ├── marker-interface.urm.puml
│   │   └── marker.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       ├── App.java
│       │       ├── Guard.java
│       │       ├── Permission.java
│       │       └── Thief.java
│       └── test/
│           └── java/
│               ├── AppTest.java
│               ├── GuardTest.java
│               └── ThiefTest.java
├── master-worker/
│   ├── README.md
│   ├── etc/
│   │   ├── master-worker-pattern.urm.puml
│   │   └── master-worker.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── masterworker/
│       │                   ├── App.java
│       │                   ├── ArrayInput.java
│       │                   ├── ArrayResult.java
│       │                   ├── ArrayUtilityMethods.java
│       │                   ├── Input.java
│       │                   ├── Result.java
│       │                   └── system/
│       │                       ├── ArrayTransposeMasterWorker.java
│       │                       ├── MasterWorker.java
│       │                       ├── systemmaster/
│       │                       │   ├── ArrayTransposeMaster.java
│       │                       │   └── Master.java
│       │                       └── systemworkers/
│       │                           ├── ArrayTransposeWorker.java
│       │                           └── Worker.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── masterworker/
│                           ├── ArrayInputTest.java
│                           ├── ArrayUtilityMethodsTest.java
│                           └── system/
│                               ├── ArrayTransposeMasterWorkerTest.java
│                               └── systemworkers/
│                                   └── ArrayTransposeWorkerTest.java
├── mediator/
│   ├── README.md
│   ├── etc/
│   │   ├── mediator.ucls
│   │   └── mediator.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── mediator/
│       │                   ├── Action.java
│       │                   ├── App.java
│       │                   ├── Hobbit.java
│       │                   ├── Hunter.java
│       │                   ├── Party.java
│       │                   ├── PartyImpl.java
│       │                   ├── PartyMember.java
│       │                   ├── PartyMemberBase.java
│       │                   ├── Rogue.java
│       │                   └── Wizard.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── mediator/
│                           ├── AppTest.java
│                           ├── PartyImplTest.java
│                           └── PartyMemberTest.java
├── memento/
│   ├── README.md
│   ├── etc/
│   │   ├── memento.ucls
│   │   └── memento.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── memento/
│       │                   ├── App.java
│       │                   ├── Star.java
│       │                   ├── StarMemento.java
│       │                   └── StarType.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── memento/
│                           ├── AppTest.java
│                           └── StarTest.java
├── metadata-mapping/
│   ├── README.md
│   ├── etc/
│   │   ├── metadata-mapping.urm.puml
│   │   └── metamapping.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── metamapping/
│       │   │               ├── App.java
│       │   │               ├── model/
│       │   │               │   └── User.java
│       │   │               ├── service/
│       │   │               │   └── UserService.java
│       │   │               └── utils/
│       │   │                   ├── DatabaseUtil.java
│       │   │                   └── HibernateUtil.java
│       │   └── resources/
│       │       ├── com/
│       │       │   └── iluwatar/
│       │       │       └── metamapping/
│       │       │           └── model/
│       │       │               └── User.hbm.xml
│       │       ├── hibernate.cfg.xml
│       │       └── logback.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── metamapping/
│                           └── AppTest.java
├── microservices-aggregrator/
│   ├── README.md
│   ├── aggregator-service/
│   │   ├── etc/
│   │   │   └── aggregator-service.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── iluwatar/
│   │       │   │           └── aggregator/
│   │       │   │               └── microservices/
│   │       │   │                   ├── Aggregator.java
│   │       │   │                   ├── App.java
│   │       │   │                   ├── Product.java
│   │       │   │                   ├── ProductInformationClient.java
│   │       │   │                   ├── ProductInformationClientImpl.java
│   │       │   │                   ├── ProductInventoryClient.java
│   │       │   │                   └── ProductInventoryClientImpl.java
│   │       │   └── resources/
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── iluwatar/
│   │                       └── aggregator/
│   │                           └── microservices/
│   │                               └── AggregatorTest.java
│   ├── etc/
│   │   ├── aggregator-microservices.urm.puml
│   │   └── microservices-aggregrator.urm.puml
│   ├── information-microservice/
│   │   ├── etc/
│   │   │   └── information-microservice.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── iluwatar/
│   │       │   │           └── information/
│   │       │   │               └── microservice/
│   │       │   │                   ├── InformationApplication.java
│   │       │   │                   └── InformationController.java
│   │       │   └── resources/
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── iluwatar/
│   │                       └── information/
│   │                           └── microservice/
│   │                               └── InformationControllerTest.java
│   ├── inventory-microservice/
│   │   ├── etc/
│   │   │   └── inventory-microservice.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── iluwatar/
│   │       │   │           └── inventory/
│   │       │   │               └── microservice/
│   │       │   │                   ├── InventoryApplication.java
│   │       │   │                   └── InventoryController.java
│   │       │   └── resources/
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── iluwatar/
│   │                       └── inventory/
│   │                           └── microservice/
│   │                               └── InventoryControllerTest.java
│   └── pom.xml
├── microservices-api-gateway/
│   ├── README.md
│   ├── api-gateway-service/
│   │   ├── etc/
│   │   │   └── api-gateway-service.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── iluwatar/
│   │       │   │           └── api/
│   │       │   │               └── gateway/
│   │       │   │                   ├── ApiGateway.java
│   │       │   │                   ├── App.java
│   │       │   │                   ├── DesktopProduct.java
│   │       │   │                   ├── ImageClient.java
│   │       │   │                   ├── ImageClientImpl.java
│   │       │   │                   ├── MobileProduct.java
│   │       │   │                   ├── PriceClient.java
│   │       │   │                   └── PriceClientImpl.java
│   │       │   └── resources/
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── iluwatar/
│   │                       └── api/
│   │                           └── gateway/
│   │                               └── ApiGatewayTest.java
│   ├── etc/
│   │   ├── api-gateway.ucls
│   │   ├── api-gateway.urm.puml
│   │   └── microservices-api-gateway.urm.puml
│   ├── image-microservice/
│   │   ├── etc/
│   │   │   ├── image-microservice.ucls
│   │   │   └── image-microservice.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── iluwatar/
│   │       │   │           └── image/
│   │       │   │               └── microservice/
│   │       │   │                   ├── ImageApplication.java
│   │       │   │                   └── ImageController.java
│   │       │   └── resources/
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── iluwatar/
│   │                       └── image/
│   │                           └── microservice/
│   │                               └── ImageControllerTest.java
│   ├── pom.xml
│   └── price-microservice/
│       ├── etc/
│       │   ├── price-microservice.ucls
│       │   └── price-microservice.urm.puml
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   ├── java/
│           │   │   └── com/
│           │   │       └── iluwatar/
│           │   │           └── price/
│           │   │               └── microservice/
│           │   │                   ├── PriceApplication.java
│           │   │                   ├── PriceController.java
│           │   │                   ├── PriceService.java
│           │   │                   └── PriceServiceImpl.java
│           │   └── resources/
│           │       └── application.properties
│           └── test/
│               └── java/
│                   └── com/
│                       └── iluwatar/
│                           └── price/
│                               └── microservice/
│                                   ├── PriceControllerTest.java
│                                   └── PriceServiceTest.java
├── microservices-client-side-ui-composition/
│   ├── README.md
│   ├── etc/
│   │   ├── client-side-ui-composition.urm.puml
│   │   └── microservices-client-side-ui-composition.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── clientsideuicomposition/
│       │                   ├── ApiGateway.java
│       │                   ├── CartFrontend.java
│       │                   ├── ClientSideIntegrator.java
│       │                   ├── FrontendComponent.java
│       │                   └── ProductFrontend.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── clientsideuicomposition/
│                           └── ClientSideCompositionTest.java
├── microservices-distributed-tracing/
│   ├── README.md
│   ├── etc/
│   │   ├── microservices-distributed-tracing.puml
│   │   └── microservices-distributed-tracing.urm.puml
│   ├── order-microservice/
│   │   ├── etc/
│   │   │   ├── order-microservice.puml
│   │   │   └── order-microservice.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── iluwatar/
│   │       │   │           └── order/
│   │       │   │               └── microservice/
│   │       │   │                   ├── Main.java
│   │       │   │                   ├── OrderController.java
│   │       │   │                   └── OrderService.java
│   │       │   └── resources/
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── iluwatar/
│   │                       └── order/
│   │                           └── microservice/
│   │                               ├── MainTest.java
│   │                               ├── OrderControllerTest.java
│   │                               └── OrderServiceTest.java
│   ├── payment-microservice/
│   │   ├── etc/
│   │   │   ├── payment-microservice.puml
│   │   │   └── payment-microservice.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── iluwatar/
│   │       │   │           └── payment/
│   │       │   │               └── microservice/
│   │       │   │                   ├── Main.java
│   │       │   │                   └── PaymentController.java
│   │       │   └── resources/
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── iluwatar/
│   │                       └── payment/
│   │                           └── microservice/
│   │                               ├── MainTest.java
│   │                               └── ProductControllerTest.java
│   ├── pom.xml
│   └── product-microservice/
│       ├── etc/
│       │   ├── product-microservice.puml
│       │   └── product-microservice.urm.puml
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   ├── java/
│           │   │   └── com/
│           │   │       └── iluwatar/
│           │   │           └── product/
│           │   │               └── microservice/
│           │   │                   └── microservice/
│           │   │                       ├── Main.java
│           │   │                       └── ProductController.java
│           │   └── resources/
│           │       └── application.properties
│           └── test/
│               └── java/
│                   └── com/
│                       └── iluwatar/
│                           └── product/
│                               └── microservice/
│                                   ├── MainTest.java
│                                   └── ProductControllerTest.java
├── microservices-idempotent-consumer/
│   ├── README.md
│   ├── etc/
│   │   └── microservices-idempotent-consumer.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── idempotentconsumer/
│       │                   ├── App.java
│       │                   ├── InvalidNextStateException.java
│       │                   ├── Request.java
│       │                   ├── RequestNotFoundException.java
│       │                   ├── RequestRepository.java
│       │                   ├── RequestService.java
│       │                   └── RequestStateMachine.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── idempotentconsumer/
│                           ├── AppTest.java
│                           ├── RequestServiceTests.java
│                           └── RequestStateMachineTests.java
├── microservices-log-aggregation/
│   ├── README.md
│   ├── etc/
│   │   ├── log-aggregation.puml
│   │   ├── log-aggregation.urm.puml
│   │   └── microservices-log-aggregation.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── logaggregation/
│       │                   ├── App.java
│       │                   ├── CentralLogStore.java
│       │                   ├── LogAggregator.java
│       │                   ├── LogEntry.java
│       │                   ├── LogLevel.java
│       │                   └── LogProducer.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── logaggregation/
│                           └── LogAggregatorTest.java
├── microservices-self-registration/
│   ├── README.md
│   ├── contextservice/
│   │   ├── .gitattributes
│   │   ├── .gitignore
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── learning/
│   │       │   │           └── contextservice/
│   │       │   │               ├── ContextserviceApplication.java
│   │       │   │               ├── MyCustomHealthCheck.java
│   │       │   │               ├── client/
│   │       │   │               │   └── GreetingServiceClient.java
│   │       │   │               └── controller/
│   │       │   │                   └── ContextController.java
│   │       │   └── resources/
│   │       │       └── application.yml
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── learning/
│   │                       └── contextservice/
│   │                           ├── ContextControllerTest.java
│   │                           ├── ContextserviceApplicationTests.java
│   │                           ├── TestConfig.java
│   │                           └── myCustomHealthCheckTest.java
│   ├── eurekaserver/
│   │   ├── .gitattributes
│   │   ├── .gitignore
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── learning/
│   │       │   │           └── eurekaserver/
│   │       │   │               └── EurekaserverApplication.java
│   │       │   └── resources/
│   │       │       └── application.yml
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── learning/
│   │                       └── eurekaserver/
│   │                           └── EurekaserverApplicationTests.java
│   ├── greetingservice/
│   │   ├── .gitattributes
│   │   ├── .gitignore
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── learning/
│   │       │   │           └── greetingservice/
│   │       │   │               ├── GreetingserviceApplication.java
│   │       │   │               ├── MyCustomHealthCheck.java
│   │       │   │               └── controller/
│   │       │   │                   └── GreetingsController.java
│   │       │   └── resources/
│   │       │       └── application.yml
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── learning/
│   │                       └── greetingservice/
│   │                           ├── GreetingserviceApplicationTests.java
│   │                           ├── MyCustomHealthCheckTest.java
│   │                           └── controller/
│   │                               └── GreetingControllerTest.java
│   └── pom.xml
├── model-view-controller/
│   ├── README.md
│   ├── etc/
│   │   ├── model-view-controller.ucls
│   │   └── model-view-controller.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── model/
│       │                   └── view/
│       │                       └── controller/
│       │                           ├── App.java
│       │                           ├── Fatigue.java
│       │                           ├── GiantController.java
│       │                           ├── GiantModel.java
│       │                           ├── GiantView.java
│       │                           ├── Health.java
│       │                           └── Nourishment.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── model/
│                           └── view/
│                               └── controller/
│                                   ├── AppTest.java
│                                   ├── GiantControllerTest.java
│                                   ├── GiantModelTest.java
│                                   └── GiantViewTest.java
├── model-view-intent/
│   ├── README.md
│   ├── etc/
│   │   └── model-view-intent.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── model/
│       │                   └── view/
│       │                       └── intent/
│       │                           ├── App.java
│       │                           ├── CalculatorModel.java
│       │                           ├── CalculatorView.java
│       │                           ├── CalculatorViewModel.java
│       │                           ├── actions/
│       │                           │   ├── AdditionCalculatorAction.java
│       │                           │   ├── CalculatorAction.java
│       │                           │   ├── DivisionCalculatorAction.java
│       │                           │   ├── MultiplicationCalculatorAction.java
│       │                           │   ├── SetVariableCalculatorAction.java
│       │                           │   ├── SubtractionCalculatorAction.java
│       │                           │   └── package-info.java
│       │                           └── package-info.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── model/
│                           └── view/
│                               └── intent/
│                                   ├── AppTest.java
│                                   └── CalculatorViewModelTest.java
├── model-view-presenter/
│   ├── README.md
│   ├── etc/
│   │   ├── data/
│   │   │   └── test.txt
│   │   ├── model-view-presenter.ucls
│   │   └── model-view-presenter.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── model/
│       │                   └── view/
│       │                       └── presenter/
│       │                           ├── App.java
│       │                           ├── FileLoader.java
│       │                           ├── FileSelectorJframe.java
│       │                           ├── FileSelectorPresenter.java
│       │                           ├── FileSelectorStub.java
│       │                           └── FileSelectorView.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── model/
│                           └── view/
│                               └── presenter/
│                                   ├── AppTest.java
│                                   ├── FileLoaderTest.java
│                                   ├── FileSelectorJframeTest.java
│                                   └── FileSelectorPresenterTest.java
├── model-view-viewmodel/
│   ├── README.md
│   ├── etc/
│   │   └── model-view-viewmodel.urm.puml
│   ├── lombok.config
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── assembly/
│       │   │   └── webapp.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── model/
│       │   │               └── view/
│       │   │                   └── viewmodel/
│       │   │                       ├── Book.java
│       │   │                       ├── BookService.java
│       │   │                       ├── BookServiceImpl.java
│       │   │                       └── BookViewModel.java
│       │   └── webapp/
│       │       ├── META-INF/
│       │       │   └── MANIFEST.MF
│       │       ├── WEB-INF/
│       │       │   └── web.xml
│       │       └── index.zul
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── model/
│                           └── view/
│                               └── viewmodel/
│                                   └── BookTest.java
├── monad/
│   ├── README.md
│   ├── etc/
│   │   ├── monad.ucls
│   │   └── monad.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── monad/
│       │                   ├── App.java
│       │                   ├── Sex.java
│       │                   ├── User.java
│       │                   └── Validator.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── monad/
│                           ├── AppTest.java
│                           └── MonadTest.java
├── money/
│   ├── README.md
│   ├── etc/
│   │   └── money.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               ├── App.java
│       │               ├── CannotAddTwoCurrienciesException.java
│       │               ├── CannotSubtractException.java
│       │               └── Money.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwater/
│                       └── money/
│                           └── MoneyTest.java
├── monitor/
│   ├── README.md
│   ├── etc/
│   │   └── monitor.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── monitor/
│       │                   ├── Bank.java
│       │                   └── Main.java
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── iluwatar/
│           │           └── monitor/
│           │               ├── BankTest.java
│           │               └── MainTest.java
│           └── resources/
│               └── logback.xml
├── monolithic-architecture/
│   ├── README.md
│   ├── etc/
│   │   ├── Monolithic-Ecommerce.urm.puml
│   │   └── monolithic-architecture.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── monolithic/
│       │   │               ├── EcommerceApp.java
│       │   │               ├── controller/
│       │   │               │   ├── OrderController.java
│       │   │               │   ├── ProductController.java
│       │   │               │   └── UserController.java
│       │   │               ├── exceptions/
│       │   │               │   ├── InsufficientStockException.java
│       │   │               │   ├── NonExistentProductException.java
│       │   │               │   └── NonExistentUserException.java
│       │   │               ├── model/
│       │   │               │   ├── Order.java
│       │   │               │   ├── Product.java
│       │   │               │   └── User.java
│       │   │               └── repository/
│       │   │                   ├── OrderRepository.java
│       │   │                   ├── ProductRepository.java
│       │   │                   └── UserRepository.java
│       │   └── resources/
│       │       └── application.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── monolithic/
│                           └── MonolithicAppTest.java
├── monostate/
│   ├── README.md
│   ├── etc/
│   │   ├── MonoState.ucls
│   │   └── monostate.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── monostate/
│       │                   ├── App.java
│       │                   ├── LoadBalancer.java
│       │                   ├── Request.java
│       │                   └── Server.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── monostate/
│                           ├── AppTest.java
│                           └── LoadBalancerTest.java
├── multiton/
│   ├── README.md
│   ├── etc/
│   │   ├── multiton.ucls
│   │   └── multiton.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── multiton/
│       │                   ├── App.java
│       │                   ├── Nazgul.java
│       │                   ├── NazgulEnum.java
│       │                   └── NazgulName.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── multiton/
│                           ├── AppTest.java
│                           ├── NazgulEnumTest.java
│                           └── NazgulTest.java
├── mute-idiom/
│   ├── README.md
│   ├── etc/
│   │   ├── mute-idiom.ucls
│   │   └── mute-idiom.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── mute/
│       │                   ├── App.java
│       │                   ├── CheckedRunnable.java
│       │                   ├── Mute.java
│       │                   └── Resource.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── mute/
│                           ├── AppTest.java
│                           └── MuteTest.java
├── mvnw
├── mvnw.cmd
├── naked-objects/
│   └── README.md
├── notification/
│   ├── README.md
│   ├── etc/
│   │   └── notification.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               ├── App.java
│       │               ├── DataTransferObject.java
│       │               ├── Notification.java
│       │               ├── NotificationError.java
│       │               ├── RegisterWorker.java
│       │               ├── RegisterWorkerDto.java
│       │               ├── RegisterWorkerForm.java
│       │               ├── RegisterWorkerService.java
│       │               └── ServerCommand.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       ├── AppTest.java
│                       ├── RegisterWorkerFormTest.java
│                       └── RegisterWorkerTest.java
├── null-object/
│   ├── README.md
│   ├── etc/
│   │   ├── null-object.ucls
│   │   └── null-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── nullobject/
│       │                   ├── App.java
│       │                   ├── Node.java
│       │                   ├── NodeImpl.java
│       │                   └── NullNode.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── nullobject/
│                           ├── AppTest.java
│                           ├── NullNodeTest.java
│                           └── TreeTest.java
├── object-mother/
│   ├── README.md
│   ├── etc/
│   │   ├── object-mother.ucls
│   │   └── object-mother.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── objectmother/
│       │                   ├── King.java
│       │                   ├── Queen.java
│       │                   ├── Royalty.java
│       │                   └── RoyaltyObjectMother.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── objectmother/
│                           └── test/
│                               └── RoyaltyObjectMotherTest.java
├── object-pool/
│   ├── README.md
│   ├── etc/
│   │   ├── object-pool.ucls
│   │   └── object-pool.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── object/
│       │                   └── pool/
│       │                       ├── App.java
│       │                       ├── ObjectPool.java
│       │                       ├── Oliphaunt.java
│       │                       └── OliphauntPool.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── object/
│                           └── pool/
│                               ├── AppTest.java
│                               └── OliphauntPoolTest.java
├── observer/
│   ├── README.md
│   ├── etc/
│   │   ├── observer.ucls
│   │   └── observer.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── observer/
│       │                   ├── App.java
│       │                   ├── Hobbits.java
│       │                   ├── Orcs.java
│       │                   ├── Weather.java
│       │                   ├── WeatherObserver.java
│       │                   ├── WeatherType.java
│       │                   └── generic/
│       │                       ├── GenHobbits.java
│       │                       ├── GenOrcs.java
│       │                       ├── GenWeather.java
│       │                       ├── Observable.java
│       │                       ├── Observer.java
│       │                       └── Race.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── observer/
│                           ├── AppTest.java
│                           ├── HobbitsTest.java
│                           ├── OrcsTest.java
│                           ├── WeatherObserverTest.java
│                           ├── WeatherTest.java
│                           ├── generic/
│                           │   ├── GHobbitsTest.java
│                           │   ├── GWeatherTest.java
│                           │   ├── ObserverTest.java
│                           │   └── OrcsTest.java
│                           └── utils/
│                               └── InMemoryAppender.java
├── optimistic-offline-lock/
│   ├── README.md
│   ├── etc/
│   │   └── optimistic-offline-lock.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               ├── api/
│       │               │   └── UpdateService.java
│       │               ├── exception/
│       │               │   └── ApplicationException.java
│       │               ├── model/
│       │               │   └── Card.java
│       │               ├── repository/
│       │               │   └── JpaRepository.java
│       │               └── service/
│       │                   └── CardUpdateService.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── OptimisticLockTest.java
├── page-controller/
│   ├── README.md
│   ├── etc/
│   │   └── page-controller.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── page/
│       │   │               └── controller/
│       │   │                   ├── App.java
│       │   │                   ├── SignupController.java
│       │   │                   ├── SignupModel.java
│       │   │                   ├── SignupView.java
│       │   │                   ├── UserController.java
│       │   │                   ├── UserModel.java
│       │   │                   └── UserView.java
│       │   └── resources/
│       │       ├── application.properties
│       │       └── templates/
│       │           ├── signup.html
│       │           └── user.html
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── page/
│                           └── controller/
│                               ├── AppTest.java
│                               ├── SignupControllerTest.java
│                               ├── SignupModelTest.java
│                               ├── UserControllerTest.java
│                               └── UserModelTest.java
├── page-object/
│   ├── README.md
│   ├── etc/
│   │   ├── page-object.ucls
│   │   └── page-object.urm.puml
│   ├── pom.xml
│   ├── sample-application/
│   │   ├── etc/
│   │   │   ├── page-object.ucls
│   │   │   └── sample-application.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── iluwatar/
│   │           │           └── pageobject/
│   │           │               └── App.java
│   │           └── resources/
│   │               └── sample-ui/
│   │                   ├── album-list.html
│   │                   ├── album-page.html
│   │                   ├── css/
│   │                   │   ├── album-list.css
│   │                   │   └── style.css
│   │                   └── login.html
│   ├── src/
│   │   ├── main/
│   │   │   ├── java/
│   │   │   │   └── com/
│   │   │   │       └── iluwatar/
│   │   │   │           └── pageobject/
│   │   │   │               └── App.java
│   │   │   └── resources/
│   │   │       └── sample-ui/
│   │   │           ├── album-list.html
│   │   │           ├── album-page.html
│   │   │           ├── css/
│   │   │           │   ├── album-list.css
│   │   │           │   └── style.css
│   │   │           └── login.html
│   │   └── test/
│   │       └── java/
│   │           └── com/
│   │               └── iluwatar/
│   │                   └── pageobject/
│   │                       ├── AlbumListPageTest.java
│   │                       ├── AlbumPageTest.java
│   │                       ├── LoginPageTest.java
│   │                       └── pages/
│   │                           ├── AlbumListPage.java
│   │                           ├── AlbumPage.java
│   │                           ├── LoginPage.java
│   │                           └── Page.java
│   └── test-automation/
│       ├── etc/
│       │   └── test-automation.urm.puml
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   └── java/
│           │       └── com/
│           │           └── iluwatar/
│           │               └── pageobject/
│           │                   ├── AlbumListPage.java
│           │                   ├── AlbumPage.java
│           │                   ├── LoginPage.java
│           │                   └── Page.java
│           └── test/
│               └── java/
│                   └── com/
│                       └── iluwatar/
│                           └── pageobject/
│                               ├── AlbumListPageTest.java
│                               ├── AlbumPageTest.java
│                               └── LoginPageTest.java
├── parameter-object/
│   ├── README.md
│   ├── etc/
│   │   └── parameter-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── parameter/
│       │                   └── object/
│       │                       ├── App.java
│       │                       ├── ParameterObject.java
│       │                       ├── SearchService.java
│       │                       └── SortOrder.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── parameter/
│                           └── object/
│                               ├── AppTest.java
│                               ├── ParameterObjectTest.java
│                               └── SearchServiceTest.java
├── partial-response/
│   ├── README.md
│   ├── etc/
│   │   ├── partial-response.ucls
│   │   └── partial-response.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── partialresponse/
│       │                   ├── App.java
│       │                   ├── FieldJsonMapper.java
│       │                   ├── Video.java
│       │                   └── VideoResource.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── partialresponse/
│                           ├── AppTest.java
│                           ├── FieldJsonMapperTest.java
│                           └── VideoResourceTest.java
├── pipeline/
│   ├── README.md
│   ├── etc/
│   │   └── pipeline.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── pipeline/
│       │                   ├── App.java
│       │                   ├── ConvertToCharArrayHandler.java
│       │                   ├── Handler.java
│       │                   ├── Pipeline.java
│       │                   ├── RemoveAlphabetsHandler.java
│       │                   └── RemoveDigitsHandler.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── pipeline/
│                           ├── AppTest.java
│                           └── PipelineTest.java
├── poison-pill/
│   ├── README.md
│   ├── etc/
│   │   ├── poison-pill.ucls
│   │   └── poison-pill.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── poison/
│       │                   └── pill/
│       │                       ├── App.java
│       │                       ├── Consumer.java
│       │                       ├── Message.java
│       │                       ├── MessageQueue.java
│       │                       ├── MqPublishPoint.java
│       │                       ├── MqSubscribePoint.java
│       │                       ├── Producer.java
│       │                       ├── SimpleMessage.java
│       │                       └── SimpleMessageQueue.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── poison/
│                           └── pill/
│                               ├── AppTest.java
│                               ├── ConsumerTest.java
│                               ├── PoisonMessageTest.java
│                               ├── ProducerTest.java
│                               └── SimpleMessageTest.java
├── pom.xml
├── presentation-model/
│   ├── README.md
│   ├── etc/
│   │   ├── presentation-model.urm.puml
│   │   └── presentation.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── presentationmodel/
│       │                   ├── Album.java
│       │                   ├── App.java
│       │                   ├── DisplayedAlbums.java
│       │                   ├── PresentationModel.java
│       │                   └── View.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── presentationmodel/
│                           ├── AlbumTest.java
│                           ├── AppTest.java
│                           ├── DisplayedAlbumsTest.java
│                           ├── PresentationTest.java
│                           └── ViewTest.java
├── private-class-data/
│   ├── README.md
│   ├── etc/
│   │   ├── private-class-data.ucls
│   │   └── private-class-data.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── privateclassdata/
│       │                   ├── App.java
│       │                   ├── ImmutableStew.java
│       │                   ├── Stew.java
│       │                   └── StewData.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── privateclassdata/
│                           ├── AppTest.java
│                           ├── ImmutableStewTest.java
│                           ├── StewTest.java
│                           └── utils/
│                               └── InMemoryAppender.java
├── producer-consumer/
│   ├── README.md
│   ├── etc/
│   │   ├── producer-consumer.ucls
│   │   └── producer-consumer.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── producer/
│       │                   └── consumer/
│       │                       ├── App.java
│       │                       ├── Consumer.java
│       │                       ├── Item.java
│       │                       ├── ItemQueue.java
│       │                       └── Producer.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── producer/
│                           └── consumer/
│                               ├── AppTest.java
│                               ├── ConsumerTest.java
│                               └── ProducerTest.java
├── promise/
│   ├── README.md
│   ├── etc/
│   │   ├── promise.ucls
│   │   └── promise.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── promise/
│       │                   ├── App.java
│       │                   ├── Promise.java
│       │                   ├── PromiseSupport.java
│       │                   └── Utility.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── promise/
│                           ├── AppTest.java
│                           └── PromiseTest.java
├── property/
│   ├── README.md
│   ├── etc/
│   │   ├── property.ucls
│   │   └── property.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── property/
│       │                   ├── App.java
│       │                   ├── Character.java
│       │                   ├── Prototype.java
│       │                   └── Stats.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── property/
│                           ├── AppTest.java
│                           └── CharacterTest.java
├── prototype/
│   ├── README.md
│   ├── etc/
│   │   └── prototype.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── prototype/
│       │                   ├── App.java
│       │                   ├── Beast.java
│       │                   ├── ElfBeast.java
│       │                   ├── ElfMage.java
│       │                   ├── ElfWarlord.java
│       │                   ├── HeroFactory.java
│       │                   ├── HeroFactoryImpl.java
│       │                   ├── Mage.java
│       │                   ├── OrcBeast.java
│       │                   ├── OrcMage.java
│       │                   ├── OrcWarlord.java
│       │                   ├── Prototype.java
│       │                   └── Warlord.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── prototype/
│                           ├── AppTest.java
│                           └── PrototypeTest.java
├── proxy/
│   ├── README.md
│   ├── etc/
│   │   └── proxy.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── proxy/
│       │                   ├── App.java
│       │                   ├── IvoryTower.java
│       │                   ├── Wizard.java
│       │                   ├── WizardTower.java
│       │                   └── WizardTowerProxy.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── proxy/
│                           ├── AppTest.java
│                           ├── IvoryTowerTest.java
│                           ├── WizardTest.java
│                           ├── WizardTowerProxyTest.java
│                           └── utils/
│                               └── InMemoryAppender.java
├── publish-subscribe/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── publish/
│       │                   └── subscribe/
│       │                       ├── App.java
│       │                       ├── model/
│       │                       │   ├── Message.java
│       │                       │   └── Topic.java
│       │                       ├── publisher/
│       │                       │   ├── Publisher.java
│       │                       │   └── PublisherImpl.java
│       │                       └── subscriber/
│       │                           ├── CustomerSupportSubscriber.java
│       │                           ├── DelayedWeatherSubscriber.java
│       │                           ├── Subscriber.java
│       │                           └── WeatherSubscriber.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── publish/
│                           └── subscribe/
│                               ├── AppTest.java
│                               ├── LoggerExtension.java
│                               ├── model/
│                               │   ├── MessageTest.java
│                               │   └── TopicTest.java
│                               ├── publisher/
│                               │   └── PublisherTest.java
│                               └── subscriber/
│                                   └── SubscriberTest.java
├── queue-based-load-leveling/
│   ├── README.md
│   ├── etc/
│   │   ├── queue-based-load-leveling.urm.puml
│   │   ├── queue-load-leveling.ucls
│   │   └── queue-load-leveling.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── queue/
│       │                   └── load/
│       │                       └── leveling/
│       │                           ├── App.java
│       │                           ├── Message.java
│       │                           ├── MessageQueue.java
│       │                           ├── ServiceExecutor.java
│       │                           ├── Task.java
│       │                           └── TaskGenerator.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── queue/
│                           └── load/
│                               └── leveling/
│                                   ├── AppTest.java
│                                   ├── MessageQueueTest.java
│                                   ├── MessageTest.java
│                                   └── TaskGenSrvExeTest.java
├── rate-limiting-pattern/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── rate/
│       │                   └── limiting/
│       │                       └── pattern/
│       │                           ├── AdaptiveRateLimiter.java
│       │                           ├── App.java
│       │                           ├── FindCustomerRequest.java
│       │                           ├── FixedWindowRateLimiter.java
│       │                           ├── RateLimitException.java
│       │                           ├── RateLimitOperation.java
│       │                           ├── RateLimiter.java
│       │                           ├── ServiceUnavailableException.java
│       │                           ├── ThrottlingException.java
│       │                           └── TokenBucketRateLimiter.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── rate/
│                           └── limiting/
│                               └── pattern/
│                                   ├── AdaptiveRateLimiterTest.java
│                                   ├── AppTest.java
│                                   ├── AppTestUtils.java
│                                   ├── ConcurrencyTests.java
│                                   ├── ExceptionTests.java
│                                   ├── FindCustomerRequestTest.java
│                                   ├── FixedWindowRateLimiterTest.java
│                                   ├── RateLimitOperationTest.java
│                                   ├── RateLimiterTest.java
│                                   └── TokenBucketRateLimiterTest.java
├── reactor/
│   ├── README.md
│   ├── etc/
│   │   ├── reactor.ucls
│   │   └── reactor.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── reactor/
│       │                   ├── app/
│       │                   │   ├── App.java
│       │                   │   ├── AppClient.java
│       │                   │   └── LoggingHandler.java
│       │                   └── framework/
│       │                       ├── AbstractNioChannel.java
│       │                       ├── ChannelHandler.java
│       │                       ├── Dispatcher.java
│       │                       ├── NioDatagramChannel.java
│       │                       ├── NioReactor.java
│       │                       ├── NioServerSocketChannel.java
│       │                       ├── SameThreadDispatcher.java
│       │                       └── ThreadPoolDispatcher.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── reactor/
│                           └── app/
│                               └── ReactorTest.java
├── registry/
│   ├── README.md
│   ├── etc/
│   │   └── registry.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── registry/
│       │                   ├── App.java
│       │                   ├── Customer.java
│       │                   └── CustomerRegistry.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── registry/
│                           └── CustomerRegistryTest.java
├── repository/
│   ├── README.md
│   ├── etc/
│   │   ├── repository.ucls
│   │   └── repository.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── repository/
│       │   │               ├── App.java
│       │   │               ├── AppConfig.java
│       │   │               ├── Person.java
│       │   │               ├── PersonRepository.java
│       │   │               └── PersonSpecifications.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── persistence.xml
│       │       ├── applicationContext.xml
│       │       └── logback.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── repository/
│                           ├── AnnotationBasedRepositoryTest.java
│                           ├── AppConfigTest.java
│                           ├── AppTest.java
│                           └── RepositoryTest.java
├── resource-acquisition-is-initialization/
│   ├── README.md
│   ├── etc/
│   │   ├── resource-acquisition-is-initialization.ucls
│   │   └── resource-acquisition-is-initialization.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── resource/
│       │                   └── acquisition/
│       │                       └── is/
│       │                           └── initialization/
│       │                               ├── App.java
│       │                               ├── SlidingDoor.java
│       │                               └── TreasureChest.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── resource/
│                           └── acquisition/
│                               └── is/
│                                   └── initialization/
│                                       ├── AppTest.java
│                                       └── ClosableTest.java
├── retry/
│   ├── README.md
│   ├── etc/
│   │   └── retry.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── retry/
│       │                   ├── App.java
│       │                   ├── BusinessException.java
│       │                   ├── BusinessOperation.java
│       │                   ├── CustomerNotFoundException.java
│       │                   ├── DatabaseNotAvailableException.java
│       │                   ├── FindCustomer.java
│       │                   ├── Retry.java
│       │                   └── RetryExponentialBackoff.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── retry/
│                           ├── FindCustomerTest.java
│                           ├── RetryExponentialBackoffTest.java
│                           └── RetryTest.java
├── role-object/
│   ├── README.md
│   ├── etc/
│   │   └── role-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── roleobject/
│       │                   ├── ApplicationRoleObject.java
│       │                   ├── BorrowerRole.java
│       │                   ├── Customer.java
│       │                   ├── CustomerCore.java
│       │                   ├── CustomerRole.java
│       │                   ├── InvestorRole.java
│       │                   └── Role.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── roleobject/
│                           ├── ApplicationRoleObjectTest.java
│                           ├── BorrowerRoleTest.java
│                           ├── CustomerCoreTest.java
│                           ├── InvestorRoleTest.java
│                           └── RoleTest.java
├── saga/
│   ├── README.md
│   ├── etc/
│   │   └── saga.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── saga/
│       │                   ├── choreography/
│       │                   │   ├── ChoreographyChapter.java
│       │                   │   ├── FlyBookingService.java
│       │                   │   ├── HotelBookingService.java
│       │                   │   ├── OrderService.java
│       │                   │   ├── Saga.java
│       │                   │   ├── SagaApplication.java
│       │                   │   ├── Service.java
│       │                   │   ├── ServiceDiscoveryService.java
│       │                   │   └── WithdrawMoneyService.java
│       │                   └── orchestration/
│       │                       ├── ChapterResult.java
│       │                       ├── FlyBookingService.java
│       │                       ├── HotelBookingService.java
│       │                       ├── OrchestrationChapter.java
│       │                       ├── OrderService.java
│       │                       ├── Saga.java
│       │                       ├── SagaApplication.java
│       │                       ├── SagaOrchestrator.java
│       │                       ├── Service.java
│       │                       ├── ServiceDiscoveryService.java
│       │                       └── WithdrawMoneyService.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── saga/
│                           ├── choreography/
│                           │   ├── SagaApplicationTest.java
│                           │   └── SagaChoreographyTest.java
│                           └── orchestration/
│                               ├── SagaApplicationTest.java
│                               ├── SagaOrchestratorInternallyTest.java
│                               └── SagaOrchestratorTest.java
├── separated-interface/
│   ├── README.md
│   ├── etc/
│   │   └── separated-interface.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── separatedinterface/
│       │                   ├── App.java
│       │                   ├── invoice/
│       │                   │   ├── InvoiceGenerator.java
│       │                   │   └── TaxCalculator.java
│       │                   └── taxes/
│       │                       ├── DomesticTaxCalculator.java
│       │                       └── ForeignTaxCalculator.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── separatedinterface/
│                           ├── AppTest.java
│                           ├── invoice/
│                           │   └── InvoiceGeneratorTest.java
│                           └── taxes/
│                               ├── DomesticTaxCalculatorTest.java
│                               └── ForeignTaxCalculatorTest.java
├── serialized-entity/
│   ├── README.md
│   ├── etc/
│   │   ├── serialize-entity.urm.puml
│   │   └── serialized-entity.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── serializedentity/
│       │                   ├── App.java
│       │                   ├── Country.java
│       │                   ├── CountryDao.java
│       │                   └── CountrySchemaSql.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── serializedentity/
│                           ├── AppTest.java
│                           └── CountryTest.java
├── serialized-lob/
│   ├── README.md
│   ├── etc/
│   │   ├── serialized-lob.urm.puml
│   │   ├── slob.urm.puml
│   │   └── slob.urm.uml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── slob/
│       │                   ├── App.java
│       │                   ├── dbservice/
│       │                   │   └── DatabaseService.java
│       │                   ├── lob/
│       │                   │   ├── Animal.java
│       │                   │   ├── Forest.java
│       │                   │   └── Plant.java
│       │                   └── serializers/
│       │                       ├── BlobSerializer.java
│       │                       ├── ClobSerializer.java
│       │                       └── LobSerializer.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── slob/
│                           └── AppTest.java
├── servant/
│   ├── README.md
│   ├── etc/
│   │   ├── servant-pattern.ucls
│   │   └── servant.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── etc/
│       │   └── servant.xml
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── servant/
│       │                   ├── App.java
│       │                   ├── King.java
│       │                   ├── Queen.java
│       │                   ├── Royalty.java
│       │                   └── Servant.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── servant/
│                           ├── AppTest.java
│                           ├── KingTest.java
│                           ├── QueenTest.java
│                           └── ServantTest.java
├── server-session/
│   ├── README.md
│   ├── etc/
│   │   └── server-session.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── sessionserver/
│       │                   ├── App.java
│       │                   ├── LoginHandler.java
│       │                   └── LogoutHandler.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── sessionserver/
│                           ├── LoginHandlerTest.java
│                           └── LogoutHandlerTest.java
├── service-layer/
│   ├── README.md
│   ├── etc/
│   │   ├── service-layer.ucls
│   │   └── service-layer.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── servicelayer/
│       │   │               ├── app/
│       │   │               │   └── App.java
│       │   │               ├── common/
│       │   │               │   ├── BaseEntity.java
│       │   │               │   ├── Dao.java
│       │   │               │   └── DaoBaseImpl.java
│       │   │               ├── hibernate/
│       │   │               │   └── HibernateUtil.java
│       │   │               ├── magic/
│       │   │               │   ├── MagicService.java
│       │   │               │   └── MagicServiceImpl.java
│       │   │               ├── spell/
│       │   │               │   ├── Spell.java
│       │   │               │   ├── SpellDao.java
│       │   │               │   └── SpellDaoImpl.java
│       │   │               ├── spellbook/
│       │   │               │   ├── Spellbook.java
│       │   │               │   ├── SpellbookDao.java
│       │   │               │   └── SpellbookDaoImpl.java
│       │   │               └── wizard/
│       │   │                   ├── Wizard.java
│       │   │                   ├── WizardDao.java
│       │   │                   └── WizardDaoImpl.java
│       │   └── resources/
│       │       └── logback.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── servicelayer/
│                           ├── app/
│                           │   └── AppTest.java
│                           ├── common/
│                           │   └── BaseDaoTest.java
│                           ├── magic/
│                           │   └── MagicServiceImplTest.java
│                           ├── spell/
│                           │   └── SpellDaoImplTest.java
│                           ├── spellbook/
│                           │   └── SpellbookDaoImplTest.java
│                           └── wizard/
│                               └── WizardDaoImplTest.java
├── service-locator/
│   ├── README.md
│   ├── etc/
│   │   ├── service-locator.ucls
│   │   └── service-locator.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── servicelocator/
│       │                   ├── App.java
│       │                   ├── InitContext.java
│       │                   ├── Service.java
│       │                   ├── ServiceCache.java
│       │                   ├── ServiceImpl.java
│       │                   └── ServiceLocator.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── servicelocator/
│                           ├── AppTest.java
│                           └── ServiceLocatorTest.java
├── service-stub/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── servicestub/
│       │                   ├── App.java
│       │                   ├── RealSentimentAnalysisServer.java
│       │                   ├── SentimentAnalysisServer.java
│       │                   └── StubSentimentAnalysisServer.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── servicestub/
│                           ├── AppTest.java
│                           ├── RealSentimentAnalysisServerTest.java
│                           └── StubSentimentAnalysisServerTest.java
├── service-to-worker/
│   ├── README.md
│   ├── etc/
│   │   ├── service-to-worker.puml
│   │   └── service-to-worker.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── servicetoworker/
│       │                   ├── Action.java
│       │                   ├── App.java
│       │                   ├── Command.java
│       │                   ├── Dispatcher.java
│       │                   ├── GiantController.java
│       │                   ├── GiantModel.java
│       │                   └── GiantView.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── servicetoworker/
│                           ├── ActionTest.java
│                           ├── AppTest.java
│                           ├── DispatcherTest.java
│                           ├── GiantControllerTest.java
│                           ├── GiantModelTest.java
│                           └── GiantViewTest.java
├── session-facade/
│   ├── README.md
│   ├── etc/
│   │   └── session-facade.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── sessionfacade/
│       │                   ├── App.java
│       │                   ├── CartService.java
│       │                   ├── OrderService.java
│       │                   ├── PaymentService.java
│       │                   ├── Product.java
│       │                   ├── ProductCatalogService.java
│       │                   └── ShoppingFacade.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── sessionfacade/
│                           ├── AppTest.java
│                           ├── CartServiceTest.java
│                           ├── PaymentServiceTest.java
│                           ├── ProductTest.java
│                           └── ShoppingFacadeTest.java
├── sharding/
│   ├── README.md
│   ├── etc/
│   │   └── sharding.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── sharding/
│       │                   ├── App.java
│       │                   ├── Data.java
│       │                   ├── HashShardManager.java
│       │                   ├── LookupShardManager.java
│       │                   ├── RangeShardManager.java
│       │                   ├── Shard.java
│       │                   └── ShardManager.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── sharding/
│                           ├── AppTest.java
│                           ├── HashShardManagerTest.java
│                           ├── LookupShardManagerTest.java
│                           ├── RangeShardManagerTest.java
│                           ├── ShardManagerTest.java
│                           └── ShardTest.java
├── single-table-inheritance/
│   ├── README.md
│   ├── etc/
│   │   └── single-table-inheritance.urm.puml
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── iluwatar/
│           │           ├── SingleTableInheritance.java
│           │           ├── entity/
│           │           │   ├── Car.java
│           │           │   ├── Freighter.java
│           │           │   ├── PassengerVehicle.java
│           │           │   ├── Train.java
│           │           │   ├── TransportVehicle.java
│           │           │   ├── Truck.java
│           │           │   └── Vehicle.java
│           │           ├── repository/
│           │           │   └── VehicleRepository.java
│           │           └── service/
│           │               └── VehicleService.java
│           └── resources/
│               └── application.properties
├── singleton/
│   ├── README.md
│   ├── etc/
│   │   └── singleton.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── singleton/
│       │                   ├── App.java
│       │                   ├── BillPughImplementation.java
│       │                   ├── EnumIvoryTower.java
│       │                   ├── InitializingOnDemandHolderIdiom.java
│       │                   ├── IvoryTower.java
│       │                   ├── ThreadSafeDoubleCheckLocking.java
│       │                   ├── ThreadSafeLazyLoadedIvoryTower.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── singleton/
│                           ├── AppTest.java
│                           ├── BillPughImplementationTest.java
│                           ├── EnumIvoryTowerTest.java
│                           ├── InitializingOnDemandHolderIdiomTest.java
│                           ├── IvoryTowerTest.java
│                           ├── SingletonTest.java
│                           ├── ThreadSafeDoubleCheckLockingTest.java
│                           └── ThreadSafeLazyLoadedIvoryTowerTest.java
├── spatial-partition/
│   ├── README.md
│   ├── etc/
│   │   └── spatial-partition.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── spatialpartition/
│       │                   ├── App.java
│       │                   ├── Bubble.java
│       │                   ├── Point.java
│       │                   ├── QuadTree.java
│       │                   ├── Rect.java
│       │                   ├── SpatialPartitionBubbles.java
│       │                   └── SpatialPartitionGeneric.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── spatialpartition/
│                           ├── BubbleTest.java
│                           ├── QuadTreeTest.java
│                           ├── RectTest.java
│                           └── SpatialPartitionBubblesTest.java
├── special-case/
│   ├── README.md
│   ├── etc/
│   │   └── special-case.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── specialcase/
│       │                   ├── App.java
│       │                   ├── ApplicationServices.java
│       │                   ├── ApplicationServicesImpl.java
│       │                   ├── Db.java
│       │                   ├── DomainServices.java
│       │                   ├── DomainServicesImpl.java
│       │                   ├── DownForMaintenance.java
│       │                   ├── InsufficientFunds.java
│       │                   ├── InvalidUser.java
│       │                   ├── MaintenanceLock.java
│       │                   ├── MoneyTransaction.java
│       │                   ├── OutOfStock.java
│       │                   ├── ReceiptDto.java
│       │                   └── ReceiptViewModel.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── specialcase/
│                           ├── AppTest.java
│                           └── SpecialCasesTest.java
├── specification/
│   ├── README.md
│   ├── etc/
│   │   ├── specification.ucls
│   │   └── specification.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── specification/
│       │                   ├── app/
│       │                   │   └── App.java
│       │                   ├── creature/
│       │                   │   ├── AbstractCreature.java
│       │                   │   ├── Creature.java
│       │                   │   ├── Dragon.java
│       │                   │   ├── Goblin.java
│       │                   │   ├── KillerBee.java
│       │                   │   ├── Octopus.java
│       │                   │   ├── Shark.java
│       │                   │   └── Troll.java
│       │                   ├── property/
│       │                   │   ├── Color.java
│       │                   │   ├── Mass.java
│       │                   │   ├── Movement.java
│       │                   │   └── Size.java
│       │                   └── selector/
│       │                       ├── AbstractSelector.java
│       │                       ├── ColorSelector.java
│       │                       ├── ConjunctionSelector.java
│       │                       ├── DisjunctionSelector.java
│       │                       ├── MassEqualSelector.java
│       │                       ├── MassGreaterThanSelector.java
│       │                       ├── MassSmallerThanOrEqSelector.java
│       │                       ├── MovementSelector.java
│       │                       ├── NegationSelector.java
│       │                       └── SizeSelector.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── specification/
│                           ├── app/
│                           │   └── AppTest.java
│                           ├── creature/
│                           │   └── CreatureTest.java
│                           └── selector/
│                               ├── ColorSelectorTest.java
│                               ├── CompositeSelectorsTest.java
│                               ├── MassSelectorTest.java
│                               ├── MovementSelectorTest.java
│                               └── SizeSelectorTest.java
├── state/
│   ├── README.md
│   ├── etc/
│   │   └── state.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── state/
│       │                   ├── AngryState.java
│       │                   ├── App.java
│       │                   ├── Mammoth.java
│       │                   ├── PeacefulState.java
│       │                   └── State.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── state/
│                           ├── AppTest.java
│                           └── MammothTest.java
├── step-builder/
│   ├── README.md
│   ├── etc/
│   │   ├── step-builder.ucls
│   │   └── step-builder.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── stepbuilder/
│       │                   ├── App.java
│       │                   ├── Character.java
│       │                   └── CharacterStepBuilder.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── stepbuilder/
│                           ├── AppTest.java
│                           └── CharacterStepBuilderTest.java
├── strangler/
│   ├── README.md
│   ├── etc/
│   │   ├── strangler.puml
│   │   └── strangler.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── strangler/
│       │                   ├── App.java
│       │                   ├── HalfArithmetic.java
│       │                   ├── HalfSource.java
│       │                   ├── NewArithmetic.java
│       │                   ├── NewSource.java
│       │                   ├── OldArithmetic.java
│       │                   └── OldSource.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── strangler/
│                           ├── AppTest.java
│                           ├── HalfArithmeticTest.java
│                           ├── HalfSourceTest.java
│                           ├── NewArithmeticTest.java
│                           ├── NewSourceTest.java
│                           ├── OldArithmeticTest.java
│                           └── OldSourceTest.java
├── strategy/
│   ├── README.md
│   ├── etc/
│   │   └── strategy.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── strategy/
│       │                   ├── App.java
│       │                   ├── DragonSlayer.java
│       │                   ├── DragonSlayingStrategy.java
│       │                   ├── LambdaStrategy.java
│       │                   ├── MeleeStrategy.java
│       │                   ├── ProjectileStrategy.java
│       │                   └── SpellStrategy.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── strategy/
│                           ├── AppTest.java
│                           ├── DragonSlayerTest.java
│                           └── DragonSlayingStrategyTest.java
├── subclass-sandbox/
│   ├── README.md
│   ├── etc/
│   │   └── subclass-sandbox.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── subclasssandbox/
│       │                   ├── App.java
│       │                   ├── GroundDive.java
│       │                   ├── SkyLaunch.java
│       │                   └── Superpower.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── subclasssandbox/
│                           ├── AppTest.java
│                           ├── GroundDiveTest.java
│                           └── SkyLaunchTest.java
├── table-inheritance/
│   ├── README.md
│   ├── etc/
│   │   └── table-inheritance.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── table/
│       │                   └── inheritance/
│       │                       ├── App.java
│       │                       ├── Car.java
│       │                       ├── Truck.java
│       │                       ├── Vehicle.java
│       │                       └── VehicleDatabase.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── table/
│                           └── inheritance/
│                               ├── AppTest.java
│                               └── VehicleDatabaseTest.java
├── table-module/
│   ├── README.md
│   ├── etc/
│   │   └── table-module.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── tablemodule/
│       │                   ├── App.java
│       │                   ├── User.java
│       │                   └── UserTableModule.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── tablemodule/
│                           ├── AppTest.java
│                           ├── UserTableModuleTest.java
│                           └── UserTest.java
├── template-method/
│   ├── README.md
│   ├── etc/
│   │   └── template-method.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── templatemethod/
│       │                   ├── App.java
│       │                   ├── HalflingThief.java
│       │                   ├── HitAndRunMethod.java
│       │                   ├── StealingMethod.java
│       │                   └── SubtleMethod.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── templatemethod/
│                           ├── AppTest.java
│                           ├── HalflingThiefTest.java
│                           ├── HitAndRunMethodTest.java
│                           ├── StealingMethodTest.java
│                           └── SubtleMethodTest.java
├── templateview/
│   ├── README.md
│   ├── etc/
│   │   ├── template-view.urm.puml
│   │   └── templateview.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── templateview/
│       │                   ├── App.java
│       │                   ├── ContactPageView.java
│       │                   ├── HomePageView.java
│       │                   └── TemplateView.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── templateview/
│                           ├── AppTest.java
│                           ├── ContactPageViewTest.java
│                           ├── HomePageViewTest.java
│                           └── TemplateViewTest.java
├── thread-pool-executor/
│   ├── README.md
│   ├── etc/
│   │   └── thread-pool-executor.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── threadpoolexecutor/
│       │                   ├── App.java
│       │                   ├── FrontDeskService.java
│       │                   ├── GuestCheckInTask.java
│       │                   └── VipGuestCheckInTask.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── threadpoolexecutor/
│                           ├── AppTest.java
│                           ├── FrontDeskServiceTest.java
│                           ├── GuestCheckInTaskTest.java
│                           └── VipGuestCheckInTaskTest.java
├── throttling/
│   ├── README.md
│   ├── etc/
│   │   └── throttling.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── throttling/
│       │                   ├── App.java
│       │                   ├── BarCustomer.java
│       │                   ├── Bartender.java
│       │                   ├── CallsCount.java
│       │                   └── timer/
│       │                       ├── ThrottleTimerImpl.java
│       │                       └── Throttler.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── throttling/
│                           ├── AppTest.java
│                           ├── BarCustomerTest.java
│                           └── BartenderTest.java
├── tolerant-reader/
│   ├── README.md
│   ├── etc/
│   │   └── tolerant-reader.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── tolerantreader/
│       │                   ├── App.java
│       │                   ├── RainbowFish.java
│       │                   ├── RainbowFishSerializer.java
│       │                   └── RainbowFishV2.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── tolerantreader/
│                           ├── AppTest.java
│                           ├── RainbowFishSerializerTest.java
│                           ├── RainbowFishTest.java
│                           └── RainbowFishV2Test.java
├── trampoline/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   └── trampoline.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── trampoline/
│       │                   ├── Trampoline.java
│       │                   └── TrampolineApp.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── trampoline/
│                           └── TrampolineAppTest.java
├── transaction-script/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   └── transaction-script.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── transactionscript/
│       │                   ├── App.java
│       │                   ├── Hotel.java
│       │                   ├── HotelDao.java
│       │                

================================================
FILE CONTENTS
================================================

================================================
FILE: .all-contributorsrc
================================================
{
  "files": [
    "README.md"
  ],
  "imageSize": 100,
  "commit": false,
  "contributors": [
    {
      "login": "iluwatar",
      "name": "Ilkka Seppälä",
      "avatar_url": "https://avatars1.githubusercontent.com/u/582346?v=4",
      "profile": "https://github.com/iluwatar",
      "contributions": [
        "projectManagement",
        "maintenance",
        "content"
      ]
    },
    {
      "login": "ohbus",
      "name": "Subhrodip Mohanta",
      "avatar_url": "https://avatars0.githubusercontent.com/u/13291222?v=4",
      "profile": "http://subho.xyz",
      "contributions": [
        "code",
        "review",
        "maintenance"
      ]
    },
    {
      "login": "amit1307",
      "name": "amit1307",
      "avatar_url": "https://avatars0.githubusercontent.com/u/23420222?v=4",
      "profile": "https://github.com/amit1307",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "npathai",
      "name": "Narendra Pathai",
      "avatar_url": "https://avatars2.githubusercontent.com/u/1792515?v=4",
      "profile": "https://github.com/npathai",
      "contributions": [
        "code",
        "ideas",
        "review"
      ]
    },
    {
      "login": "fluxw42",
      "name": "Jeroen Meulemeester",
      "avatar_url": "https://avatars1.githubusercontent.com/u/1545460?v=4",
      "profile": "https://github.com/fluxw42",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "mikulucky",
      "name": "Joseph McCarthy",
      "avatar_url": "https://avatars0.githubusercontent.com/u/4526195?v=4",
      "profile": "http://www.joemccarthy.co.uk",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "thomasoss",
      "name": "Thomas",
      "avatar_url": "https://avatars1.githubusercontent.com/u/22516154?v=4",
      "profile": "https://github.com/thomasoss",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "anuragagarwal561994",
      "name": "Anurag Agarwal",
      "avatar_url": "https://avatars1.githubusercontent.com/u/6075379?v=4",
      "profile": "https://github.com/anuragagarwal561994",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "markusmo3",
      "name": "Markus Moser",
      "avatar_url": "https://avatars1.githubusercontent.com/u/3317416?v=4",
      "profile": "https://markusmo3.github.io",
      "contributions": [
        "design",
        "code",
        "ideas"
      ]
    },
    {
      "login": "isabiq",
      "name": "Sabiq Ihab",
      "avatar_url": "https://avatars1.githubusercontent.com/u/19510920?v=4",
      "profile": "https://twitter.com/i_sabiq",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "inbravo",
      "name": "Amit Dixit",
      "avatar_url": "https://avatars3.githubusercontent.com/u/5253764?v=4",
      "profile": "http://inbravo.github.io",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "piyushchaudhari04",
      "name": "Piyush Kailash Chaudhari",
      "avatar_url": "https://avatars3.githubusercontent.com/u/10268029?v=4",
      "profile": "https://github.com/piyushchaudhari04",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "joshzambales",
      "name": "joshzambales",
      "avatar_url": "https://avatars1.githubusercontent.com/u/8704552?v=4",
      "profile": "https://github.com/joshzambales",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Crossy147",
      "name": "Kamil Pietruszka",
      "avatar_url": "https://avatars2.githubusercontent.com/u/7272996?v=4",
      "profile": "https://github.com/Crossy147",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "zafarella",
      "name": "Zafar Khaydarov",
      "avatar_url": "https://avatars2.githubusercontent.com/u/660742?v=4",
      "profile": "http://cs.joensuu.fi/~zkhayda",
      "contributions": [
        "code",
        "doc"
      ]
    },
    {
      "login": "kemitix",
      "name": "Paul Campbell",
      "avatar_url": "https://avatars1.githubusercontent.com/u/1147749?v=4",
      "profile": "https://kemitix.github.io/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Argyro-Sioziou",
      "name": "Argyro Sioziou",
      "avatar_url": "https://avatars0.githubusercontent.com/u/22822639?v=4",
      "profile": "https://github.com/Argyro-Sioziou",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "TylerMcConville",
      "name": "TylerMcConville",
      "avatar_url": "https://avatars0.githubusercontent.com/u/4946449?v=4",
      "profile": "https://github.com/TylerMcConville",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "saksham93",
      "name": "saksham93",
      "avatar_url": "https://avatars1.githubusercontent.com/u/37399540?v=4",
      "profile": "https://github.com/saksham93",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "nikhilbarar",
      "name": "nikhilbarar",
      "avatar_url": "https://avatars2.githubusercontent.com/u/37332144?v=4",
      "profile": "https://github.com/nikhilbarar",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "colinbut",
      "name": "Colin But",
      "avatar_url": "https://avatars2.githubusercontent.com/u/10725674?v=4",
      "profile": "http://colinbut.com",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "ruslanpa",
      "name": "Ruslan",
      "avatar_url": "https://avatars2.githubusercontent.com/u/1503411?v=4",
      "profile": "https://github.com/ruslanpa",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "JuhoKang",
      "name": "Juho Kang",
      "avatar_url": "https://avatars1.githubusercontent.com/u/4745294?v=4",
      "profile": "https://github.com/JuhoKang",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "dheeraj-mummareddy",
      "name": "Dheeraj Mummareddy",
      "avatar_url": "https://avatars2.githubusercontent.com/u/7002230?v=4",
      "profile": "https://github.com/dheeraj-mummareddy",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "bernardosulzbach",
      "name": "Bernardo Sulzbach",
      "avatar_url": "https://avatars0.githubusercontent.com/u/8271090?v=4",
      "profile": "https://www.bernardosulzbach.com",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "4lexis",
      "name": "Aleksandar Dudukovic",
      "avatar_url": "https://avatars0.githubusercontent.com/u/19871727?v=4",
      "profile": "https://github.com/4lexis",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "yusufaytas",
      "name": "Yusuf Aytaş",
      "avatar_url": "https://avatars2.githubusercontent.com/u/1049483?v=4",
      "profile": "https://www.yusufaytas.com",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "qpi",
      "name": "Mihály Kuprivecz",
      "avatar_url": "https://avatars2.githubusercontent.com/u/1001491?v=4",
      "profile": "http://futurehomes.hu",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "kapinuss",
      "name": "Stanislav Kapinus",
      "avatar_url": "https://avatars0.githubusercontent.com/u/17639945?v=4",
      "profile": "https://github.com/kapinuss",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "gvsharma",
      "name": "GVSharma",
      "avatar_url": "https://avatars1.githubusercontent.com/u/6648152?v=4",
      "profile": "https://github.com/gvsharma",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "SrdjanPaunovic",
      "name": "Srđan Paunović",
      "avatar_url": "https://avatars1.githubusercontent.com/u/22815104?v=4",
      "profile": "https://github.com/SrdjanPaunovic",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "sideris",
      "name": "Petros G. Sideris",
      "avatar_url": "https://avatars3.githubusercontent.com/u/5484694?v=4",
      "profile": "https://sideris.xyz/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "IAmPramod",
      "name": "Pramod Gupta",
      "avatar_url": "https://avatars1.githubusercontent.com/u/2184241?v=4",
      "profile": "https://www.linkedin.com/in/pramodgupta3/",
      "contributions": [
        "review"
      ]
    },
    {
      "login": "Amarnath510",
      "name": "Amarnath Chandana",
      "avatar_url": "https://avatars0.githubusercontent.com/u/4599623?v=4",
      "profile": "https://amarnath510.github.io/portfolio",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Anurag870",
      "name": "Anurag870",
      "avatar_url": "https://avatars1.githubusercontent.com/u/6295975?v=4",
      "profile": "https://github.com/Anurag870",
      "contributions": [
        "code",
        "doc"
      ]
    },
    {
      "login": "Deathnerd",
      "name": "Wes Gilleland",
      "avatar_url": "https://avatars0.githubusercontent.com/u/1685953?v=4",
      "profile": "http://theerroris.me",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Harshrajsinh",
      "name": "Harshraj Thakor",
      "avatar_url": "https://avatars2.githubusercontent.com/u/22811531?v=4",
      "profile": "https://github.com/Harshrajsinh",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "MaVdbussche",
      "name": "Martin Vandenbussche",
      "avatar_url": "https://avatars1.githubusercontent.com/u/26136934?v=4",
      "profile": "https://github.com/MaVdbussche",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "alexsomai",
      "name": "Alexandru Somai",
      "avatar_url": "https://avatars1.githubusercontent.com/u/5720977?v=4",
      "profile": "https://alexsomai.com",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "amogozov",
      "name": "Artur Mogozov",
      "avatar_url": "https://avatars3.githubusercontent.com/u/7372215?v=4",
      "profile": "https://github.com/amogozov",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "anthonycampbell",
      "name": "anthony",
      "avatar_url": "https://avatars3.githubusercontent.com/u/10249255?v=4",
      "profile": "https://github.com/anthonycampbell",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "christophercolumbusdog",
      "name": "Christian Cygnus",
      "avatar_url": "https://avatars1.githubusercontent.com/u/9342724?v=4",
      "profile": "http://ccygnus.com/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "dzmitryh",
      "name": "Dima Gubin",
      "avatar_url": "https://avatars2.githubusercontent.com/u/5390492?v=4",
      "profile": "https://about.me/dzmitryh",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "jjjimenez100",
      "name": "Joshua Jimenez",
      "avatar_url": "https://avatars3.githubusercontent.com/u/22243493?v=4",
      "profile": "https://github.com/jjjimenez100",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "kaiwinter",
      "name": "Kai Winter",
      "avatar_url": "https://avatars0.githubusercontent.com/u/110982?v=4",
      "profile": "http://about.me/kaiwinter",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "lbroman",
      "name": "lbroman",
      "avatar_url": "https://avatars1.githubusercontent.com/u/86007?v=4",
      "profile": "https://github.com/lbroman",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "pnowy",
      "name": "Przemek",
      "avatar_url": "https://avatars1.githubusercontent.com/u/3254609?v=4",
      "profile": "https://przemeknowak.com",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "prafful1",
      "name": "Prafful Agarwal",
      "avatar_url": "https://avatars0.githubusercontent.com/u/14350274?v=4",
      "profile": "https://github.com/prafful1",
      "contributions": [
        "content"
      ]
    },
    {
      "login": "sankypanhale",
      "name": "Sanket Panhale",
      "avatar_url": "https://avatars1.githubusercontent.com/u/6478783?v=4",
      "profile": "https://github.com/sankypanhale",
      "contributions": [
        "content"
      ]
    },
    {
      "login": "staillebois",
      "name": "staillebois",
      "avatar_url": "https://avatars0.githubusercontent.com/u/23701200?v=4",
      "profile": "https://github.com/staillebois",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "valdar-hu",
      "name": "Krisztián Nagy",
      "avatar_url": "https://avatars3.githubusercontent.com/u/17962817?v=4",
      "profile": "https://github.com/valdar-hu",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "vanogrid",
      "name": "Alexander Ivanov",
      "avatar_url": "https://avatars0.githubusercontent.com/u/4307918?v=4",
      "profile": "https://www.vanogrid.com",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "yosfik",
      "name": "Yosfik Alqadri",
      "avatar_url": "https://avatars3.githubusercontent.com/u/4850270?v=4",
      "profile": "https://github.com/yosfik",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "7agustibm",
      "name": "Agustí Becerra Milà",
      "avatar_url": "https://avatars0.githubusercontent.com/u/8149332?v=4",
      "profile": "https://github.com/7agustibm",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Juaanma",
      "name": "Juan Manuel Suárez",
      "avatar_url": "https://avatars3.githubusercontent.com/u/7390500?v=4",
      "profile": "https://github.com/Juaanma",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "LuigiCortese",
      "name": "Luigi Cortese",
      "avatar_url": "https://avatars0.githubusercontent.com/u/9956006?v=4",
      "profile": "http://www.devsedge.net/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Rzeposlaw",
      "name": "Katarzyna Rzepecka",
      "avatar_url": "https://avatars2.githubusercontent.com/u/18425745?v=4",
      "profile": "https://github.com/Rzeposlaw",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "akrystian",
      "name": "adamski.pro",
      "avatar_url": "https://avatars1.githubusercontent.com/u/6537430?v=4",
      "profile": "http://adamski.pro",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "baislsl",
      "name": "Shengli Bai",
      "avatar_url": "https://avatars0.githubusercontent.com/u/17060584?v=4",
      "profile": "https://github.com/baislsl",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "besok",
      "name": "Boris",
      "avatar_url": "https://avatars2.githubusercontent.com/u/29834592?v=4",
      "profile": "https://github.com/besok",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "dmitraver",
      "name": "Dmitry Avershin",
      "avatar_url": "https://avatars3.githubusercontent.com/u/1798156?v=4",
      "profile": "https://github.com/dmitraver",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "fanofxiaofeng",
      "name": "靳阳",
      "avatar_url": "https://avatars0.githubusercontent.com/u/3983683?v=4",
      "profile": "https://github.com/fanofxiaofeng",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "hoangnam2261",
      "name": "hoangnam2261",
      "avatar_url": "https://avatars2.githubusercontent.com/u/31692990?v=4",
      "profile": "https://github.com/hoangnam2261",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "jarpit96",
      "name": "Arpit Jain",
      "avatar_url": "https://avatars2.githubusercontent.com/u/10098713?v=4",
      "profile": "https://github.com/jarpit96",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "joningiwork",
      "name": "Jón Ingi Sveinbjörnsson",
      "avatar_url": "https://avatars2.githubusercontent.com/u/6115148?v=4",
      "profile": "http://joningi.net",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "kirill-vlasov",
      "name": "Kirill Vlasov",
      "avatar_url": "https://avatars3.githubusercontent.com/u/16112495?v=4",
      "profile": "https://github.com/kirill-vlasov",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "mitchellirvin",
      "name": "Mitchell Irvin",
      "avatar_url": "https://avatars0.githubusercontent.com/u/16233245?v=4",
      "profile": "http://mitchell-irvin.com",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "ranjeet-floyd",
      "name": "Ranjeet",
      "avatar_url": "https://avatars0.githubusercontent.com/u/1992972?v=4",
      "profile": "https://ranjeet-floyd.github.io",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Alwayswithme",
      "name": "PhoenixYip",
      "avatar_url": "https://avatars3.githubusercontent.com/u/3234786?v=4",
      "profile": "https://alwayswithme.github.io",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "MSaifAsif",
      "name": "M Saif Asif",
      "avatar_url": "https://avatars1.githubusercontent.com/u/6280554?v=4",
      "profile": "https://github.com/MSaifAsif",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "kanwarpreet25",
      "name": "kanwarpreet25",
      "avatar_url": "https://avatars0.githubusercontent.com/u/39183641?v=4",
      "profile": "https://github.com/kanwarpreet25",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "leonmak",
      "name": "Leon Mak",
      "avatar_url": "https://avatars3.githubusercontent.com/u/13071508?v=4",
      "profile": "http://leonmak.me",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "perwramdemark",
      "name": "Per Wramdemark",
      "avatar_url": "https://avatars2.githubusercontent.com/u/7052193?v=4",
      "profile": "http://www.wramdemark.se",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "waisuan",
      "name": "Evan Sia Wai Suan",
      "avatar_url": "https://avatars2.githubusercontent.com/u/10975700?v=4",
      "profile": "https://github.com/waisuan",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "AnaghaSasikumar",
      "name": "AnaghaSasikumar",
      "avatar_url": "https://avatars2.githubusercontent.com/u/42939261?v=4",
      "profile": "https://github.com/AnaghaSasikumar",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "christofferh",
      "name": "Christoffer Hamberg",
      "avatar_url": "https://avatars1.githubusercontent.com/u/767643?v=4",
      "profile": "https://christofferh.com",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "dgruntz",
      "name": "Dominik Gruntz",
      "avatar_url": "https://avatars0.githubusercontent.com/u/1516800?v=4",
      "profile": "https://github.com/dgruntz",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "hannespernpeintner",
      "name": "Hannes",
      "avatar_url": "https://avatars3.githubusercontent.com/u/1679437?v=4",
      "profile": "https://bitbucket.org/hannespernpeintner/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "leogtzr",
      "name": "Leo Gutiérrez Ramírez",
      "avatar_url": "https://avatars0.githubusercontent.com/u/1211969?v=4",
      "profile": "https://github.com/leogtzr",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "npczwh",
      "name": "Zhang WH",
      "avatar_url": "https://avatars0.githubusercontent.com/u/14066422?v=4",
      "profile": "https://github.com/npczwh",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "oconnelc",
      "name": "Christopher O'Connell",
      "avatar_url": "https://avatars0.githubusercontent.com/u/1112973?v=4",
      "profile": "https://github.com/oconnelc",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "giorgosmav21",
      "name": "George Mavroeidis",
      "avatar_url": "https://avatars2.githubusercontent.com/u/22855493?v=4",
      "profile": "https://github.com/giorgosmav21",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "hbothra15",
      "name": "Hemant Bothra",
      "avatar_url": "https://avatars1.githubusercontent.com/u/7418012?v=4",
      "profile": "https://github.com/hbothra15",
      "contributions": [
        "code",
        "design"
      ]
    },
    {
      "login": "igeligel",
      "name": "Kevin Peters",
      "avatar_url": "https://avatars1.githubusercontent.com/u/12736734?v=4",
      "profile": "https://www.kevinpeters.net/about/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "llorllale",
      "name": "George Aristy",
      "avatar_url": "https://avatars1.githubusercontent.com/u/2019896?v=4",
      "profile": "https://llorllale.github.io/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "mookkiah",
      "name": "Mahendran Mookkiah",
      "avatar_url": "https://avatars1.githubusercontent.com/u/8975264?v=4",
      "profile": "https://github.com/mookkiah",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Azureyjt",
      "name": "Azureyjt",
      "avatar_url": "https://avatars2.githubusercontent.com/u/18476317?v=4",
      "profile": "https://github.com/Azureyjt",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "vehpsr",
      "name": "gans",
      "avatar_url": "https://avatars2.githubusercontent.com/u/3133265?v=4",
      "profile": "https://github.com/vehpsr",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "ThatGuyWithTheHat",
      "name": "Matt",
      "avatar_url": "https://avatars0.githubusercontent.com/u/24470582?v=4",
      "profile": "https://github.com/ThatGuyWithTheHat",
      "contributions": [
        "content"
      ]
    },
    {
      "login": "gopinath-langote",
      "name": "Gopinath Langote",
      "avatar_url": "https://avatars2.githubusercontent.com/u/10210778?v=4",
      "profile": "https://www.linkedin.com/in/gopinathlangote/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "hoswey",
      "name": "Hoswey",
      "avatar_url": "https://avatars3.githubusercontent.com/u/3689445?v=4",
      "profile": "https://github.com/hoswey",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "amit2103",
      "name": "Amit Pandey",
      "avatar_url": "https://avatars3.githubusercontent.com/u/7566692?v=4",
      "profile": "https://github.com/amit2103",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "gwildor28",
      "name": "gwildor28",
      "avatar_url": "https://avatars0.githubusercontent.com/u/16000365?v=4",
      "profile": "https://github.com/gwildor28",
      "contributions": [
        "content"
      ]
    },
    {
      "login": "llitfkitfk",
      "name": "田浩",
      "avatar_url": "https://avatars1.githubusercontent.com/u/2404785?v=4",
      "profile": "https://t.me/paul_docker",
      "contributions": [
        "content"
      ]
    },
    {
      "login": "pitsios-s",
      "name": "Stamatis Pitsios",
      "avatar_url": "https://avatars1.githubusercontent.com/u/6773603?v=4",
      "profile": "https://twitter.com/StPitsios",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "qza",
      "name": "qza",
      "avatar_url": "https://avatars3.githubusercontent.com/u/233149?v=4",
      "profile": "https://github.com/qza",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Tschis",
      "name": "Rodolfo Forte",
      "avatar_url": "https://avatars1.githubusercontent.com/u/20662669?v=4",
      "profile": "http://tschis.github.io",
      "contributions": [
        "content"
      ]
    },
    {
      "login": "ankurkaushal",
      "name": "Ankur Kaushal",
      "avatar_url": "https://avatars2.githubusercontent.com/u/2236616?v=4",
      "profile": "https://github.com/ankurkaushal",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "okinskas",
      "name": "Ovidijus Okinskas",
      "avatar_url": "https://avatars0.githubusercontent.com/u/20372387?v=4",
      "profile": "https://www.linkedin.com/in/ovidijus-okinskas/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "robertt240",
      "name": "Robert Kasperczyk",
      "avatar_url": "https://avatars1.githubusercontent.com/u/9137432?v=4",
      "profile": "https://github.com/robertt240",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "trautonen",
      "name": "Tapio Rautonen",
      "avatar_url": "https://avatars3.githubusercontent.com/u/1641063?v=4",
      "profile": "https://github.com/trautonen",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "yorlov",
      "name": "Yuri Orlov",
      "avatar_url": "https://avatars0.githubusercontent.com/u/1595733?v=4",
      "profile": "http://vk.com/yuri.orlov",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "varunu28",
      "name": "Varun Upadhyay",
      "avatar_url": "https://avatars0.githubusercontent.com/u/7676016?v=4",
      "profile": "https://www.linkedin.com/in/varunu28/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "PalAditya",
      "name": "Aditya Pal",
      "avatar_url": "https://avatars2.githubusercontent.com/u/25523604?v=4",
      "profile": "https://github.com/PalAditya",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "grzesiekkedzior",
      "name": "grzesiekkedzior",
      "avatar_url": "https://avatars3.githubusercontent.com/u/23739158?v=4",
      "profile": "https://github.com/grzesiekkedzior",
      "contributions": [
        "code",
        "review"
      ]
    },
    {
      "login": "sivasubramanim",
      "name": "Sivasubramani M",
      "avatar_url": "https://avatars2.githubusercontent.com/u/51107434?v=4",
      "profile": "https://github.com/sivasubramanim",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "d4gg4d",
      "name": "Sami Airaksinen",
      "avatar_url": "https://avatars2.githubusercontent.com/u/99457?v=4",
      "profile": "https://github.com/d4gg4d",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "vertti",
      "name": "Janne Sinivirta",
      "avatar_url": "https://avatars0.githubusercontent.com/u/557751?v=4",
      "profile": "https://github.com/vertti",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Bobo1239",
      "name": "Boris-Chengbiao Zhou",
      "avatar_url": "https://avatars1.githubusercontent.com/u/2302947?v=4",
      "profile": "https://github.com/Bobo1239",
      "contributions": [
        "content"
      ]
    },
    {
      "login": "Jahhein",
      "name": "Jacob Hein",
      "avatar_url": "https://avatars2.githubusercontent.com/u/10779515?v=4",
      "profile": "https://jahhein.github.io",
      "contributions": [
        "content"
      ]
    },
    {
      "login": "iamrichardjones",
      "name": "Richard Jones",
      "avatar_url": "https://avatars3.githubusercontent.com/u/14842151?v=4",
      "profile": "https://github.com/iamrichardjones",
      "contributions": [
        "content"
      ]
    },
    {
      "login": "rachelcarmena",
      "name": "Rachel M. Carmena",
      "avatar_url": "https://avatars0.githubusercontent.com/u/22792183?v=4",
      "profile": "https://rachelcarmena.github.io",
      "contributions": [
        "content"
      ]
    },
    {
      "login": "zd-zero",
      "name": "Zaerald Denze Lungos",
      "avatar_url": "https://avatars0.githubusercontent.com/u/21978370?v=4",
      "profile": "https://zd-zero.github.io",
      "contributions": [
        "content"
      ]
    },
    {
      "login": "webpro",
      "name": "Lars Kappert",
      "avatar_url": "https://avatars1.githubusercontent.com/u/456426?v=4",
      "profile": "https://webpro.nl",
      "contributions": [
        "content"
      ]
    },
    {
      "login": "xiaod-dev",
      "name": "Mike Liu",
      "avatar_url": "https://avatars2.githubusercontent.com/u/21277644?v=4",
      "profile": "https://xiaod.info",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "charlesfinley",
      "name": "Matt Dolan",
      "avatar_url": "https://avatars1.githubusercontent.com/u/6307904?v=4",
      "profile": "https://github.com/charlesfinley",
      "contributions": [
        "code",
        "review"
      ]
    },
    {
      "login": "MananS77",
      "name": "Manan",
      "avatar_url": "https://avatars3.githubusercontent.com/u/21033516?v=4",
      "profile": "https://github.com/MananS77",
      "contributions": [
        "review"
      ]
    },
    {
      "login": "nishant",
      "name": "Nishant Arora",
      "avatar_url": "https://avatars2.githubusercontent.com/u/15331971?v=4",
      "profile": "https://github.com/nishant",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "raja-peeyush-kumar-singh",
      "name": "Peeyush",
      "avatar_url": "https://avatars0.githubusercontent.com/u/5496024?v=4",
      "profile": "https://github.com/raja-peeyush-kumar-singh",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "ravening",
      "name": "Rakesh",
      "avatar_url": "https://avatars1.githubusercontent.com/u/10645273?v=4",
      "profile": "https://github.com/ravening",
      "contributions": [
        "code",
        "review"
      ]
    },
    {
      "login": "vINCENT8888801",
      "name": "Wei Seng",
      "avatar_url": "https://avatars0.githubusercontent.com/u/8037883?v=4",
      "profile": "https://github.com/vINCENT8888801",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "ashishtrivedi16",
      "name": "Ashish Trivedi",
      "avatar_url": "https://avatars3.githubusercontent.com/u/23194128?v=4",
      "profile": "https://www.linkedin.com/in/ashish-trivedi-218379135/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "RayYH",
      "name": "洪月阳",
      "avatar_url": "https://avatars1.githubusercontent.com/u/41055099?v=4",
      "profile": "https://rayyounghong.com",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "xdvrx1",
      "name": "xdvrx1",
      "avatar_url": "https://avatars0.githubusercontent.com/u/47092464?v=4",
      "profile": "https://xdvrx1.github.io/",
      "contributions": [
        "review",
        "ideas"
      ]
    },
    {
      "login": "nahteb",
      "name": "Bethan Palmer",
      "avatar_url": "https://avatars3.githubusercontent.com/u/13121570?v=4",
      "profile": "https://github.com/nahteb",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "ToxicDreamz",
      "name": "Toxic Dreamz",
      "avatar_url": "https://avatars0.githubusercontent.com/u/45225562?v=4",
      "profile": "https://github.com/ToxicDreamz",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "edycutjong",
      "name": "Edy Cu Tjong",
      "avatar_url": "https://avatars1.githubusercontent.com/u/1098102?v=4",
      "profile": "http://www.edycutjong.com",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "mkrzywanski",
      "name": "Michał Krzywański",
      "avatar_url": "https://avatars0.githubusercontent.com/u/15279585?v=4",
      "profile": "https://github.com/mkrzywanski",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "stefanbirkner",
      "name": "Stefan Birkner",
      "avatar_url": "https://avatars1.githubusercontent.com/u/711349?v=4",
      "profile": "https://www.stefan-birkner.de",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "fedorskvorcov",
      "name": "Fedor Skvorcov",
      "avatar_url": "https://avatars3.githubusercontent.com/u/43882212?v=4",
      "profile": "https://github.com/fedorskvorcov",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "samilAyoub",
      "name": "samilAyoub",
      "avatar_url": "https://avatars0.githubusercontent.com/u/61546990?v=4",
      "profile": "https://github.com/samilAyoub",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "vdlald",
      "name": "Vladislav Golubinov",
      "avatar_url": "https://avatars0.githubusercontent.com/u/29997701?v=4",
      "profile": "https://github.com/vdlald",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "swarajsaaj",
      "name": "Swaraj",
      "avatar_url": "https://avatars2.githubusercontent.com/u/6285049?v=4",
      "profile": "https://github.com/swarajsaaj",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "ChFlick",
      "name": "Christoph Flick",
      "avatar_url": "https://avatars0.githubusercontent.com/u/4465376?v=4",
      "profile": "http://christophflick.de",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "Ascenio",
      "name": "Ascênio",
      "avatar_url": "https://avatars1.githubusercontent.com/u/7662016?v=4",
      "profile": "https://github.com/Ascenio",
      "contributions": [
        "review"
      ]
    },
    {
      "login": "dsibilio",
      "name": "Domenico Sibilio",
      "avatar_url": "https://avatars2.githubusercontent.com/u/24280982?v=4",
      "profile": "https://www.linkedin.com/in/domenico-sibilio/",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "akashchandwani",
      "name": "Akash Chandwani",
      "avatar_url": "https://avatars2.githubusercontent.com/u/3483277?v=4",
      "profile": "https://github.com/akashchandwani",
      "contributions": [
        "review"
      ]
    },
    {
      "login": "manannikov",
      "name": "Pavlo Manannikov",
      "avatar_url": "https://avatars2.githubusercontent.com/u/7019769?v=4",
      "profile": "http://www.linkedin.com/in/manannikov",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "eimanip",
      "name": "Eiman",
      "avatar_url": "https://avatars0.githubusercontent.com/u/20307301?v=4",
      "profile": "https://github.com/eimanip",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "OrangePants-R",
      "name": "Rocky",
      "avatar_url": "https://avatars0.githubusercontent.com/u/42976136?v=4",
      "profile": "https://github.com/OrangePants-R",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "ibrahimAlii",
      "name": "Ibrahim ali abdelghany",
      "avatar_url": "https://avatars2.githubusercontent.com/u/21141301?v=4",
      "profile": "https://ibrahimalii.github.io/",
      "contributions": [
        "review"
      ]
    },
    {
      "login": "gkulkarni2020",
      "name": "Girish Kulkarni",
      "avatar_url": "https://avatars3.githubusercontent.com/u/5161548?v=4",
      "profile": "https://github.com/gkulkarni2020",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "omk13",
      "name": "Omar Karazoun",
      "avatar_url": "https://avatars0.githubusercontent.com/u/59054172?v=4",
      "profile": "https://github.com/omk13",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "jeff303",
      "name": "Jeff Evans",
      "avatar_url": "https://avatars0.githubusercontent.com/u/3521562?v=4",
      "profile": "https://github.com/jeff303",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "viveksb007",
      "name": "Vivek Singh",
      "avatar_url": "https://avatars1.githubusercontent.com/u/12713808?v=4",
      "profile": "https://viveksb007.github.io",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "siavashsoleymani",
      "name": "siavash",
      "avatar_url": "https://avatars2.githubusercontent.com/u/18074419?v=4",
      "profile": "https://github.com/siavashsoleymani",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "ruchpeanuts",
      "name": "ruchpeanuts",
      "avatar_url": "https://avatars0.githubusercontent.com/u/29301900?v=4",
      "profile": "https://github.com/ruchpeanuts",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "warp125",
      "name": "warp125",
      "avatar_url": "https://avatars1.githubusercontent.com/u/48073115?v=4",
      "profile": "https://github.com/warp125",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "tkhadir",
      "name": "KHADIR Tayeb",
      "avatar_url": "https://avatars1.githubusercontent.com/u/45130488?v=4",
      "profile": "http://libkhadir.fr",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "ignite1771",
      "name": "ignite1771",
      "avatar_url": "https://avatars2.githubusercontent.com/u/59446563?v=4",
      "profile": "https://github.com/ignite1771",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "demirhalil",
      "name": "Halil Demir",
      "avatar_url": "https://avatars1.githubusercontent.com/u/22895118?v=4",
      "profile": "https://github.com/demirhalil",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "rohit10000",
      "name": "Rohit Singh",
      "avatar_url": "https://avatars.githubusercontent.com/u/20845565?v=4",
      "profile": "https://github.com/rohit10000",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "byoungju94",
      "name": "byoungju94",
      "avatar_url": "https://avatars.githubusercontent.com/u/42516378?v=4",
      "profile": "https://github.com/byoungju94",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "moustafafarhat",
      "name": "Moustafa Farhat",
      "avatar_url": "https://avatars.githubusercontent.com/u/38836727?v=4",
      "profile": "https://github.com/moustafafarhat",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "richardmr36",
      "name": "Martel Richard",
      "avatar_url": "https://avatars.githubusercontent.com/u/19147333?v=4",
      "profile": "https://github.com/richardmr36",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "va1m",
      "name": "va1m",
      "avatar_url": "https://avatars.githubusercontent.com/u/17025445?v=4",
      "profile": "https://github.com/va1m",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "noamgrinch",
      "name": "Noam Greenshtain",
      "avatar_url": "https://avatars.githubusercontent.com/u/31648669?v=4",
      "profile": "https://github.com/noamgrinch",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "qfxl",
      "name": "yonghong Xu",
      "avatar_url": "https://avatars.githubusercontent.com/u/14086462?v=4",
      "profile": "https://xuyonghong.cn/",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "jinishavora",
      "name": "jinishavora",
      "avatar_url": "https://avatars.githubusercontent.com/u/40777762?v=4",
      "profile": "https://www.linkedin.com/in/jinisha-vora",
      "contributions": [
        "review",
        "code"
      ]
    },
    {
      "login": "eas5",
      "name": "Elvys Soares",
      "avatar_url": "https://avatars.githubusercontent.com/u/50836521?v=4",
      "profile": "https://github.com/eas5",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "zWeBrain",
      "name": "zWeBrain",
      "avatar_url": "https://avatars.githubusercontent.com/u/46642512?v=4",
      "profile": "https://github.com/zWeBrain",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Al-assad",
      "name": "余林颖",
      "avatar_url": "https://avatars.githubusercontent.com/u/22493821?v=4",
      "profile": "https://al-assad.github.io/notion/",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "STudio26",
      "name": "Alain",
      "avatar_url": "https://avatars.githubusercontent.com/u/6988911?v=4",
      "profile": "https://github.com/STudio26",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "DEV-VRUPER",
      "name": "VR",
      "avatar_url": "https://avatars.githubusercontent.com/u/30525467?v=4",
      "profile": "https://github.com/DEV-VRUPER",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "JackieNim",
      "name": "JackieNim",
      "avatar_url": "https://avatars.githubusercontent.com/u/4138836?v=4",
      "profile": "https://github.com/JackieNim",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "EdisonE3",
      "name": "EdisonE3",
      "avatar_url": "https://avatars.githubusercontent.com/u/52118917?v=4",
      "profile": "https://github.com/EdisonE3",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "tao-sun2",
      "name": "Tao",
      "avatar_url": "https://avatars.githubusercontent.com/u/66189688?v=4",
      "profile": "https://github.com/tao-sun2",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "JuanManuelAbate",
      "name": "Juan Manuel Abate",
      "avatar_url": "https://avatars.githubusercontent.com/u/16357060?v=4",
      "profile": "https://github.com/JuanManuelAbate",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "Xenilo137",
      "name": "Xenilo137",
      "avatar_url": "https://avatars.githubusercontent.com/u/24865069?v=4",
      "profile": "https://github.com/Xenilo137",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "samuelpsouza",
      "name": "Samuel Souza",
      "avatar_url": "https://avatars.githubusercontent.com/u/17254162?v=4",
      "profile": "https://www.linkedin.com/in/souzasamuel/",
      "contributions": [
        "code",
        "doc"
      ]
    },
    {
      "login": "marlo2222",
      "name": "Marlo Henrique",
      "avatar_url": "https://avatars.githubusercontent.com/u/40809563?v=4",
      "profile": "https://github.com/marlo2222",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "AndriyPyzh",
      "name": "AndriyPyzh",
      "avatar_url": "https://avatars.githubusercontent.com/u/57706635?v=4",
      "profile": "https://github.com/AndriyPyzh",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "karthikbhat13",
      "name": "karthikbhat13",
      "avatar_url": "https://avatars.githubusercontent.com/u/22431014?v=4",
      "profile": "https://github.com/karthikbhat13",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "mortezaadi",
      "name": "Morteza Adigozalpour",
      "avatar_url": "https://avatars.githubusercontent.com/u/1329687?v=4",
      "profile": "https://github.com/mortezaadi",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "tan31989",
      "name": "Nagaraj Tantri",
      "avatar_url": "https://avatars.githubusercontent.com/u/3784194?v=4",
      "profile": "https://stackoverflow.com/users/308565/nagaraj-tantri",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "frascu",
      "name": "Francesco Scuccimarri",
      "avatar_url": "https://avatars.githubusercontent.com/u/7107651?v=4",
      "profile": "https://github.com/frascu",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Conhan93",
      "name": "Conny Hansson",
      "avatar_url": "https://avatars.githubusercontent.com/u/71334757?v=4",
      "profile": "https://github.com/Conhan93",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "muklasr",
      "name": "Muklas Rahmanto",
      "avatar_url": "https://avatars.githubusercontent.com/u/43443753?v=4",
      "profile": "http://muklasr.medium.com",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "VxDxK",
      "name": "Vadim",
      "avatar_url": "https://avatars.githubusercontent.com/u/38704817?v=4",
      "profile": "https://github.com/VxDxK",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "sims-keshri",
      "name": "Simran Keshri",
      "avatar_url": "https://avatars.githubusercontent.com/u/62168475?v=4",
      "profile": "https://github.com/sims-keshri",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "JCarlosR",
      "name": "JCarlos",
      "avatar_url": "https://avatars.githubusercontent.com/u/3101238?v=4",
      "profile": "https://programacionymas.com",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "Dev-AliGhasemi",
      "name": "Ali Ghasemi",
      "avatar_url": "https://avatars.githubusercontent.com/u/60359433?v=4",
      "profile": "https://www.mrmoshkel.ir",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "carldea",
      "name": "Carl Dea",
      "avatar_url": "https://avatars.githubusercontent.com/u/1594624?v=4",
      "profile": "http://carlfx.wordpress.com",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Mozartuss",
      "name": "Mozartus",
      "avatar_url": "https://avatars.githubusercontent.com/u/32893711?v=4",
      "profile": "https://github.com/Mozartuss",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "ManviGoel26",
      "name": "Manvi Goel",
      "avatar_url": "https://avatars.githubusercontent.com/u/55682355?v=4",
      "profile": "https://github.com/ManviGoel26",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "blueberry404",
      "name": "Anum Amin",
      "avatar_url": "https://avatars.githubusercontent.com/u/39243539?v=4",
      "profile": "https://github.com/blueberry404",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "uh-zz",
      "name": "Reo Uehara",
      "avatar_url": "https://avatars.githubusercontent.com/u/47747828?v=4",
      "profile": "https://uh-zz.github.io/blog/",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "Fiordy",
      "name": "Fiordy",
      "avatar_url": "https://avatars.githubusercontent.com/u/53420573?v=4",
      "profile": "https://github.com/Fiordy",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "harshalkh",
      "name": "Harshal",
      "avatar_url": "https://avatars.githubusercontent.com/u/37841724?v=4",
      "profile": "https://github.com/harshalkh",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "vashisthabhinav",
      "name": "Abhinav Vashisth",
      "avatar_url": "https://avatars.githubusercontent.com/u/89785800?v=4",
      "profile": "https://www.linkedin.com/in/abhinav-vashisth-06613b208/",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "Kevinyl3",
      "name": "Kevin",
      "avatar_url": "https://avatars.githubusercontent.com/u/47126749?v=4",
      "profile": "http://no website",
      "contributions": [
        "review",
        "code"
      ]
    },
    {
      "login": "Shrirang97",
      "name": "Shrirang",
      "avatar_url": "https://avatars.githubusercontent.com/u/28738668?v=4",
      "profile": "https://github.com/Shrirang97",
      "contributions": [
        "review",
        "code"
      ]
    },
    {
      "login": "interactwithankush",
      "name": "interactwithankush",
      "avatar_url": "https://avatars.githubusercontent.com/u/18613127?v=4",
      "profile": "https://github.com/interactwithankush",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "yuhangbin",
      "name": "CharlieYu",
      "avatar_url": "https://avatars.githubusercontent.com/u/17566866?v=4",
      "profile": "https://github.com/yuhangbin",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Leisterbecker",
      "name": "Leisterbecker",
      "avatar_url": "https://avatars.githubusercontent.com/u/20650323?v=4",
      "profile": "https://github.com/Leisterbecker",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "castleKing1997",
      "name": "DragonDreamer",
      "avatar_url": "https://avatars.githubusercontent.com/u/35420129?v=4",
      "profile": "http://rosaecrucis.cn",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "ShivanshCharak",
      "name": "ShivanshCharak",
      "avatar_url": "https://avatars.githubusercontent.com/u/96943825?v=4",
      "profile": "https://github.com/ShivanshCharak",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "HattoriHenzo",
      "name": "HattoriHenzo",
      "avatar_url": "https://avatars.githubusercontent.com/u/5141285?v=4",
      "profile": "https://github.com/HattoriHenzo",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "arnabsen1729",
      "name": "Arnab Sen",
      "avatar_url": "https://avatars.githubusercontent.com/u/51032928?v=4",
      "profile": "http://arnabsen.bio.link",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "mohanaraosv",
      "name": "MohanaRao SV",
      "avatar_url": "https://avatars.githubusercontent.com/u/1470114?v=4",
      "profile": "https://javaforlife.wordpress.com/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "yonatankarp",
      "name": "Yonatan Karp-Rudin",
      "avatar_url": "https://avatars.githubusercontent.com/u/14914865?v=4",
      "profile": "https://github.com/yonatankarp",
      "contributions": [
        "code",
        "review"
      ]
    },
    {
      "login": "GustavoOliani",
      "name": "Oliani",
      "avatar_url": "https://avatars.githubusercontent.com/u/25756378?v=4",
      "profile": "https://github.com/GustavoOliani",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Liu-rj",
      "name": "Renjie LIU",
      "avatar_url": "https://avatars.githubusercontent.com/u/64826925?v=4",
      "profile": "https://github.com/Liu-rj",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "TreeFireMen",
      "name": "perfect guy",
      "avatar_url": "https://avatars.githubusercontent.com/u/54127694?v=4",
      "profile": "https://github.com/TreeFireMen",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "xyllq999",
      "name": "xyllq999",
      "avatar_url": "https://avatars.githubusercontent.com/u/72729433?v=4",
      "profile": "https://github.com/xyllq999",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "dmdbilal",
      "name": "Mohamed Bilal",
      "avatar_url": "https://avatars.githubusercontent.com/u/91405690?v=4",
      "profile": "https://github.com/dmdbilal",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "karshil2309",
      "name": "Karshil sheth",
      "avatar_url": "https://avatars.githubusercontent.com/u/37497287?v=4",
      "profile": "https://www.linkedin.com/in/karshilsheth/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "kongleong86",
      "name": "kongleong86",
      "avatar_url": "https://avatars.githubusercontent.com/u/3745455?v=4",
      "profile": "https://github.com/kongleong86",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "aitorfi",
      "name": "Aitor Fidalgo Sánchez",
      "avatar_url": "https://avatars.githubusercontent.com/u/64830228?v=4",
      "profile": "https://github.com/aitorfi",
      "contributions": [
        "translation",
        "doc",
        "review"
      ]
    },
    {
      "login": "HeVictor",
      "name": "Victor He",
      "avatar_url": "https://avatars.githubusercontent.com/u/20733994?v=4",
      "profile": "https://github.com/HeVictor",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "m-inh",
      "name": "Minh Nguyen",
      "avatar_url": "https://avatars.githubusercontent.com/u/10632233?v=4",
      "profile": "http://m-inh.github.io/",
      "contributions": [
        "translation",
        "doc"
      ]
    },
    {
      "login": "HeVictor",
      "name": "Victor He",
      "avatar_url": "https://avatars.githubusercontent.com/u/20733994?v=4",
      "profile": "https://github.com/HeVictor",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "YichuanSun",
      "name": "yiichan",
      "avatar_url": "https://avatars.githubusercontent.com/u/30886176?v=4",
      "profile": "https://github.com/YichuanSun",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "PanSem",
      "name": "Pan Sem",
      "avatar_url": "https://avatars.githubusercontent.com/u/43316964?v=4",
      "profile": "https://github.com/PanSem",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "zhoumengyks",
      "name": "zhoumengyks",
      "avatar_url": "https://avatars.githubusercontent.com/u/111965739?v=4",
      "profile": "https://github.com/zhoumengyks",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "you",
      "name": "you",
      "avatar_url": "https://avatars.githubusercontent.com/u/57100752?v=4",
      "profile": "https://github.com/you",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "Thanks",
      "name": "Thanks",
      "avatar_url": "https://avatars.githubusercontent.com/u/1121545?v=4",
      "profile": "https://github.com/thanks",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "lazy-pr0grammer",
      "name": "LazyProgrammer",
      "avatar_url": "https://avatars.githubusercontent.com/u/87204946?v=4",
      "profile": "https://github.com/lazy-pr0grammer",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "mdfaizanahmed786",
      "name": "Mohammed Faizan Ahmed",
      "avatar_url": "https://avatars.githubusercontent.com/u/85175130?v=4",
      "profile": "https://github.com/mdfaizanahmed786",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "burno1",
      "name": "Bruno Fernandes",
      "avatar_url": "https://avatars.githubusercontent.com/u/39165280?v=4",
      "profile": "https://github.com/burno1",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "SammanPali",
      "name": "SammanPali",
      "avatar_url": "https://avatars.githubusercontent.com/u/110753804?v=4",
      "profile": "https://github.com/SammanPali",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "LeseChe",
      "name": "Qixiang Chen",
      "avatar_url": "https://avatars.githubusercontent.com/u/79553089?v=4",
      "profile": "https://github.com/LeseChe",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "shouryamanekar",
      "name": "Shourya Manekar",
      "avatar_url": "https://avatars.githubusercontent.com/u/72398499?v=4",
      "profile": "https://github.com/shouryamanekar",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "seongkyu-lim",
      "name": "Alan",
      "avatar_url": "https://avatars.githubusercontent.com/u/55138532?v=4",
      "profile": "https://seongkyu-lim.github.io/Blog/",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "JanFidor",
      "name": "JanFidor",
      "avatar_url": "https://avatars.githubusercontent.com/u/66260538?v=4",
      "profile": "https://github.com/JanFidor",
      "contributions": [
        "code",
        "doc"
      ]
    },
    {
      "login": "drakulavich",
      "name": "Anton Yakutovich",
      "avatar_url": "https://avatars.githubusercontent.com/u/129260?v=4",
      "profile": "https://github.com/drakulavich",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "steph88ss",
      "name": "steph88ss",
      "avatar_url": "https://avatars.githubusercontent.com/u/111041594?v=4",
      "profile": "https://github.com/steph88ss",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "0xYujan",
      "name": "Yujan Ranjitkar",
      "avatar_url": "https://avatars.githubusercontent.com/u/63731234?v=4",
      "profile": "http://yujanranjitkar.com.np",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "yusha-g",
      "name": "yusha-g",
      "avatar_url": "https://avatars.githubusercontent.com/u/110189579?v=4",
      "profile": "https://github.com/yusha-g",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "robertvolkmann",
      "name": "Robert Volkmann",
      "avatar_url": "https://avatars.githubusercontent.com/u/20912167?v=4",
      "profile": "https://github.com/robertvolkmann",
      "contributions": [
        "code",
        "review"
      ]
    },
    {
      "login": "bipin-k",
      "name": "Bipin Kumar Chaurasia",
      "avatar_url": "https://avatars.githubusercontent.com/u/21119358?v=4",
      "profile": "https://github.com/bipin-k",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "KyleSong30",
      "name": "KyleSong30",
      "avatar_url": "https://avatars.githubusercontent.com/u/100892032?v=4",
      "profile": "https://github.com/KyleSong30",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "u7281975",
      "name": "u7281975",
      "avatar_url": "https://avatars.githubusercontent.com/u/111095623?v=4",
      "profile": "https://github.com/u7281975",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "harshalkhachane",
      "name": "harshalkhachane",
      "avatar_url": "https://avatars.githubusercontent.com/u/92866584?v=4",
      "profile": "https://github.com/harshalkhachane",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "ec-026",
      "name": "Tejas Singh",
      "avatar_url": "https://avatars.githubusercontent.com/u/95495584?v=4",
      "profile": "https://github.com/ec-026",
      "contributions": [
        "doc",
        "translation"
      ]
    },
    {
      "login": "artfuldev",
      "name": "Sudarsan Balaji",
      "avatar_url": "https://avatars.githubusercontent.com/u/3091087?v=4",
      "profile": "https://journal.artfuldev.com",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "vaibhav-if",
      "name": "Vaibhav Agrawal",
      "avatar_url": "https://avatars.githubusercontent.com/u/78676331?v=4",
      "profile": "https://www.linkedin.com/in/vaibhav-agr/",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "u7275858",
      "name": "u7275858",
      "avatar_url": "https://avatars.githubusercontent.com/u/110969489?v=4",
      "profile": "https://github.com/u7275858",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "prasad-333",
      "name": "prasad-333",
      "avatar_url": "https://avatars.githubusercontent.com/u/37048768?v=4",
      "profile": "https://gist.github.com/prasad-333",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "JurenXu",
      "name": "JurenXu",
      "avatar_url": "https://avatars.githubusercontent.com/u/101047547?v=4",
      "profile": "https://github.com/JurenXu",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "murphShaw",
      "name": "murphShaw",
      "avatar_url": "https://avatars.githubusercontent.com/u/111167533?v=4",
      "profile": "https://github.com/murphShaw",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "XianWu99",
      "name": "XianWu99",
      "avatar_url": "https://avatars.githubusercontent.com/u/111103319?v=4",
      "profile": "https://github.com/XianWu99",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "JoshuaSinglaANU",
      "name": "JoshuaSinglaANU",
      "avatar_url": "https://avatars.githubusercontent.com/u/109902734?v=4",
      "profile": "https://github.com/JoshuaSinglaANU",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "ricardo-ramos-moura",
      "name": "Ricardo Ramos",
      "avatar_url": "https://avatars.githubusercontent.com/u/36955909?v=4",
      "profile": "http://www.linkedin.com/in/ricardo-ramos-moura",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "zhrfrd",
      "name": "Farid Zouheir",
      "avatar_url": "https://avatars.githubusercontent.com/u/72947724?v=4",
      "profile": "https://zhrfrd.github.io/faridzouheir/",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "Viniberaldo",
      "name": "Vinícius A. B.",
      "avatar_url": "https://avatars.githubusercontent.com/u/91766068?v=4",
      "profile": "https://www.linkedin.com/in/vinicius-beraldo/",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "StefanelStan",
      "name": "Stefanel Stan",
      "avatar_url": "https://avatars.githubusercontent.com/u/25990078?v=4",
      "profile": "http://www.linkedin.com/in/stefanel-stan/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "bhati00",
      "name": "Prince bhati",
      "avatar_url": "https://avatars.githubusercontent.com/u/79313705?v=4",
      "profile": "https://github.com/bhati00",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "wulangcode",
      "name": "WuLang",
      "avatar_url": "https://avatars.githubusercontent.com/u/48200100?v=4",
      "profile": "https://github.com/wulangcode",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "hkattt",
      "name": "Hugo Kat",
      "avatar_url": "https://avatars.githubusercontent.com/u/54300585?v=4",
      "profile": "https://github.com/hkattt",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "shivu2002a",
      "name": "Shivanagouda Agasimani",
      "avatar_url": "https://avatars.githubusercontent.com/u/88313126?v=4",
      "profile": "https://github.com/shivu2002a",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Ap284",
      "name": "Aparna",
      "avatar_url": "https://avatars.githubusercontent.com/u/13827254?v=4",
      "profile": "https://github.com/Ap284",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "girolamo-giordano",
      "name": "Girolamo Giordano",
      "avatar_url": "https://avatars.githubusercontent.com/u/56109364?v=4",
      "profile": "https://github.com/girolamo-giordano",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "Chak-C",
      "name": "Chak-C",
      "avatar_url": "https://avatars.githubusercontent.com/u/114961815?v=4",
      "profile": "https://github.com/Chak-C",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "nakul251197",
      "name": "Nakul Nambiar",
      "avatar_url": "https://avatars.githubusercontent.com/u/39953357?v=4",
      "profile": "https://github.com/nakul251197",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "KarmaTashiCat",
      "name": "KarmaTashiCat",
      "avatar_url": "https://avatars.githubusercontent.com/u/76797146?v=4",
      "profile": "https://github.com/KarmaTashiCat",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "Marikattt",
      "name": "marikattt",
      "avatar_url": "https://avatars.githubusercontent.com/u/49302558?v=4",
      "profile": "https://github.com/Marikattt",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Harsh4902",
      "name": "Hashvardhan Parmar",
      "avatar_url": "https://avatars.githubusercontent.com/u/84663071?v=4",
      "profile": "https://github.com/Harsh4902",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "yongyongkr",
      "name": "YongHwan",
      "avatar_url": "https://avatars.githubusercontent.com/u/67625677?v=4",
      "profile": "https://hwan33.tistory.com/",
      "contributions": [
        "doc",
        "translation"
      ]
    },
    {
      "login": "shogohida",
      "name": "Shogo Hida",
      "avatar_url": "https://avatars.githubusercontent.com/u/10365357?v=4",
      "profile": "https://github.com/shogohida",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "Regyl",
      "name": "Eugene",
      "avatar_url": "https://avatars.githubusercontent.com/u/48804404?v=4",
      "profile": "https://github.com/Regyl",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "piyush280599",
      "name": "Piyush",
      "avatar_url": "https://avatars.githubusercontent.com/u/118425491?v=4",
      "profile": "https://github.com/piyush280599",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "rahul-raj",
      "name": "Rahul Raj",
      "avatar_url": "https://avatars.githubusercontent.com/u/517415?v=4",
      "profile": "https://www.linkedin.com/in/rahulraj90/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "bharathkalyans",
      "name": "Bharath Kalyan S",
      "avatar_url": "https://avatars.githubusercontent.com/u/49526472?v=4",
      "profile": "https://www.linkedin.com/in/bharathkalyans/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "saiteja55",
      "name": "Saiteja Reddy",
      "avatar_url": "https://avatars.githubusercontent.com/u/13088886?v=4",
      "profile": "https://www.linkedin.com/in/thisissaiteja/",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "TheClerici",
      "name": "Enrique Clerici",
      "avatar_url": "https://avatars.githubusercontent.com/u/115318468?v=4",
      "profile": "http://twitch.tv/clerici",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "ramilS",
      "name": "Ramil Sayetov",
      "avatar_url": "https://avatars.githubusercontent.com/u/13589365?v=4",
      "profile": "https://github.com/ramilS",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "pikapiu",
      "name": "东方未白",
      "avatar_url": "https://avatars.githubusercontent.com/u/50656114?v=4",
      "profile": "https://pkq.xyz",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "swashb0ckler",
      "name": "Fredrik Sejr",
      "avatar_url": "https://avatars.githubusercontent.com/u/62488841?v=4",
      "profile": "https://github.com/swashb0ckler",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "akshatarora0013",
      "name": "akshatarora0013",
      "avatar_url": "https://avatars.githubusercontent.com/u/102645021?v=4",
      "profile": "https://github.com/akshatarora0013",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "MugheesQasim",
      "name": "Mughees Qasim",
      "avatar_url": "https://avatars.githubusercontent.com/u/45170085?v=4",
      "profile": "https://mugheesqasimmq.wixsite.com/portfolio-website",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "behappyleee",
      "name": "behappyleee",
      "avatar_url": "https://avatars.githubusercontent.com/u/72903623?v=4",
      "profile": "https://github.com/behappyleee",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "Ayush-Thakur-geek",
      "name": "Ayush Thakur",
      "avatar_url": "https://avatars.githubusercontent.com/u/116510022?v=4",
      "profile": "https://github.com/Ayush-Thakur-geek",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "boscha1",
      "name": "Anthony Bosch",
      "avatar_url": "https://avatars.githubusercontent.com/u/55814237?v=4",
      "profile": "https://github.com/boscha1",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "AnsonTran",
      "name": "trananso",
      "avatar_url": "https://avatars.githubusercontent.com/u/37683428?v=4",
      "profile": "https://github.com/AnsonTran",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "beef-e",
      "name": "Giammaria Biffi",
      "avatar_url": "https://avatars.githubusercontent.com/u/102854627?v=4",
      "profile": "https://github.com/beef-e",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "saif7159",
      "name": "Saiful Haque",
      "avatar_url": "https://avatars.githubusercontent.com/u/36008396?v=4",
      "profile": "https://github.com/saif7159",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "JabezBrew",
      "name": "JabezBrew",
      "avatar_url": "https://avatars.githubusercontent.com/u/74483609?v=4",
      "profile": "https://github.com/JabezBrew",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "konstantin-goldman",
      "name": "konstantin-goldman",
      "avatar_url": "https://avatars.githubusercontent.com/u/47669472?v=4",
      "profile": "https://github.com/konstantin-goldman",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "tiennm99",
      "name": "Tien Nguyen Minh",
      "avatar_url": "https://avatars.githubusercontent.com/u/39063457?v=4",
      "profile": "https://github.com/tiennm99",
      "contributions": [
        "code",
        "translation"
      ]
    },
    {
      "login": "VladimirCreator",
      "name": "Vladimir",
      "avatar_url": "https://avatars.githubusercontent.com/u/49140851?v=4",
      "profile": "https://github.com/VladimirCreator",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "surjendu104",
      "name": "Surjendu",
      "avatar_url": "https://avatars.githubusercontent.com/u/101238933?v=4",
      "profile": "https://surjendu-pal.netlify.app/",
      "contributions": [
        "translation",
        "code"
      ]
    },
    {
      "login": "bakazhou",
      "name": "bakazhou",
      "avatar_url": "https://avatars.githubusercontent.com/u/81795984?v=4",
      "profile": "https://github.com/bakazhou",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Owen-CH-Leung",
      "name": "Owen Leung",
      "avatar_url": "https://avatars.githubusercontent.com/u/43698890?v=4",
      "profile": "https://github.com/Owen-CH-Leung",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "thestbar",
      "name": "Stavros Barousis",
      "avatar_url": "https://avatars.githubusercontent.com/u/20283468?v=4",
      "profile": "https://github.com/thestbar",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "ibrahim89",
      "name": "Syyed Ibrahim Abdullah",
      "avatar_url": "https://avatars.githubusercontent.com/u/20753671?v=4",
      "profile": "https://github.com/ibrahim89",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "JanisZhang",
      "name": "JiaDi Zhang",
      "avatar_url": "https://avatars.githubusercontent.com/u/95570096?v=4",
      "profile": "https://github.com/JanisZhang",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "sanchitbansal10",
      "name": "Sanchit Bansal",
      "avatar_url": "https://avatars.githubusercontent.com/u/16536741?v=4",
      "profile": "https://github.com/sanchitbansal10",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "mm-saiful6854",
      "name": "Md Saiful Islam",
      "avatar_url": "https://avatars.githubusercontent.com/u/48361160?v=4",
      "profile": "https://github.com/mm-saiful6854",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "AddeusExMachina",
      "name": "Antonio Addeo",
      "avatar_url": "https://avatars.githubusercontent.com/u/39912670?v=4",
      "profile": "https://github.com/AddeusExMachina",
      "contributions": [
        "doc",
        "code"
      ]
    },
    {
      "login": "Upendra-Allagadda",
      "name": "Allagadda Sai Upendranath",
      "avatar_url": "https://avatars.githubusercontent.com/u/25962010?v=4",
      "profile": "https://github.com/Upendra-Allagadda",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "mathbraga",
      "name": "Matheus Braga",
      "avatar_url": "https://avatars.githubusercontent.com/u/31048764?v=4",
      "profile": "https://www.linkedin.com/in/mobraga/",
      "contributions": [
        "translation",
        "doc"
      ]
    },
    {
      "login": "satyabarghav",
      "name": "Appari Satya Barghav",
      "avatar_url": "https://avatars.githubusercontent.com/u/36763910?v=4",
      "profile": "https://github.com/satyabarghav",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "mribeirodantas",
      "name": "Marcel Ribeiro-Dantas",
      "avatar_url": "https://avatars.githubusercontent.com/u/1023197?v=4",
      "profile": "http://mribeirodantas.me",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "hamexhanif",
      "name": "Muhammad Hanif Amrullah",
      "avatar_url": "https://avatars.githubusercontent.com/u/74542852?v=4",
      "profile": "https://github.com/hamexhanif",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "JackH408",
      "name": "JackH408",
      "avatar_url": "https://avatars.githubusercontent.com/u/141727294?v=4",
      "profile": "https://github.com/JackH408",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "versus2004",
      "name": "Shubham",
      "avatar_url": "https://avatars.githubusercontent.com/u/132815243?v=4",
      "profile": "https://github.com/versus2004",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "inishantjain",
      "name": "Nishant Jain",
      "avatar_url": "https://avatars.githubusercontent.com/u/121454072?v=4",
      "profile": "https://github.com/inishantjain",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "hallowshaw",
      "name": "Rhitam Chaudhury",
      "avatar_url": "https://avatars.githubusercontent.com/u/90751158?v=4",
      "profile": "https://github.com/hallowshaw",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "JerryZhao275",
      "name": "JerryZhao275",
      "avatar_url": "https://avatars.githubusercontent.com/u/132061401?v=4",
      "profile": "https://github.com/JerryZhao275",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "leonardol",
      "name": "Leonardo Lisanti",
      "avatar_url": "https://avatars.githubusercontent.com/u/1445890?v=4",
      "profile": "https://twitter.com/llisant",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "Yenniferh",
      "name": "Yennifer Herrera",
      "avatar_url": "https://avatars.githubusercontent.com/u/19285706?v=4",
      "profile": "http://www.linkedin.com/in/yenniferh",
      "contributions": [
        "translation",
        "review"
      ]
    },
    {
      "login": "jnniu-n",
      "name": "jnniu-n",
      "avatar_url": "https://avatars.githubusercontent.com/u/141746282?v=4",
      "profile": "https://github.com/jnniu-n",
      "contributions": [
        "translation",
        "doc"
      ]
    },
    {
      "login": "miguel-is-coding",
      "name": "Miguel Angel Perez Garcia",
      "avatar_url": "https://avatars.githubusercontent.com/u/48435117?v=4",
      "profile": "https://github.com/miguel-is-coding",
      "contributions": [
        "review",
        "translation"
      ]
    },
    {
      "login": "SuwanSankaja",
      "name": "Suwan Sankaja",
      "avatar_url": "https://avatars.githubusercontent.com/u/86839778?v=4",
      "profile": "https://github.com/SuwanSankaja",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "Iamalok007",
      "name": "alok",
      "avatar_url": "https://avatars.githubusercontent.com/u/97467835?v=4",
      "profile": "https://github.com/Iamalok007",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "dlvideira",
      "name": "Daniel Lisboa",
      "avatar_url": "https://avatars.githubusercontent.com/u/53951425?v=4",
      "profile": "https://github.com/dlvideira",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "ComplexOW",
      "name": "Sam Powell",
      "avatar_url": "https://avatars.githubusercontent.com/u/105279107?v=4",
      "profile": "https://github.com/ComplexOW",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "jppf22",
      "name": "João Fernandes",
      "avatar_url": "https://avatars.githubusercontent.com/u/104360594?v=4",
      "profile": "https://github.com/jppf22",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "HongGeonUi",
      "name": "Hong Geon-ui",
      "avatar_url": "https://avatars.githubusercontent.com/u/89684956?v=4",
      "profile": "https://github.com/HongGeonUi",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "ylcn91",
      "name": "Doksanbir",
      "avatar_url": "https://avatars.githubusercontent.com/u/7249450?v=4",
      "profile": "https://github.com/ylcn91",
      "contributions": [
        "code",
        "doc",
        "review"
      ]
    },
    {
      "login": "Chant3ll3",
      "name": "Chant3ll3",
      "avatar_url": "https://avatars.githubusercontent.com/u/141697333?v=4",
      "profile": "https://github.com/Chant3ll3",
      "contributions": [
        "doc",
        "translation"
      ]
    },
    {
      "login": "hwan33",
      "name": "YongHwan Kwon",
      "avatar_url": "https://avatars.githubusercontent.com/u/67625677?v=4",
      "profile": "https://hwan33.tistory.com/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "takikuba",
      "name": "Jakub Klimek",
      "avatar_url": "https://avatars.githubusercontent.com/u/58841343?v=4",
      "profile": "https://github.com/takikuba",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "bachbil",
      "name": "believe",
      "avatar_url": "https://avatars.githubusercontent.com/u/28935461?v=4",
      "profile": "https://github.com/bachbil",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "egg0102030405",
      "name": "egg0102030405",
      "avatar_url": "https://avatars.githubusercontent.com/u/59650695?v=4",
      "profile": "https://github.com/egg0102030405",
      "contributions": [
        "translation",
        "doc"
      ]
    },
    {
      "login": "ved-asole",
      "name": "Ved Asole",
      "avatar_url": "https://avatars.githubusercontent.com/u/77259804?v=4",
      "profile": "http://vedasole.cloud",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Holiday-C",
      "name": "NewMorning",
      "avatar_url": "https://avatars.githubusercontent.com/u/95869761?v=4",
      "profile": "https://github.com/Holiday-C",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "Kiro-Young",
      "name": "资深老萌新",
      "avatar_url": "https://avatars.githubusercontent.com/u/98251397?v=4",
      "profile": "https://github.com/Kiro-Young",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "Nickolodeon98",
      "name": "Seunghwan Jeon",
      "avatar_url": "https://avatars.githubusercontent.com/u/113348293?v=4",
      "profile": "https://itistori.tistory.com/",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "sugan0tech",
      "name": "sugavanesh",
      "avatar_url": "https://avatars.githubusercontent.com/u/71312159?v=4",
      "profile": "https://github.com/sugan0tech",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "FinnS-F",
      "name": "FinnS-F",
      "avatar_url": "https://avatars.githubusercontent.com/u/126026830?v=4",
      "profile": "https://github.com/FinnS-F",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "jerryyummy",
      "name": "jerryyummy",
      "avatar_url": "https://avatars.githubusercontent.com/u/62087610?v=4",
      "profile": "https://github.com/jerryyummy",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "Manojkumarchow",
      "name": "Manoj Chowdary",
      "avatar_url": "https://avatars.githubusercontent.com/u/28005510?v=4",
      "profile": "https://manojkumarchow.github.io/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "MaverickWingman",
      "name": "Aditya",
      "avatar_url": "https://avatars.githubusercontent.com/u/76624290?v=4",
      "profile": "https://github.com/MaverickWingman",
      "contributions": [
        "doc",
        "code"
      ]
    },
    {
      "login": "nooynayr",
      "name": "nooynayr",
      "avatar_url": "https://avatars.githubusercontent.com/u/141696269?v=4",
      "profile": "https://github.com/nooynayr",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "pushpander1010",
      "name": "CYBERCRUX2",
      "avatar_url": "https://avatars.githubusercontent.com/u/41006191?v=4",
      "profile": "https://github.com/pushpander1010",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "luismateoh",
      "name": "Luis Mateo Hincapié Martinez",
      "avatar_url": "https://avatars.githubusercontent.com/u/44934142?v=4",
      "profile": "https://github.com/luismateoh",
      "contributions": [
        "translation",
        "review"
      ]
    },
    {
      "login": "guqing",
      "name": "guqing",
      "avatar_url": "https://avatars.githubusercontent.com/u/38999863?v=4",
      "profile": "https://guqing.io",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "sashirestela",
      "name": "Sashir Estela",
      "avatar_url": "https://avatars.githubusercontent.com/u/14045506?v=4",
      "profile": "https://github.com/sashirestela",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "omahs",
      "name": "omahs",
      "avatar_url": "https://avatars.githubusercontent.com/u/73983677?v=4",
      "profile": "https://github.com/omahs",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "leiferksn",
      "name": "leif e.",
      "avatar_url": "https://avatars.githubusercontent.com/u/4026636?v=4",
      "profile": "https://github.com/leiferksn",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "junhkang",
      "name": "Jun Kang",
      "avatar_url": "https://avatars.githubusercontent.com/u/20232155?v=4",
      "profile": "https://junhkang.tistory.com/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "KishalayP",
      "name": "Kishalay Pandey",
      "avatar_url": "https://avatars.githubusercontent.com/u/71012321?v=4",
      "profile": "https://github.com/KishalayP",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "drishtii7",
      "name": "drishtii7",
      "avatar_url": "https://avatars.githubusercontent.com/u/82076566?v=4",
      "profile": "https://github.com/drishtii7",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "DavidMedinaO",
      "name": "David Medina Orozco",
      "avatar_url": "https://avatars.githubusercontent.com/u/53974843?v=4",
      "profile": "https://github.com/DavidMedinaO",
      "contributions": [
        "translation",
        "review"
      ]
    },
    {
      "login": "Romo4ka-bot",
      "name": "Roman Leontev",
      "avatar_url": "https://avatars.githubusercontent.com/u/61774094?v=4",
      "profile": "https://github.com/Romo4ka-bot",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Ehspresso",
      "name": "Riley",
      "avatar_url": "https://avatars.githubusercontent.com/u/144370752?v=4",
      "profile": "https://github.com/Ehspresso",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "k1w1dev",
      "name": "k1w1dev",
      "avatar_url": "https://avatars.githubusercontent.com/u/121696782?v=4",
      "profile": "https://github.com/k1w1dev",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "dev-yugantar",
      "name": "dev-yugantar",
      "avatar_url": "https://avatars.githubusercontent.com/u/153066190?v=4",
      "profile": "https://github.com/dev-yugantar",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Adelechka",
      "name": "Adelya",
      "avatar_url": "https://avatars.githubusercontent.com/u/65678470?v=4",
      "profile": "https://github.com/Adelechka",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "gatlanagaprasanna",
      "name": "gatlanagaprasanna",
      "avatar_url": "https://avatars.githubusercontent.com/u/154739216?v=4",
      "profile": "https://github.com/gatlanagaprasanna",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "Avinash2110",
      "name": "Avinash Shukla",
      "avatar_url": "https://avatars.githubusercontent.com/u/37360069?v=4",
      "profile": "https://github.com/Avinash2110",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Mayankchoudhary294",
      "name": "Mayank Choudhary",
      "avatar_url": "https://avatars.githubusercontent.com/u/97609699?v=4",
      "profile": "https://github.com/Mayankchoudhary294",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "romannimets",
      "name": "romannimets",
      "avatar_url": "https://avatars.githubusercontent.com/u/137268574?v=4",
      "profile": "https://github.com/romannimets",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Joel-Dandin",
      "name": "Joel",
      "avatar_url": "https://avatars.githubusercontent.com/u/60149879?v=4",
      "profile": "https://github.com/Joel-Dandin",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "244Walyson",
      "name": "Walyson Moises",
      "avatar_url": "https://avatars.githubusercontent.com/u/125759796?v=4",
      "profile": "https://github.com/244Walyson",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Xcyq",
      "name": "Xcyq",
      "avatar_url": "https://avatars.githubusercontent.com/u/39086666?v=4",
      "profile": "https://github.com/Xcyq",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Ritabrata1080",
      "name": "Ritabrata",
      "avatar_url": "https://avatars.githubusercontent.com/u/60834250?v=4",
      "profile": "https://github.com/Ritabrata1080",
      "contributions": [
        "review"
      ]
    },
    {
      "login": "trivikr",
      "name": "Trivikram Kamat",
      "avatar_url": "https://avatars.githubusercontent.com/u/16024985?v=4",
      "profile": "https://github.com/trivikr",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "vvanghelle",
      "name": "Vincent Vanghelle",
      "avatar_url": "https://avatars.githubusercontent.com/u/3204600?v=4",
      "profile": "https://github.com/vvanghelle",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "antoheri",
      "name": "Antoine Héritier",
      "avatar_url": "https://avatars.githubusercontent.com/u/79988396?v=4",
      "profile": "https://github.com/antoheri",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "fishandsheep",
      "name": "QinShower",
      "avatar_url": "https://avatars.githubusercontent.com/u/43347407?v=4",
      "profile": "https://github.com/fishandsheep",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "LakshyaPunyani-01",
      "name": "LakshyaPunyani-01",
      "avatar_url": "https://avatars.githubusercontent.com/u/103628913?v=4",
      "profile": "https://github.com/LakshyaPunyani-01",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "jasonjyu",
      "name": "jasonjyu",
      "avatar_url": "https://avatars.githubusercontent.com/u/10333076?v=4",
      "profile": "https://github.com/jasonjyu",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "jeffmorrison",
      "name": "jeffmorrison",
      "avatar_url": "https://avatars.githubusercontent.com/u/26047158?v=4",
      "profile": "https://github.com/jeffmorrison",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "dmgodoy",
      "name": "David M.",
      "avatar_url": "https://avatars.githubusercontent.com/u/10840681?v=4",
      "profile": "https://github.com/dmgodoy",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "apophizzz",
      "name": "Patrick Kleindienst",
      "avatar_url": "https://avatars.githubusercontent.com/u/12052783?v=4",
      "profile": "https://github.com/apophizzz",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "proceane",
      "name": "Juyeon",
      "avatar_url": "https://avatars.githubusercontent.com/u/62143949?v=4",
      "profile": "https://github.com/proceane",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "mammadyahyayev",
      "name": "Mammad Yahyayev",
      "avatar_url": "https://avatars.githubusercontent.com/u/66476643?v=4",
      "profile": "https://mammadyahya.vercel.app",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "SalmaAzeem",
      "name": "Salma",
      "avatar_url": "https://avatars.githubusercontent.com/u/121863224?v=4",
      "profile": "https://github.com/SalmaAzeem",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "CodeMaverick-143",
      "name": "Arpit Sarang",
      "avatar_url": "https://avatars.githubusercontent.com/u/182847716?v=4",
      "profile": "https://codemaverick-143.github.io/My-Portfolio/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "mayatarek",
      "name": "Maya",
      "avatar_url": "https://avatars.githubusercontent.com/u/111644421?v=4",
      "profile": "https://github.com/mayatarek",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "HabibaMekay",
      "name": "HabibaMekay",
      "avatar_url": "https://avatars.githubusercontent.com/u/133516736?v=4",
      "profile": "https://github.com/HabibaMekay",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Ahmed-Taha-981",
      "name": "Ahmed-Taha-981",
      "avatar_url": "https://avatars.githubusercontent.com/u/122402269?v=4",
      "profile": "https://github.com/Ahmed-Taha-981",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "malak-elbanna",
      "name": "Malak Elbanna",
      "avatar_url": "https://avatars.githubusercontent.com/u/67643605?v=4",
      "profile": "https://malakelbanna.netlify.app/",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "depthlending",
      "name": "BiKangNing",
      "avatar_url": "https://avatars.githubusercontent.com/u/164312726?v=4",
      "profile": "https://github.com/depthlending",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "TarunVishwakarma1",
      "name": "Tarun Vishwakarma",
      "avatar_url": "https://avatars.githubusercontent.com/u/138651451?v=4",
      "profile": "https://github.com/TarunVishwakarma1",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "shahdhoss",
      "name": "Shahd Hossam",
      "avatar_url": "https://avatars.githubusercontent.com/u/132148556?v=4",
      "profile": "https://github.com/shahdhoss",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "mehdirahimi",
      "name": "Mehdi Rahimi",
      "avatar_url": "https://avatars.githubusercontent.com/u/24210842?v=4",
      "profile": "https://mehdirahimi.github.io",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "clintaire",
      "name": "Clint Airé",
      "avatar_url": "https://avatars.githubusercontent.com/u/111376518?v=4",
      "profile": "https://github.com/clintaire",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "darkhyper24",
      "name": "darkhyper24",
      "avatar_url": "https://avatars.githubusercontent.com/u/132711528?v=4",
      "profile": "https://github.com/darkhyper24",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "MohanedAtef238",
      "name": "Mohaned Atef",
      "avatar_url": "https://avatars.githubusercontent.com/u/105852138?v=4",
      "profile": "https://github.com/MohanedAtef238",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "maximevtush",
      "name": "Maxim Evtush",
      "avatar_url": "https://avatars.githubusercontent.com/u/154841002?v=4",
      "profile": "https://github.com/maximevtush",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "hvgh88",
      "name": "Harshita Vidapanakal",
      "avatar_url": "https://avatars.githubusercontent.com/u/65297242?v=4",
      "profile": "https://github.com/hvgh88",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "smile-ab",
      "name": "smile-ab",
      "avatar_url": "https://avatars.githubusercontent.com/u/202159894?v=4",
      "profile": "https://github.com/smile-ab",
      "contributions": [
        "translation",
        "code"
      ]
    },
    {
      "login": "Francisco-G-P",
      "name": "Francisco-G-P",
      "avatar_url": "https://avatars.githubusercontent.com/u/186766789?v=4",
      "profile": "https://github.com/Francisco-G-P",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "Duartegdm",
      "name": "Gabriel Duarte",
      "avatar_url": "https://avatars.githubusercontent.com/u/137895372?v=4",
      "profile": "https://github.com/Duartegdm",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "DenizAltunkapan",
      "name": "Deniz Altunkapan",
      "avatar_url": "https://avatars.githubusercontent.com/u/93663085?v=4",
      "profile": "https://github.com/DenizAltunkapan",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "johnklint81",
      "name": "John Klint",
      "avatar_url": "https://avatars.githubusercontent.com/u/70539458?v=4",
      "profile": "https://github.com/johnklint81",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "sanurah",
      "name": "Sanura Hettiarachchi",
      "avatar_url": "https://avatars.githubusercontent.com/u/16178588?v=4",
      "profile": "https://github.com/sanurah",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "2897robo",
      "name": "Kim Gi Uk",
      "avatar_url": "https://avatars.githubusercontent.com/u/31699375?v=4",
      "profile": "https://github.com/2897robo",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Suchismita-Deb",
      "name": "Suchismita Deb",
      "avatar_url": "https://avatars.githubusercontent.com/u/68535074?v=4",
      "profile": "https://github.com/Suchismita-Deb",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "ssrijan-007-sys",
      "name": "ssrijan-007-sys",
      "avatar_url": "https://avatars.githubusercontent.com/u/137605821?v=4",
      "profile": "https://github.com/ssrijan-007-sys",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "e5LA",
      "name": "e5LA",
      "avatar_url": "https://avatars.githubusercontent.com/u/208197507?v=4",
      "profile": "https://github.com/e5LA",
      "contributions": [
        "code",
        "doc"
      ]
    },
    {
      "login": "maziyar-gerami",
      "name": "Maziyar Gerami",
      "avatar_url": "https://avatars.githubusercontent.com/u/122622721?v=4",
      "profile": "http://maziyar-gerami.github.io/portfolio/",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "yybmion",
      "name": "yoobin_mion",
      "avatar_url": "https://avatars.githubusercontent.com/u/113106136?v=4",
      "profile": "https://github.com/yybmion",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "ronodhirSoumik",
      "name": "Soumik Sarker",
      "avatar_url": "https://avatars.githubusercontent.com/u/46843689?v=4",
      "profile": "https://ronodhirsoumik.github.io",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "naman-sriv",
      "name": "Naman Srivastava",
      "avatar_url": "https://avatars.githubusercontent.com/u/82610773?v=4",
      "profile": "https://github.com/naman-sriv",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "letdtcode",
      "name": "Thanh Nguyen Duc",
      "avatar_url": "https://avatars.githubusercontent.com/u/92111552?v=4",
      "profile": "https://github.com/letdtcode",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "skamble2",
      "name": "Soham Kamble",
      "avatar_url": "https://avatars.githubusercontent.com/u/121136639?v=4",
      "profile": "https://github.com/skamble2",
      "contributions": [
        "code"
      ]
    },
    {
      "login": "Olexandr88",
      "name": "Olexandr88",
      "avatar_url": "https://avatars.githubusercontent.com/u/93856062?v=4",
      "profile": "https://github.com/Olexandr88",
      "contributions": [
        "doc"
      ]
    }
  ],
  "contributorsPerLine": 6,
  "projectName": "java-design-patterns",
  "projectOwner": "iluwatar",
  "repoType": "github",
  "repoHost": "https://github.com",
  "skipCi": true,
  "commitConvention": "angular",
  "commitType": "docs"
}


================================================
FILE: .editorconfig
================================================
#
# This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under LGPL (see lgpl-3.0.txt).
#
# The MIT License
# Copyright © 2014-2022 Ilkka Seppälä
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#

root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = false
max_line_length = off
tab_width = 4
ij_continuation_indent_size = 8
ij_formatter_off_tag = @formatter:off
ij_formatter_on_tag = @formatter:on
ij_formatter_tags_enabled = true
ij_smart_tabs = false
ij_visual_guides = 
ij_wrap_on_typing = false

[*.java]
indent_size = 2
max_line_length = 100
ij_continuation_indent_size = 4
ij_java_align_consecutive_assignments = false
ij_java_align_consecutive_variable_declarations = false
ij_java_align_group_field_declarations = false
ij_java_align_multiline_annotation_parameters = false
ij_java_align_multiline_array_initializer_expression = false
ij_java_align_multiline_assignment = false
ij_java_align_multiline_binary_operation = false
ij_java_align_multiline_chained_methods = false
ij_java_align_multiline_deconstruction_list_components = true
ij_java_align_multiline_extends_list = false
ij_java_align_multiline_for = true
ij_java_align_multiline_method_parentheses = false
ij_java_align_multiline_parameters = true
ij_java_align_multiline_parameters_in_calls = false
ij_java_align_multiline_parenthesized_expression = false
ij_java_align_multiline_records = true
ij_java_align_multiline_resources = true
ij_java_align_multiline_ternary_operation = false
ij_java_align_multiline_text_blocks = false
ij_java_align_multiline_throws_list = false
ij_java_align_subsequent_simple_methods = false
ij_java_align_throws_keyword = false
ij_java_align_types_in_multi_catch = true
ij_java_annotation_parameter_wrap = off
ij_java_array_initializer_new_line_after_left_brace = false
ij_java_array_initializer_right_brace_on_new_line = false
ij_java_array_initializer_wrap = normal
ij_java_assert_statement_colon_on_next_line = false
ij_java_assert_statement_wrap = normal
ij_java_assignment_wrap = normal
ij_java_binary_operation_sign_on_next_line = false
ij_java_binary_operation_wrap = normal
ij_java_blank_lines_after_anonymous_class_header = 0
ij_java_blank_lines_after_class_header = 0
ij_java_blank_lines_after_imports = 1
ij_java_blank_lines_after_package = 1
ij_java_blank_lines_around_class = 1
ij_java_blank_lines_around_field = 0
ij_java_blank_lines_around_field_in_interface = 0
ij_java_blank_lines_around_initializer = 1
ij_java_blank_lines_around_method = 1
ij_java_blank_lines_around_method_in_interface = 1
ij_java_blank_lines_before_class_end = 0
ij_java_blank_lines_before_imports = 1
ij_java_blank_lines_before_method_body = 0
ij_java_blank_lines_before_package = 1
ij_java_block_brace_style = end_of_line
ij_java_block_comment_add_space = false
ij_java_block_comment_at_first_column = true
ij_java_builder_methods = 
ij_java_call_parameters_new_line_after_left_paren = false
ij_java_call_parameters_right_paren_on_new_line = false
ij_java_call_parameters_wrap = normal
ij_java_case_statement_on_separate_line = true
ij_java_catch_on_new_line = false
ij_java_class_annotation_wrap = split_into_lines
ij_java_class_brace_style = end_of_line
ij_java_class_count_to_use_import_on_demand = 999
ij_java_class_names_in_javadoc = 1
ij_java_deconstruction_list_wrap = normal
ij_java_do_not_indent_top_level_class_members = false
ij_java_do_not_wrap_after_single_annotation = false
ij_java_do_not_wrap_after_single_annotation_in_parameter = false
ij_java_do_while_brace_force = always
ij_java_doc_add_blank_line_after_description = true
ij_java_doc_add_blank_line_after_param_comments = false
ij_java_doc_add_blank_line_after_return = false
ij_java_doc_add_p_tag_on_empty_lines = true
ij_java_doc_align_exception_comments = true
ij_java_doc_align_param_comments = true
ij_java_doc_do_not_wrap_if_one_line = false
ij_java_doc_enable_formatting = true
ij_java_doc_enable_leading_asterisks = true
ij_java_doc_indent_on_continuation = false
ij_java_doc_keep_empty_lines = true
ij_java_doc_keep_empty_parameter_tag = true
ij_java_doc_keep_empty_return_tag = true
ij_java_doc_keep_empty_throws_tag = true
ij_java_doc_keep_invalid_tags = true
ij_java_doc_param_description_on_new_line = false
ij_java_doc_preserve_line_breaks = false
ij_java_doc_use_throws_not_exception_tag = true
ij_java_else_on_new_line = false
ij_java_entity_dd_prefix = 
ij_java_entity_dd_suffix = EJB
ij_java_entity_eb_prefix = 
ij_java_entity_eb_suffix = Bean
ij_java_entity_hi_prefix = 
ij_java_entity_hi_suffix = Home
ij_java_entity_lhi_prefix = Local
ij_java_entity_lhi_suffix = Home
ij_java_entity_li_prefix = Local
ij_java_entity_li_suffix = 
ij_java_entity_pk_class = java.lang.String
ij_java_entity_ri_prefix = 
ij_java_entity_ri_suffix = 
ij_java_entity_vo_prefix = 
ij_java_entity_vo_suffix = VO
ij_java_enum_constants_wrap = normal
ij_java_extends_keyword_wrap = normal
ij_java_extends_list_wrap = normal
ij_java_field_annotation_wrap = split_into_lines
ij_java_field_name_prefix = 
ij_java_field_name_suffix = 
ij_java_filter_class_prefix = 
ij_java_filter_class_suffix = 
ij_java_filter_dd_prefix = 
ij_java_filter_dd_suffix = 
ij_java_finally_on_new_line = false
ij_java_for_brace_force = always
ij_java_for_statement_new_line_after_left_paren = false
ij_java_for_statement_right_paren_on_new_line = false
ij_java_for_statement_wrap = normal
ij_java_generate_final_locals = false
ij_java_generate_final_parameters = false
ij_java_if_brace_force = always
ij_java_imports_layout = $*,|,*
ij_java_indent_case_from_switch = true
ij_java_insert_inner_class_imports = false
ij_java_insert_override_annotation = true
ij_java_keep_blank_lines_before_right_brace = 2
ij_java_keep_blank_lines_between_package_declaration_and_header = 2
ij_java_keep_blank_lines_in_code = 2
ij_java_keep_blank_lines_in_declarations = 2
ij_java_keep_builder_methods_indents = false
ij_java_keep_control_statement_in_one_line = true
ij_java_keep_first_column_comment = true
ij_java_keep_indents_on_empty_lines = false
ij_java_keep_line_breaks = true
ij_java_keep_multiple_expressions_in_one_line = false
ij_java_keep_simple_blocks_in_one_line = false
ij_java_keep_simple_classes_in_one_line = false
ij_java_keep_simple_lambdas_in_one_line = false
ij_java_keep_simple_methods_in_one_line = false
ij_java_label_indent_absolute = false
ij_java_label_indent_size = 0
ij_java_lambda_brace_style = end_of_line
ij_java_layout_static_imports_separately = true
ij_java_line_comment_add_space = false
ij_java_line_comment_add_space_on_reformat = false
ij_java_line_comment_at_first_column = true
ij_java_listener_class_prefix = 
ij_java_listener_class_suffix = 
ij_java_local_variable_name_prefix = 
ij_java_local_variable_name_suffix = 
ij_java_message_dd_prefix = 
ij_java_message_dd_suffix = EJB
ij_java_message_eb_prefix = 
ij_java_message_eb_suffix = Bean
ij_java_method_annotation_wrap = split_into_lines
ij_java_method_brace_style = end_of_line
ij_java_method_call_chain_wrap = normal
ij_java_method_parameters_new_line_after_left_paren = false
ij_java_method_parameters_right_paren_on_new_line = false
ij_java_method_parameters_wrap = normal
ij_java_modifier_list_wrap = false
ij_java_multi_catch_types_wrap = normal
ij_java_names_count_to_use_import_on_demand = 999
ij_java_new_line_after_lparen_in_annotation = false
ij_java_new_line_after_lparen_in_deconstruction_pattern = true
ij_java_new_line_after_lparen_in_record_header = false
ij_java_packages_to_use_import_on_demand = 
ij_java_parameter_annotation_wrap = normal
ij_java_parameter_name_prefix = 
ij_java_parameter_name_suffix = 
ij_java_parentheses_expression_new_line_after_left_paren = false
ij_java_parentheses_expression_right_paren_on_new_line = false
ij_java_place_assignment_sign_on_next_line = false
ij_java_prefer_longer_names = true
ij_java_prefer_parameters_wrap = false
ij_java_record_components_wrap = normal
ij_java_repeat_annotations = 
ij_java_repeat_synchronized = true
ij_java_replace_instanceof_and_cast = false
ij_java_replace_null_check = true
ij_java_replace_sum_lambda_with_method_ref = true
ij_java_resource_list_new_line_after_left_paren = false
ij_java_resource_list_right_paren_on_new_line = false
ij_java_resource_list_wrap = normal
ij_java_rparen_on_new_line_in_annotation = false
ij_java_rparen_on_new_line_in_deconstruction_pattern = true
ij_java_rparen_on_new_line_in_record_header = false
ij_java_servlet_class_prefix = 
ij_java_servlet_class_suffix = 
ij_java_servlet_dd_prefix = 
ij_java_servlet_dd_suffix = 
ij_java_session_dd_prefix = 
ij_java_session_dd_suffix = EJB
ij_java_session_eb_prefix = 
ij_java_session_eb_suffix = Bean
ij_java_session_hi_prefix = 
ij_java_session_hi_suffix = Home
ij_java_session_lhi_prefix = Local
ij_java_session_lhi_suffix = Home
ij_java_session_li_prefix = Local
ij_java_session_li_suffix = 
ij_java_session_ri_prefix = 
ij_java_session_ri_suffix = 
ij_java_session_si_prefix = 
ij_java_session_si_suffix = Service
ij_java_space_after_closing_angle_bracket_in_type_argument = false
ij_java_space_after_colon = true
ij_java_space_after_comma = true
ij_java_space_after_comma_in_type_arguments = true
ij_java_space_after_for_semicolon = true
ij_java_space_after_quest = true
ij_java_space_after_type_cast = true
ij_java_space_before_annotation_array_initializer_left_brace = false
ij_java_space_before_annotation_parameter_list = false
ij_java_space_before_array_initializer_left_brace = true
ij_java_space_before_catch_keyword = true
ij_java_space_before_catch_left_brace = true
ij_java_space_before_catch_parentheses = true
ij_java_space_before_class_left_brace = true
ij_java_space_before_colon = true
ij_java_space_before_colon_in_foreach = true
ij_java_space_before_comma = false
ij_java_space_before_deconstruction_list = false
ij_java_space_before_do_left_brace = true
ij_java_space_before_else_keyword = true
ij_java_space_before_else_left_brace = true
ij_java_space_before_finally_keyword = true
ij_java_space_before_finally_left_brace = true
ij_java_space_before_for_left_brace = true
ij_java_space_before_for_parentheses = true
ij_java_space_before_for_semicolon = false
ij_java_space_before_if_left_brace = true
ij_java_space_before_if_parentheses = true
ij_java_space_before_method_call_parentheses = false
ij_java_space_before_method_left_brace = true
ij_java_space_before_method_parentheses = false
ij_java_space_before_opening_angle_bracket_in_type_parameter = false
ij_java_space_before_quest = true
ij_java_space_before_switch_left_brace = true
ij_java_space_before_switch_parentheses = true
ij_java_space_before_synchronized_left_brace = true
ij_java_space_before_synchronized_parentheses = true
ij_java_space_before_try_left_brace = true
ij_java_space_before_try_parentheses = true
ij_java_space_before_type_parameter_list = false
ij_java_space_before_while_keyword = true
ij_java_space_before_while_left_brace = true
ij_java_space_before_while_parentheses = true
ij_java_space_inside_one_line_enum_braces = false
ij_java_space_within_empty_array_initializer_braces = false
ij_java_space_within_empty_method_call_parentheses = false
ij_java_space_within_empty_method_parentheses = false
ij_java_spaces_around_additive_operators = true
ij_java_spaces_around_annotation_eq = true
ij_java_spaces_around_assignment_operators = true
ij_java_spaces_around_bitwise_operators = true
ij_java_spaces_around_equality_operators = true
ij_java_spaces_around_lambda_arrow = true
ij_java_spaces_around_logical_operators = true
ij_java_spaces_around_method_ref_dbl_colon = false
ij_java_spaces_around_multiplicative_operators = true
ij_java_spaces_around_relational_operators = true
ij_java_spaces_around_shift_operators = true
ij_java_spaces_around_type_bounds_in_type_parameters = true
ij_java_spaces_around_unary_operator = false
ij_java_spaces_within_angle_brackets = false
ij_java_spaces_within_annotation_parentheses = false
ij_java_spaces_within_array_initializer_braces = false
ij_java_spaces_within_braces = false
ij_java_spaces_within_brackets = false
ij_java_spaces_within_cast_parentheses = false
ij_java_spaces_within_catch_parentheses = false
ij_java_spaces_within_deconstruction_list = false
ij_java_spaces_within_for_parentheses = false
ij_java_spaces_within_if_parentheses = false
ij_java_spaces_within_method_call_parentheses = false
ij_java_spaces_within_method_parentheses = false
ij_java_spaces_within_parentheses = false
ij_java_spaces_within_record_header = false
ij_java_spaces_within_switch_parentheses = false
ij_java_spaces_within_synchronized_parentheses = false
ij_java_spaces_within_try_parentheses = false
ij_java_spaces_within_while_parentheses = false
ij_java_special_else_if_treatment = true
ij_java_static_field_name_prefix = 
ij_java_static_field_name_suffix = 
ij_java_subclass_name_prefix = 
ij_java_subclass_name_suffix = Impl
ij_java_ternary_operation_signs_on_next_line = false
ij_java_ternary_operation_wrap = normal
ij_java_test_name_prefix = 
ij_java_test_name_suffix = Test
ij_java_throws_keyword_wrap = normal
ij_java_throws_list_wrap = normal
ij_java_use_external_annotations = false
ij_java_use_fq_class_names = false
ij_java_use_relative_indents = false
ij_java_use_single_class_imports = true
ij_java_variable_annotation_wrap = normal
ij_java_visibility = public
ij_java_while_brace_force = always
ij_java_while_on_new_line = false
ij_java_wrap_comments = false
ij_java_wrap_first_method_in_call_chain = false
ij_java_wrap_long_lines = false

[{*.markdown,*.md}]
ij_markdown_force_one_space_after_blockquote_symbol = true
ij_markdown_force_one_space_after_header_symbol = true
ij_markdown_force_one_space_after_list_bullet = true
ij_markdown_force_one_space_between_words = true
ij_markdown_format_tables = true
ij_markdown_insert_quote_arrows_on_wrap = true
ij_markdown_keep_indents_on_empty_lines = false
ij_markdown_keep_line_breaks_inside_text_blocks = true
ij_markdown_max_line_length = off
ij_markdown_max_lines_around_block_elements = 1
ij_markdown_max_lines_around_header = 1
ij_markdown_max_lines_between_paragraphs = 1
ij_markdown_min_lines_around_block_elements = 1
ij_markdown_min_lines_around_header = 1
ij_markdown_min_lines_between_paragraphs = 1
ij_markdown_wrap_text_if_long = true
ij_markdown_wrap_text_inside_blockquotes = true


================================================
FILE: .github/FUNDING.yml
================================================
github: [iluwatar]


================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates

version: 2
updates:
  - package-ecosystem: "maven" # See documentation for possible values
    directory: "/" # Location of package manifests
    schedule:
      interval: "weekly"

================================================
FILE: .github/workflows/maven-ci.yml
================================================
name: Java CI

on:
  push:
    branches: [ master ]

jobs:

  build-and-analyze:

    name: Build and Run Sonar analysis on JDK 21
    runs-on: ubuntu-22.04
    steps:

      - name: Checkout Code
        uses: actions/checkout@v4
        with:
          # Disabling shallow clone for improving relevancy of SonarQube reporting
          fetch-depth: 0

      - name: Set up JDK 21
        uses: actions/setup-java@v4
        with:
          java-version: '21'
          distribution: 'temurin'
          cache: 'maven'

      - name: Cache local Maven repository
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-

      # Cache Sonar packages which are used to run analysis and collect metrics
      - name: Cache SonarCloud packages
        uses: actions/cache@v4
        with:
          path: ~/.sonar/cache
          key: ${{ runner.os }}-sonar
          restore-keys: ${{ runner.os }}-sonar

      # Some tests need screen access
      - name: Install xvfb
        run: sudo apt-get install -y xvfb

      - name: Build with Maven and run SonarQube analysis
        run: xvfb-run ./mvnw clean verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar
        env:
          # These two env variables are needed for sonar analysis
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}

================================================
FILE: .github/workflows/maven-pr-builder.yml
================================================
name: Java PR Builder

on:
  pull_request_target:
    branches: [ master ]
    types: [ opened, reopened, synchronize ]

permissions:
  contents: read

jobs:
  build-and-analyze:

    name: Build on JDK 21
    runs-on: ubuntu-22.04
    steps:

      - name: Checkout Code
        uses: actions/checkout@v4
        with:
          ref: ${{ github.event.pull_request.head.sha }}

      - name: Set up JDK 21
        uses: actions/setup-java@v4
        with:
          java-version: '21'
          distribution: 'temurin'
          cache: 'maven'

      - name: Cache local Maven repository
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-      

      # Cache Sonar packages which are used to run analysis and collect metrics
      - name: Cache SonarCloud packages
        uses: actions/cache@v4
        with:
          path: ~/.sonar/cache
          key: ${{ runner.os }}-sonar
          restore-keys: ${{ runner.os }}-sonar

      # Some tests need screen access
      - name: Install xvfb
        run: sudo apt-get install -y xvfb

      - name: Build with Maven and run SonarQube analysis
        env:
          # Intermediate variable
          HEAD_REF: ${{ github.head_ref }}
          # These two env variables are needed for sonar analysis
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
        run: xvfb-run ./mvnw clean verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=iluwatar -Dsonar.projectKey=iluwatar_java-design-patterns -Dsonar.pullrequest.branch=$HEAD_REF -Dsonar.pullrequest.base=${{ github.base_ref }} -Dsonar.pullrequest.key=${{ github.event.pull_request.number }}

================================================
FILE: .github/workflows/presubmit.yml
================================================
name: Presubmit.ai

permissions:
    contents: read
    pull-requests: write
    issues: write

on:
    pull_request_target:
        types: [opened, synchronize]
    pull_request_review_comment:
        types: [created]

jobs:
    review:
        runs-on: ubuntu-latest
        steps:
            - name: Check required secrets
              run: |
                  if [ -z "${{ secrets.LLM_API_KEY }}" ]; then
                    echo "Error: LLM_API_KEY secret is not configured"
                    exit 1
                  fi
            - uses: presubmit/ai-reviewer@latest
              env:
                  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
                  LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
                  LLM_MODEL: "gpt-5-nano"

================================================
FILE: .github/workflows/stale.yml
================================================
name: 'Comment on stale issues and PRs'
on:
  schedule:
    - cron: '30 1 * * *'

jobs:
  stale:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/stale@v9
        with:
          stale-issue-message: 'This issue is stale because it has been open 60 days with no activity.'
          stale-pr-message: 'This PR is stale because it has been open 60 days with no activity.'
          close-issue-message: 'This issue was closed because it has been stalled for too long with no activity.'
          close-pr-message: 'This PR was closed because it has been stalled for too long with no activity.'
          days-before-issue-stale: 60
          days-before-pr-stale: 60
          days-before-issue-close: -1
          days-before-pr-close: -1
          exempt-issue-labels: 'info: help wanted'


================================================
FILE: .gitignore
================================================
################## Eclipse ######################
target
.metadata
.settings
.classpath
.project
*.class
tmp/
*.tmp
*.bak
*~.nib
local.properties
.loadpath
.recommenders
.DS_Store

#######  Java annotation processor (APT) ########
.factorypath

################ Package Files ##################
*.jar
*.war
*.ear
*.swp
datanucleus.log
/bin/
*.log
event-sourcing/Journal.json

################## Checkstyle ###################
.checkstyle

##################### STS #######################
.apt_generated
.springBeans
.sts4-cache

################# IntelliJ IDEA #################
.idea
*.iws
*.iml
*.ipr

################### NetBeans ####################
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

#################### VS Code ####################
.vscode/

#################### Java Design Patterns #######
etc/Java Design Patterns.urm.puml
serialized-entity/output.txt
fish1.out
fish2.out


================================================
FILE: .mvn/wrapper/maven-wrapper.properties
================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.6/apache-maven-3.9.6-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar


================================================
FILE: CONTRIBUTING.MD
================================================
The project guidelines can be found in [Java Design Patterns developer wiki](https://github.com/iluwatar/java-design-patterns/wiki). 

A good place to start is: https://github.com/iluwatar/java-design-patterns/wiki/01.-How-to-contribute


================================================
FILE: LICENSE.md
================================================
The MIT License (MIT)

Copyright � 2014-2024 Ilkka Seppälä

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

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

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Module Model-view-viewmodel is using ZK framework
ZK framework is licensed under LGPL and the license can be found at lgpl-3.0.txt


================================================
FILE: PULL_REQUEST_TEMPLATE.md
================================================
# Pull Request Template

## What does this PR do?

<!-- Provide a short description of what this pull request does. -->

<!-- Fixes #<issue-number> (if applicable) -->


================================================
FILE: README.md
================================================
# Design Patterns Implemented in Java

[![Java CI](https://github.com/iluwatar/java-design-patterns/workflows/Java%20CI/badge.svg)](https://github.com/iluwatar/java-design-patterns/actions/workflows/maven-ci.yml)
[![License MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/iluwatar/java-design-patterns/master/LICENSE.md)
[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=iluwatar_java-design-patterns&metric=ncloc)](https://sonarcloud.io/dashboard?id=iluwatar_java-design-patterns)
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=iluwatar_java-design-patterns&metric=coverage)](https://sonarcloud.io/dashboard?id=iluwatar_java-design-patterns)
[![Join the chat at https://gitter.im/iluwatar/java-design-patterns](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/iluwatar/java-design-patterns?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
[![All Contributors](https://img.shields.io/badge/all_contributors-392-orange.svg?style=flat-square)](#contributors-)
<!-- ALL-CONTRIBUTORS-BADGE:END -->

<br/>

Read in different language : [**zh**](localization/zh/README.md), [**ko**](localization/ko/README.md), [**fr**](localization/fr/README.md), [**tr**](localization/tr/README.md), [**ar**](localization/ar/README.md), [**es**](localization/es/README.md), [**pt**](localization/pt/README.md), [**id**](localization/id/README.md), [**ru**](localization/ru/README.md), [**de**](localization/de/README.md), [**ja**](localization/ja/README.md), [**vi**](localization/vi/README.md), [**bn**](localization/bn/README.md), [**np**](localization/ne/README.md), [**it**](localization/it/README.md), [**da**](localization/da/README.md)
<br/>

# Introduction

Design patterns are the best, formalized practices a programmer can use to solve common problems when designing an application or system.

Design patterns can speed up the development process by providing tested, proven development paradigms.

Reusing design patterns helps prevent subtle issues that cause major problems, and it also improves code readability for coders and architects who are familiar with the patterns.

# Getting Started

This site showcases Java Design Patterns. The solutions have been developed by experienced programmers and architects from the open-source community. The patterns can be browsed by their high-level descriptions or by looking at their
source code. The source code examples are well commented and can be thought of as programming tutorials on how to implement a specific pattern. We use the most popular battle-proven open-source Java technologies.

Before you dive into the material, you should be familiar with various [Software Design Principles](https://java-design-patterns.com/principles/).

All designs should be as simple as possible. You should start with KISS, YAGNI, and Do The Simplest Thing That Could Possibly Work principles. Complexity and patterns should only be introduced when they are needed for practical extensibility.

Once you are familiar with these concepts you can start drilling down into the [available design patterns](https://java-design-patterns.com/patterns/) by any of the following approaches:

 - Search for a specific pattern by name. Can't find one? Please report a new pattern [here](https://github.com/iluwatar/java-design-patterns/issues).
 - Using tags such as `Performance`, `Gang of Four` or `Data access`.
 - Using pattern categories, `Creational`, `Behavioral`, and others.

Hopefully, you find the object-oriented solutions presented on this site useful in your architectures and have as much fun learning them as we had while developing them.

# How to Contribute

If you are willing to contribute to the project you will find the relevant information in our [developer wiki](https://github.com/iluwatar/java-design-patterns/wiki). We will help you and answer your questions in the [Gitter chatroom](https://gitter.im/iluwatar/java-design-patterns).

# The Book

The design patterns are now available as an e-book. Find out more about "Open Source Java Design Patterns" here: https://payhip.com/b/bNQFX

The project contributors can get the book for free. Contact the maintainer via [Gitter chatroom](https://gitter.im/iluwatar/java-design-patterns) or email (iluwatar (at) gmail (dot) com ). Send a message that contains your email address, Github username, and a link to an accepted pull request.

# License

This project is licensed under the terms of the MIT license.

# Contributors

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
  <tbody>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/iluwatar"><img src="https://avatars1.githubusercontent.com/u/582346?v=4?s=100" width="100px;" alt="Ilkka Seppälä"/><br /><sub><b>Ilkka Seppälä</b></sub></a><br /><a href="#projectManagement-iluwatar" title="Project Management">📆</a> <a href="#maintenance-iluwatar" title="Maintenance">🚧</a> <a href="#content-iluwatar" title="Content">🖋</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://subho.xyz"><img src="https://avatars0.githubusercontent.com/u/13291222?v=4?s=100" width="100px;" alt="Subhrodip Mohanta"/><br /><sub><b>Subhrodip Mohanta</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=ohbus" title="Code">💻</a> <a href="https://github.com/iluwatar/java-design-patterns/pulls?q=is%3Apr+reviewed-by%3Aohbus" title="Reviewed Pull Requests">👀</a> <a href="#maintenance-ohbus" title="Maintenance">🚧</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/amit1307"><img src="https://avatars0.githubusercontent.com/u/23420222?v=4?s=100" width="100px;" alt="amit1307"/><br /><sub><b>amit1307</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=amit1307" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/npathai"><img src="https://avatars2.githubusercontent.com/u/1792515?v=4?s=100" width="100px;" alt="Narendra Pathai"/><br /><sub><b>Narendra Pathai</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=npathai" title="Code">💻</a> <a href="#ideas-npathai" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/iluwatar/java-design-patterns/pulls?q=is%3Apr+reviewed-by%3Anpathai" title="Reviewed Pull Requests">👀</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/fluxw42"><img src="https://avatars1.githubusercontent.com/u/1545460?v=4?s=100" width="100px;" alt="Jeroen Meulemeester"/><br /><sub><b>Jeroen Meulemeester</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=fluxw42" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://www.joemccarthy.co.uk"><img src="https://avatars0.githubusercontent.com/u/4526195?v=4?s=100" width="100px;" alt="Joseph McCarthy"/><br /><sub><b>Joseph McCarthy</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=mikulucky" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/thomasoss"><img src="https://avatars1.githubusercontent.com/u/22516154?v=4?s=100" width="100px;" alt="Thomas"/><br /><sub><b>Thomas</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=thomasoss" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/anuragagarwal561994"><img src="https://avatars1.githubusercontent.com/u/6075379?v=4?s=100" width="100px;" alt="Anurag Agarwal"/><br /><sub><b>Anurag Agarwal</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=anuragagarwal561994" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://markusmo3.github.io"><img src="https://avatars1.githubusercontent.com/u/3317416?v=4?s=100" width="100px;" alt="Markus Moser"/><br /><sub><b>Markus Moser</b></sub></a><br /><a href="#design-markusmo3" title="Design">🎨</a> <a href="https://github.com/iluwatar/java-design-patterns/commits?author=markusmo3" title="Code">💻</a> <a href="#ideas-markusmo3" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://twitter.com/i_sabiq"><img src="https://avatars1.githubusercontent.com/u/19510920?v=4?s=100" width="100px;" alt="Sabiq Ihab"/><br /><sub><b>Sabiq Ihab</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=isabiq" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://inbravo.github.io"><img src="https://avatars3.githubusercontent.com/u/5253764?v=4?s=100" width="100px;" alt="Amit Dixit"/><br /><sub><b>Amit Dixit</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=inbravo" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/piyushchaudhari04"><img src="https://avatars3.githubusercontent.com/u/10268029?v=4?s=100" width="100px;" alt="Piyush Kailash Chaudhari"/><br /><sub><b>Piyush Kailash Chaudhari</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=piyushchaudhari04" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/joshzambales"><img src="https://avatars1.githubusercontent.com/u/8704552?v=4?s=100" width="100px;" alt="joshzambales"/><br /><sub><b>joshzambales</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=joshzambales" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Crossy147"><img src="https://avatars2.githubusercontent.com/u/7272996?v=4?s=100" width="100px;" alt="Kamil Pietruszka"/><br /><sub><b>Kamil Pietruszka</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Crossy147" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://cs.joensuu.fi/~zkhayda"><img src="https://avatars2.githubusercontent.com/u/660742?v=4?s=100" width="100px;" alt="Zafar Khaydarov"/><br /><sub><b>Zafar Khaydarov</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=zafarella" title="Code">💻</a> <a href="https://github.com/iluwatar/java-design-patterns/commits?author=zafarella" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://kemitix.github.io/"><img src="https://avatars1.githubusercontent.com/u/1147749?v=4?s=100" width="100px;" alt="Paul Campbell"/><br /><sub><b>Paul Campbell</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=kemitix" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Argyro-Sioziou"><img src="https://avatars0.githubusercontent.com/u/22822639?v=4?s=100" width="100px;" alt="Argyro Sioziou"/><br /><sub><b>Argyro Sioziou</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Argyro-Sioziou" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/TylerMcConville"><img src="https://avatars0.githubusercontent.com/u/4946449?v=4?s=100" width="100px;" alt="TylerMcConville"/><br /><sub><b>TylerMcConville</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=TylerMcConville" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/saksham93"><img src="https://avatars1.githubusercontent.com/u/37399540?v=4?s=100" width="100px;" alt="saksham93"/><br /><sub><b>saksham93</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=saksham93" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/nikhilbarar"><img src="https://avatars2.githubusercontent.com/u/37332144?v=4?s=100" width="100px;" alt="nikhilbarar"/><br /><sub><b>nikhilbarar</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=nikhilbarar" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://colinbut.com"><img src="https://avatars2.githubusercontent.com/u/10725674?v=4?s=100" width="100px;" alt="Colin But"/><br /><sub><b>Colin But</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=colinbut" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/ruslanpa"><img src="https://avatars2.githubusercontent.com/u/1503411?v=4?s=100" width="100px;" alt="Ruslan"/><br /><sub><b>Ruslan</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=ruslanpa" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/JuhoKang"><img src="https://avatars1.githubusercontent.com/u/4745294?v=4?s=100" width="100px;" alt="Juho Kang"/><br /><sub><b>Juho Kang</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=JuhoKang" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/dheeraj-mummareddy"><img src="https://avatars2.githubusercontent.com/u/7002230?v=4?s=100" width="100px;" alt="Dheeraj Mummareddy"/><br /><sub><b>Dheeraj Mummareddy</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=dheeraj-mummareddy" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://www.bernardosulzbach.com"><img src="https://avatars0.githubusercontent.com/u/8271090?v=4?s=100" width="100px;" alt="Bernardo Sulzbach"/><br /><sub><b>Bernardo Sulzbach</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=bernardosulzbach" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/4lexis"><img src="https://avatars0.githubusercontent.com/u/19871727?v=4?s=100" width="100px;" alt="Aleksandar Dudukovic"/><br /><sub><b>Aleksandar Dudukovic</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=4lexis" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://www.yusufaytas.com"><img src="https://avatars2.githubusercontent.com/u/1049483?v=4?s=100" width="100px;" alt="Yusuf Aytaş"/><br /><sub><b>Yusuf Aytaş</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=yusufaytas" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://futurehomes.hu"><img src="https://avatars2.githubusercontent.com/u/1001491?v=4?s=100" width="100px;" alt="Mihály Kuprivecz"/><br /><sub><b>Mihály Kuprivecz</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=qpi" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/kapinuss"><img src="https://avatars0.githubusercontent.com/u/17639945?v=4?s=100" width="100px;" alt="Stanislav Kapinus"/><br /><sub><b>Stanislav Kapinus</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=kapinuss" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/gvsharma"><img src="https://avatars1.githubusercontent.com/u/6648152?v=4?s=100" width="100px;" alt="GVSharma"/><br /><sub><b>GVSharma</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=gvsharma" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/SrdjanPaunovic"><img src="https://avatars1.githubusercontent.com/u/22815104?v=4?s=100" width="100px;" alt="Srđan Paunović"/><br /><sub><b>Srđan Paunović</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=SrdjanPaunovic" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://sideris.xyz/"><img src="https://avatars3.githubusercontent.com/u/5484694?v=4?s=100" width="100px;" alt="Petros G. Sideris"/><br /><sub><b>Petros G. Sideris</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=sideris" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://www.linkedin.com/in/pramodgupta3/"><img src="https://avatars1.githubusercontent.com/u/2184241?v=4?s=100" width="100px;" alt="Pramod Gupta"/><br /><sub><b>Pramod Gupta</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/pulls?q=is%3Apr+reviewed-by%3AIAmPramod" title="Reviewed Pull Requests">👀</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://amarnath510.github.io/portfolio"><img src="https://avatars0.githubusercontent.com/u/4599623?v=4?s=100" width="100px;" alt="Amarnath Chandana"/><br /><sub><b>Amarnath Chandana</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Amarnath510" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Anurag870"><img src="https://avatars1.githubusercontent.com/u/6295975?v=4?s=100" width="100px;" alt="Anurag870"/><br /><sub><b>Anurag870</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Anurag870" title="Code">💻</a> <a href="https://github.com/iluwatar/java-design-patterns/commits?author=Anurag870" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://theerroris.me"><img src="https://avatars0.githubusercontent.com/u/1685953?v=4?s=100" width="100px;" alt="Wes Gilleland"/><br /><sub><b>Wes Gilleland</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Deathnerd" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Harshrajsinh"><img src="https://avatars2.githubusercontent.com/u/22811531?v=4?s=100" width="100px;" alt="Harshraj Thakor"/><br /><sub><b>Harshraj Thakor</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Harshrajsinh" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/MaVdbussche"><img src="https://avatars1.githubusercontent.com/u/26136934?v=4?s=100" width="100px;" alt="Martin Vandenbussche"/><br /><sub><b>Martin Vandenbussche</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=MaVdbussche" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://alexsomai.com"><img src="https://avatars1.githubusercontent.com/u/5720977?v=4?s=100" width="100px;" alt="Alexandru Somai"/><br /><sub><b>Alexandru Somai</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=alexsomai" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/amogozov"><img src="https://avatars3.githubusercontent.com/u/7372215?v=4?s=100" width="100px;" alt="Artur Mogozov"/><br /><sub><b>Artur Mogozov</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=amogozov" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/anthonycampbell"><img src="https://avatars3.githubusercontent.com/u/10249255?v=4?s=100" width="100px;" alt="anthony"/><br /><sub><b>anthony</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=anthonycampbell" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://ccygnus.com/"><img src="https://avatars1.githubusercontent.com/u/9342724?v=4?s=100" width="100px;" alt="Christian Cygnus"/><br /><sub><b>Christian Cygnus</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=christophercolumbusdog" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://about.me/dzmitryh"><img src="https://avatars2.githubusercontent.com/u/5390492?v=4?s=100" width="100px;" alt="Dima Gubin"/><br /><sub><b>Dima Gubin</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=dzmitryh" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/jjjimenez100"><img src="https://avatars3.githubusercontent.com/u/22243493?v=4?s=100" width="100px;" alt="Joshua Jimenez"/><br /><sub><b>Joshua Jimenez</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=jjjimenez100" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://about.me/kaiwinter"><img src="https://avatars0.githubusercontent.com/u/110982?v=4?s=100" width="100px;" alt="Kai Winter"/><br /><sub><b>Kai Winter</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=kaiwinter" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/lbroman"><img src="https://avatars1.githubusercontent.com/u/86007?v=4?s=100" width="100px;" alt="lbroman"/><br /><sub><b>lbroman</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=lbroman" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://przemeknowak.com"><img src="https://avatars1.githubusercontent.com/u/3254609?v=4?s=100" width="100px;" alt="Przemek"/><br /><sub><b>Przemek</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=pnowy" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/prafful1"><img src="https://avatars0.githubusercontent.com/u/14350274?v=4?s=100" width="100px;" alt="Prafful Agarwal"/><br /><sub><b>Prafful Agarwal</b></sub></a><br /><a href="#content-prafful1" title="Content">🖋</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/sankypanhale"><img src="https://avatars1.githubusercontent.com/u/6478783?v=4?s=100" width="100px;" alt="Sanket Panhale"/><br /><sub><b>Sanket Panhale</b></sub></a><br /><a href="#content-sankypanhale" title="Content">🖋</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/staillebois"><img src="https://avatars0.githubusercontent.com/u/23701200?v=4?s=100" width="100px;" alt="staillebois"/><br /><sub><b>staillebois</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=staillebois" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/valdar-hu"><img src="https://avatars3.githubusercontent.com/u/17962817?v=4?s=100" width="100px;" alt="Krisztián Nagy"/><br /><sub><b>Krisztián Nagy</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=valdar-hu" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://www.vanogrid.com"><img src="https://avatars0.githubusercontent.com/u/4307918?v=4?s=100" width="100px;" alt="Alexander Ivanov"/><br /><sub><b>Alexander Ivanov</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=vanogrid" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/yosfik"><img src="https://avatars3.githubusercontent.com/u/4850270?v=4?s=100" width="100px;" alt="Yosfik Alqadri"/><br /><sub><b>Yosfik Alqadri</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=yosfik" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/7agustibm"><img src="https://avatars0.githubusercontent.com/u/8149332?v=4?s=100" width="100px;" alt="Agustí Becerra Milà"/><br /><sub><b>Agustí Becerra Milà</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=7agustibm" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Juaanma"><img src="https://avatars3.githubusercontent.com/u/7390500?v=4?s=100" width="100px;" alt="Juan Manuel Suárez"/><br /><sub><b>Juan Manuel Suárez</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Juaanma" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://www.devsedge.net/"><img src="https://avatars0.githubusercontent.com/u/9956006?v=4?s=100" width="100px;" alt="Luigi Cortese"/><br /><sub><b>Luigi Cortese</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=LuigiCortese" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Rzeposlaw"><img src="https://avatars2.githubusercontent.com/u/18425745?v=4?s=100" width="100px;" alt="Katarzyna Rzepecka"/><br /><sub><b>Katarzyna Rzepecka</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Rzeposlaw" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://adamski.pro"><img src="https://avatars1.githubusercontent.com/u/6537430?v=4?s=100" width="100px;" alt="adamski.pro"/><br /><sub><b>adamski.pro</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=akrystian" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/baislsl"><img src="https://avatars0.githubusercontent.com/u/17060584?v=4?s=100" width="100px;" alt="Shengli Bai"/><br /><sub><b>Shengli Bai</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=baislsl" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/besok"><img src="https://avatars2.githubusercontent.com/u/29834592?v=4?s=100" width="100px;" alt="Boris"/><br /><sub><b>Boris</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=besok" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/dmitraver"><img src="https://avatars3.githubusercontent.com/u/1798156?v=4?s=100" width="100px;" alt="Dmitry Avershin"/><br /><sub><b>Dmitry Avershin</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=dmitraver" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/fanofxiaofeng"><img src="https://avatars0.githubusercontent.com/u/3983683?v=4?s=100" width="100px;" alt="靳阳"/><br /><sub><b>靳阳</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=fanofxiaofeng" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/hoangnam2261"><img src="https://avatars2.githubusercontent.com/u/31692990?v=4?s=100" width="100px;" alt="hoangnam2261"/><br /><sub><b>hoangnam2261</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=hoangnam2261" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/jarpit96"><img src="https://avatars2.githubusercontent.com/u/10098713?v=4?s=100" width="100px;" alt="Arpit Jain"/><br /><sub><b>Arpit Jain</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=jarpit96" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://joningi.net"><img src="https://avatars2.githubusercontent.com/u/6115148?v=4?s=100" width="100px;" alt="Jón Ingi Sveinbjörnsson"/><br /><sub><b>Jón Ingi Sveinbjörnsson</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=joningiwork" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/kirill-vlasov"><img src="https://avatars3.githubusercontent.com/u/16112495?v=4?s=100" width="100px;" alt="Kirill Vlasov"/><br /><sub><b>Kirill Vlasov</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=kirill-vlasov" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="http://mitchell-irvin.com"><img src="https://avatars0.githubusercontent.com/u/16233245?v=4?s=100" width="100px;" alt="Mitchell Irvin"/><br /><sub><b>Mitchell Irvin</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=mitchellirvin" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://ranjeet-floyd.github.io"><img src="https://avatars0.githubusercontent.com/u/1992972?v=4?s=100" width="100px;" alt="Ranjeet"/><br /><sub><b>Ranjeet</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=ranjeet-floyd" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://alwayswithme.github.io"><img src="https://avatars3.githubusercontent.com/u/3234786?v=4?s=100" width="100px;" alt="PhoenixYip"/><br /><sub><b>PhoenixYip</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Alwayswithme" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/MSaifAsif"><img src="https://avatars1.githubusercontent.com/u/6280554?v=4?s=100" width="100px;" alt="M Saif Asif"/><br /><sub><b>M Saif Asif</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=MSaifAsif" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/kanwarpreet25"><img src="https://avatars0.githubusercontent.com/u/39183641?v=4?s=100" width="100px;" alt="kanwarpreet25"/><br /><sub><b>kanwarpreet25</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=kanwarpreet25" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://leonmak.me"><img src="https://avatars3.githubusercontent.com/u/13071508?v=4?s=100" width="100px;" alt="Leon Mak"/><br /><sub><b>Leon Mak</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=leonmak" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="http://www.wramdemark.se"><img src="https://avatars2.githubusercontent.com/u/7052193?v=4?s=100" width="100px;" alt="Per Wramdemark"/><br /><sub><b>Per Wramdemark</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=perwramdemark" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/waisuan"><img src="https://avatars2.githubusercontent.com/u/10975700?v=4?s=100" width="100px;" alt="Evan Sia Wai Suan"/><br /><sub><b>Evan Sia Wai Suan</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=waisuan" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/AnaghaSasikumar"><img src="https://avatars2.githubusercontent.com/u/42939261?v=4?s=100" width="100px;" alt="AnaghaSasikumar"/><br /><sub><b>AnaghaSasikumar</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=AnaghaSasikumar" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://christofferh.com"><img src="https://avatars1.githubusercontent.com/u/767643?v=4?s=100" width="100px;" alt="Christoffer Hamberg"/><br /><sub><b>Christoffer Hamberg</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=christofferh" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/dgruntz"><img src="https://avatars0.githubusercontent.com/u/1516800?v=4?s=100" width="100px;" alt="Dominik Gruntz"/><br /><sub><b>Dominik Gruntz</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=dgruntz" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://bitbucket.org/hannespernpeintner/"><img src="https://avatars3.githubusercontent.com/u/1679437?v=4?s=100" width="100px;" alt="Hannes"/><br /><sub><b>Hannes</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=hannespernpeintner" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/leogtzr"><img src="https://avatars0.githubusercontent.com/u/1211969?v=4?s=100" width="100px;" alt="Leo Gutiérrez Ramírez"/><br /><sub><b>Leo Gutiérrez Ramírez</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=leogtzr" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/npczwh"><img src="https://avatars0.githubusercontent.com/u/14066422?v=4?s=100" width="100px;" alt="Zhang WH"/><br /><sub><b>Zhang WH</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=npczwh" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/oconnelc"><img src="https://avatars0.githubusercontent.com/u/1112973?v=4?s=100" width="100px;" alt="Christopher O'Connell"/><br /><sub><b>Christopher O'Connell</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=oconnelc" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/giorgosmav21"><img src="https://avatars2.githubusercontent.com/u/22855493?v=4?s=100" width="100px;" alt="George Mavroeidis"/><br /><sub><b>George Mavroeidis</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=giorgosmav21" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/hbothra15"><img src="https://avatars1.githubusercontent.com/u/7418012?v=4?s=100" width="100px;" alt="Hemant Bothra"/><br /><sub><b>Hemant Bothra</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=hbothra15" title="Code">💻</a> <a href="#design-hbothra15" title="Design">🎨</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://www.kevinpeters.net/about/"><img src="https://avatars1.githubusercontent.com/u/12736734?v=4?s=100" width="100px;" alt="Kevin Peters"/><br /><sub><b>Kevin Peters</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=igeligel" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://llorllale.github.io/"><img src="https://avatars1.githubusercontent.com/u/2019896?v=4?s=100" width="100px;" alt="George Aristy"/><br /><sub><b>George Aristy</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=llorllale" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/mookkiah"><img src="https://avatars1.githubusercontent.com/u/8975264?v=4?s=100" width="100px;" alt="Mahendran Mookkiah"/><br /><sub><b>Mahendran Mookkiah</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=mookkiah" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Azureyjt"><img src="https://avatars2.githubusercontent.com/u/18476317?v=4?s=100" width="100px;" alt="Azureyjt"/><br /><sub><b>Azureyjt</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Azureyjt" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/vehpsr"><img src="https://avatars2.githubusercontent.com/u/3133265?v=4?s=100" width="100px;" alt="gans"/><br /><sub><b>gans</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=vehpsr" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/ThatGuyWithTheHat"><img src="https://avatars0.githubusercontent.com/u/24470582?v=4?s=100" width="100px;" alt="Matt"/><br /><sub><b>Matt</b></sub></a><br /><a href="#content-ThatGuyWithTheHat" title="Content">🖋</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://www.linkedin.com/in/gopinathlangote/"><img src="https://avatars2.githubusercontent.com/u/10210778?v=4?s=100" width="100px;" alt="Gopinath Langote"/><br /><sub><b>Gopinath Langote</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=gopinath-langote" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/hoswey"><img src="https://avatars3.githubusercontent.com/u/3689445?v=4?s=100" width="100px;" alt="Hoswey"/><br /><sub><b>Hoswey</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=hoswey" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/amit2103"><img src="https://avatars3.githubusercontent.com/u/7566692?v=4?s=100" width="100px;" alt="Amit Pandey"/><br /><sub><b>Amit Pandey</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=amit2103" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/gwildor28"><img src="https://avatars0.githubusercontent.com/u/16000365?v=4?s=100" width="100px;" alt="gwildor28"/><br /><sub><b>gwildor28</b></sub></a><br /><a href="#content-gwildor28" title="Content">🖋</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://t.me/paul_docker"><img src="https://avatars1.githubusercontent.com/u/2404785?v=4?s=100" width="100px;" alt="田浩"/><br /><sub><b>田浩</b></sub></a><br /><a href="#content-llitfkitfk" title="Content">🖋</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://twitter.com/StPitsios"><img src="https://avatars1.githubusercontent.com/u/6773603?v=4?s=100" width="100px;" alt="Stamatis Pitsios"/><br /><sub><b>Stamatis Pitsios</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=pitsios-s" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/qza"><img src="https://avatars3.githubusercontent.com/u/233149?v=4?s=100" width="100px;" alt="qza"/><br /><sub><b>qza</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=qza" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="http://tschis.github.io"><img src="https://avatars1.githubusercontent.com/u/20662669?v=4?s=100" width="100px;" alt="Rodolfo Forte"/><br /><sub><b>Rodolfo Forte</b></sub></a><br /><a href="#content-Tschis" title="Content">🖋</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/ankurkaushal"><img src="https://avatars2.githubusercontent.com/u/2236616?v=4?s=100" width="100px;" alt="Ankur Kaushal"/><br /><sub><b>Ankur Kaushal</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=ankurkaushal" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://www.linkedin.com/in/ovidijus-okinskas/"><img src="https://avatars0.githubusercontent.com/u/20372387?v=4?s=100" width="100px;" alt="Ovidijus Okinskas"/><br /><sub><b>Ovidijus Okinskas</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=okinskas" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/robertt240"><img src="https://avatars1.githubusercontent.com/u/9137432?v=4?s=100" width="100px;" alt="Robert Kasperczyk"/><br /><sub><b>Robert Kasperczyk</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=robertt240" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/trautonen"><img src="https://avatars3.githubusercontent.com/u/1641063?v=4?s=100" width="100px;" alt="Tapio Rautonen"/><br /><sub><b>Tapio Rautonen</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=trautonen" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://vk.com/yuri.orlov"><img src="https://avatars0.githubusercontent.com/u/1595733?v=4?s=100" width="100px;" alt="Yuri Orlov"/><br /><sub><b>Yuri Orlov</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=yorlov" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://www.linkedin.com/in/varunu28/"><img src="https://avatars0.githubusercontent.com/u/7676016?v=4?s=100" width="100px;" alt="Varun Upadhyay"/><br /><sub><b>Varun Upadhyay</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=varunu28" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/PalAditya"><img src="https://avatars2.githubusercontent.com/u/25523604?v=4?s=100" width="100px;" alt="Aditya Pal"/><br /><sub><b>Aditya Pal</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=PalAditya" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/grzesiekkedzior"><img src="https://avatars3.githubusercontent.com/u/23739158?v=4?s=100" width="100px;" alt="grzesiekkedzior"/><br /><sub><b>grzesiekkedzior</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=grzesiekkedzior" title="Code">💻</a> <a href="https://github.com/iluwatar/java-design-patterns/pulls?q=is%3Apr+reviewed-by%3Agrzesiekkedzior" title="Reviewed Pull Requests">👀</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/sivasubramanim"><img src="https://avatars2.githubusercontent.com/u/51107434?v=4?s=100" width="100px;" alt="Sivasubramani M"/><br /><sub><b>Sivasubramani M</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=sivasubramanim" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/d4gg4d"><img src="https://avatars2.githubusercontent.com/u/99457?v=4?s=100" width="100px;" alt="Sami Airaksinen"/><br /><sub><b>Sami Airaksinen</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=d4gg4d" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/vertti"><img src="https://avatars0.githubusercontent.com/u/557751?v=4?s=100" width="100px;" alt="Janne Sinivirta"/><br /><sub><b>Janne Sinivirta</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=vertti" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Bobo1239"><img src="https://avatars1.githubusercontent.com/u/2302947?v=4?s=100" width="100px;" alt="Boris-Chengbiao Zhou"/><br /><sub><b>Boris-Chengbiao Zhou</b></sub></a><br /><a href="#content-Bobo1239" title="Content">🖋</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://jahhein.github.io"><img src="https://avatars2.githubusercontent.com/u/10779515?v=4?s=100" width="100px;" alt="Jacob Hein"/><br /><sub><b>Jacob Hein</b></sub></a><br /><a href="#content-Jahhein" title="Content">🖋</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/iamrichardjones"><img src="https://avatars3.githubusercontent.com/u/14842151?v=4?s=100" width="100px;" alt="Richard Jones"/><br /><sub><b>Richard Jones</b></sub></a><br /><a href="#content-iamrichardjones" title="Content">🖋</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://rachelcarmena.github.io"><img src="https://avatars0.githubusercontent.com/u/22792183?v=4?s=100" width="100px;" alt="Rachel M. Carmena"/><br /><sub><b>Rachel M. Carmena</b></sub></a><br /><a href="#content-rachelcarmena" title="Content">🖋</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://zd-zero.github.io"><img src="https://avatars0.githubusercontent.com/u/21978370?v=4?s=100" width="100px;" alt="Zaerald Denze Lungos"/><br /><sub><b>Zaerald Denze Lungos</b></sub></a><br /><a href="#content-zd-zero" title="Content">🖋</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://webpro.nl"><img src="https://avatars1.githubusercontent.com/u/456426?v=4?s=100" width="100px;" alt="Lars Kappert"/><br /><sub><b>Lars Kappert</b></sub></a><br /><a href="#content-webpro" title="Content">🖋</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://xiaod.info"><img src="https://avatars2.githubusercontent.com/u/21277644?v=4?s=100" width="100px;" alt="Mike Liu"/><br /><sub><b>Mike Liu</b></sub></a><br /><a href="#translation-xiaod-dev" title="Translation">🌍</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/charlesfinley"><img src="https://avatars1.githubusercontent.com/u/6307904?v=4?s=100" width="100px;" alt="Matt Dolan"/><br /><sub><b>Matt Dolan</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=charlesfinley" title="Code">💻</a> <a href="https://github.com/iluwatar/java-design-patterns/pulls?q=is%3Apr+reviewed-by%3Acharlesfinley" title="Reviewed Pull Requests">👀</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/MananS77"><img src="https://avatars3.githubusercontent.com/u/21033516?v=4?s=100" width="100px;" alt="Manan"/><br /><sub><b>Manan</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/pulls?q=is%3Apr+reviewed-by%3AMananS77" title="Reviewed Pull Requests">👀</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/nishant"><img src="https://avatars2.githubusercontent.com/u/15331971?v=4?s=100" width="100px;" alt="Nishant Arora"/><br /><sub><b>Nishant Arora</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=nishant" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/raja-peeyush-kumar-singh"><img src="https://avatars0.githubusercontent.com/u/5496024?v=4?s=100" width="100px;" alt="Peeyush"/><br /><sub><b>Peeyush</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=raja-peeyush-kumar-singh" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/ravening"><img src="https://avatars1.githubusercontent.com/u/10645273?v=4?s=100" width="100px;" alt="Rakesh"/><br /><sub><b>Rakesh</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=ravening" title="Code">💻</a> <a href="https://github.com/iluwatar/java-design-patterns/pulls?q=is%3Apr+reviewed-by%3Aravening" title="Reviewed Pull Requests">👀</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/vINCENT8888801"><img src="https://avatars0.githubusercontent.com/u/8037883?v=4?s=100" width="100px;" alt="Wei Seng"/><br /><sub><b>Wei Seng</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=vINCENT8888801" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://www.linkedin.com/in/ashish-trivedi-218379135/"><img src="https://avatars3.githubusercontent.com/u/23194128?v=4?s=100" width="100px;" alt="Ashish Trivedi"/><br /><sub><b>Ashish Trivedi</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=ashishtrivedi16" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://rayyounghong.com"><img src="https://avatars1.githubusercontent.com/u/41055099?v=4?s=100" width="100px;" alt="洪月阳"/><br /><sub><b>洪月阳</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=RayYH" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://xdvrx1.github.io/"><img src="https://avatars0.githubusercontent.com/u/47092464?v=4?s=100" width="100px;" alt="xdvrx1"/><br /><sub><b>xdvrx1</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/pulls?q=is%3Apr+reviewed-by%3Axdvrx1" title="Reviewed Pull Requests">👀</a> <a href="#ideas-xdvrx1" title="Ideas, Planning, & Feedback">🤔</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/nahteb"><img src="https://avatars3.githubusercontent.com/u/13121570?v=4?s=100" width="100px;" alt="Bethan Palmer"/><br /><sub><b>Bethan Palmer</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=nahteb" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/ToxicDreamz"><img src="https://avatars0.githubusercontent.com/u/45225562?v=4?s=100" width="100px;" alt="Toxic Dreamz"/><br /><sub><b>Toxic Dreamz</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=ToxicDreamz" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="http://www.edycutjong.com"><img src="https://avatars1.githubusercontent.com/u/1098102?v=4?s=100" width="100px;" alt="Edy Cu Tjong"/><br /><sub><b>Edy Cu Tjong</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=edycutjong" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/mkrzywanski"><img src="https://avatars0.githubusercontent.com/u/15279585?v=4?s=100" width="100px;" alt="Michał Krzywański"/><br /><sub><b>Michał Krzywański</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=mkrzywanski" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://www.stefan-birkner.de"><img src="https://avatars1.githubusercontent.com/u/711349?v=4?s=100" width="100px;" alt="Stefan Birkner"/><br /><sub><b>Stefan Birkner</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=stefanbirkner" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/fedorskvorcov"><img src="https://avatars3.githubusercontent.com/u/43882212?v=4?s=100" width="100px;" alt="Fedor Skvorcov"/><br /><sub><b>Fedor Skvorcov</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=fedorskvorcov" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/samilAyoub"><img src="https://avatars0.githubusercontent.com/u/61546990?v=4?s=100" width="100px;" alt="samilAyoub"/><br /><sub><b>samilAyoub</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=samilAyoub" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/vdlald"><img src="https://avatars0.githubusercontent.com/u/29997701?v=4?s=100" width="100px;" alt="Vladislav Golubinov"/><br /><sub><b>Vladislav Golubinov</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=vdlald" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/swarajsaaj"><img src="https://avatars2.githubusercontent.com/u/6285049?v=4?s=100" width="100px;" alt="Swaraj"/><br /><sub><b>Swaraj</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=swarajsaaj" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://christophflick.de"><img src="https://avatars0.githubusercontent.com/u/4465376?v=4?s=100" width="100px;" alt="Christoph Flick"/><br /><sub><b>Christoph Flick</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=ChFlick" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Ascenio"><img src="https://avatars1.githubusercontent.com/u/7662016?v=4?s=100" width="100px;" alt="Ascênio"/><br /><sub><b>Ascênio</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/pulls?q=is%3Apr+reviewed-by%3AAscenio" title="Reviewed Pull Requests">👀</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://www.linkedin.com/in/domenico-sibilio/"><img src="https://avatars2.githubusercontent.com/u/24280982?v=4?s=100" width="100px;" alt="Domenico Sibilio"/><br /><sub><b>Domenico Sibilio</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=dsibilio" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/akashchandwani"><img src="https://avatars2.githubusercontent.com/u/3483277?v=4?s=100" width="100px;" alt="Akash Chandwani"/><br /><sub><b>Akash Chandwani</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/pulls?q=is%3Apr+reviewed-by%3Aakashchandwani" title="Reviewed Pull Requests">👀</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://www.linkedin.com/in/manannikov"><img src="https://avatars2.githubusercontent.com/u/7019769?v=4?s=100" width="100px;" alt="Pavlo Manannikov"/><br /><sub><b>Pavlo Manannikov</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=manannikov" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/eimanip"><img src="https://avatars0.githubusercontent.com/u/20307301?v=4?s=100" width="100px;" alt="Eiman"/><br /><sub><b>Eiman</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=eimanip" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/OrangePants-R"><img src="https://avatars0.githubusercontent.com/u/42976136?v=4?s=100" width="100px;" alt="Rocky"/><br /><sub><b>Rocky</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=OrangePants-R" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://ibrahimalii.github.io/"><img src="https://avatars2.githubusercontent.com/u/21141301?v=4?s=100" width="100px;" alt="Ibrahim ali abdelghany"/><br /><sub><b>Ibrahim ali abdelghany</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/pulls?q=is%3Apr+reviewed-by%3AibrahimAlii" title="Reviewed Pull Requests">👀</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/gkulkarni2020"><img src="https://avatars3.githubusercontent.com/u/5161548?v=4?s=100" width="100px;" alt="Girish Kulkarni"/><br /><sub><b>Girish Kulkarni</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=gkulkarni2020" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/omk13"><img src="https://avatars0.githubusercontent.com/u/59054172?v=4?s=100" width="100px;" alt="Omar Karazoun"/><br /><sub><b>Omar Karazoun</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=omk13" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/jeff303"><img src="https://avatars0.githubusercontent.com/u/3521562?v=4?s=100" width="100px;" alt="Jeff Evans"/><br /><sub><b>Jeff Evans</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=jeff303" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://viveksb007.github.io"><img src="https://avatars1.githubusercontent.com/u/12713808?v=4?s=100" width="100px;" alt="Vivek Singh"/><br /><sub><b>Vivek Singh</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=viveksb007" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/siavashsoleymani"><img src="https://avatars2.githubusercontent.com/u/18074419?v=4?s=100" width="100px;" alt="siavash"/><br /><sub><b>siavash</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=siavashsoleymani" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/ruchpeanuts"><img src="https://avatars0.githubusercontent.com/u/29301900?v=4?s=100" width="100px;" alt="ruchpeanuts"/><br /><sub><b>ruchpeanuts</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=ruchpeanuts" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/warp125"><img src="https://avatars1.githubusercontent.com/u/48073115?v=4?s=100" width="100px;" alt="warp125"/><br /><sub><b>warp125</b></sub></a><br /><a href="#translation-warp125" title="Translation">🌍</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://libkhadir.fr"><img src="https://avatars1.githubusercontent.com/u/45130488?v=4?s=100" width="100px;" alt="KHADIR Tayeb"/><br /><sub><b>KHADIR Tayeb</b></sub></a><br /><a href="#translation-tkhadir" title="Translation">🌍</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/ignite1771"><img src="https://avatars2.githubusercontent.com/u/59446563?v=4?s=100" width="100px;" alt="ignite1771"/><br /><sub><b>ignite1771</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=ignite1771" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/demirhalil"><img src="https://avatars1.githubusercontent.com/u/22895118?v=4?s=100" width="100px;" alt="Halil Demir"/><br /><sub><b>Halil Demir</b></sub></a><br /><a href="#translation-demirhalil" title="Translation">🌍</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/rohit10000"><img src="https://avatars.githubusercontent.com/u/20845565?v=4?s=100" width="100px;" alt="Rohit Singh"/><br /><sub><b>Rohit Singh</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=rohit10000" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/byoungju94"><img src="https://avatars.githubusercontent.com/u/42516378?v=4?s=100" width="100px;" alt="byoungju94"/><br /><sub><b>byoungju94</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=byoungju94" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/moustafafarhat"><img src="https://avatars.githubusercontent.com/u/38836727?v=4?s=100" width="100px;" alt="Moustafa Farhat"/><br /><sub><b>Moustafa Farhat</b></sub></a><br /><a href="#translation-moustafafarhat" title="Translation">🌍</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/richardmr36"><img src="https://avatars.githubusercontent.com/u/19147333?v=4?s=100" width="100px;" alt="Martel Richard"/><br /><sub><b>Martel Richard</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=richardmr36" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/va1m"><img src="https://avatars.githubusercontent.com/u/17025445?v=4?s=100" width="100px;" alt="va1m"/><br /><sub><b>va1m</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=va1m" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/noamgrinch"><img src="https://avatars.githubusercontent.com/u/31648669?v=4?s=100" width="100px;" alt="Noam Greenshtain"/><br /><sub><b>Noam Greenshtain</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=noamgrinch" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://xuyonghong.cn/"><img src="https://avatars.githubusercontent.com/u/14086462?v=4?s=100" width="100px;" alt="yonghong Xu"/><br /><sub><b>yonghong Xu</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=qfxl" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://www.linkedin.com/in/jinisha-vora"><img src="https://avatars.githubusercontent.com/u/40777762?v=4?s=100" width="100px;" alt="jinishavora"/><br /><sub><b>jinishavora</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/pulls?q=is%3Apr+reviewed-by%3Ajinishavora" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/iluwatar/java-design-patterns/commits?author=jinishavora" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/eas5"><img src="https://avatars.githubusercontent.com/u/50836521?v=4?s=100" width="100px;" alt="Elvys Soares"/><br /><sub><b>Elvys Soares</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=eas5" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/zWeBrain"><img src="https://avatars.githubusercontent.com/u/46642512?v=4?s=100" width="100px;" alt="zWeBrain"/><br /><sub><b>zWeBrain</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=zWeBrain" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://al-assad.github.io/notion/"><img src="https://avatars.githubusercontent.com/u/22493821?v=4?s=100" width="100px;" alt="余林颖"/><br /><sub><b>余林颖</b></sub></a><br /><a href="#translation-Al-assad" title="Translation">🌍</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/STudio26"><img src="https://avatars.githubusercontent.com/u/6988911?v=4?s=100" width="100px;" alt="Alain"/><br /><sub><b>Alain</b></sub></a><br /><a href="#translation-STudio26" title="Translation">🌍</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/DEV-VRUPER"><img src="https://avatars.githubusercontent.com/u/30525467?v=4?s=100" width="100px;" alt="VR"/><br /><sub><b>VR</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=DEV-VRUPER" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/JackieNim"><img src="https://avatars.githubusercontent.com/u/4138836?v=4?s=100" width="100px;" alt="JackieNim"/><br /><sub><b>JackieNim</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=JackieNim" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/EdisonE3"><img src="https://avatars.githubusercontent.com/u/52118917?v=4?s=100" width="100px;" alt="EdisonE3"/><br /><sub><b>EdisonE3</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=EdisonE3" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/tao-sun2"><img src="https://avatars.githubusercontent.com/u/66189688?v=4?s=100" width="100px;" alt="Tao"/><br /><sub><b>Tao</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=tao-sun2" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/JuanManuelAbate"><img src="https://avatars.githubusercontent.com/u/16357060?v=4?s=100" width="100px;" alt="Juan Manuel Abate"/><br /><sub><b>Juan Manuel Abate</b></sub></a><br /><a href="#translation-JuanManuelAbate" title="Translation">🌍</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Xenilo137"><img src="https://avatars.githubusercontent.com/u/24865069?v=4?s=100" width="100px;" alt="Xenilo137"/><br /><sub><b>Xenilo137</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Xenilo137" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://www.linkedin.com/in/souzasamuel/"><img src="https://avatars.githubusercontent.com/u/17254162?v=4?s=100" width="100px;" alt="Samuel Souza"/><br /><sub><b>Samuel Souza</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=samuelpsouza" title="Code">💻</a> <a href="https://github.com/iluwatar/java-design-patterns/commits?author=samuelpsouza" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/marlo2222"><img src="https://avatars.githubusercontent.com/u/40809563?v=4?s=100" width="100px;" alt="Marlo Henrique"/><br /><sub><b>Marlo Henrique</b></sub></a><br /><a href="#translation-marlo2222" title="Translation">🌍</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/AndriyPyzh"><img src="https://avatars.githubusercontent.com/u/57706635?v=4?s=100" width="100px;" alt="AndriyPyzh"/><br /><sub><b>AndriyPyzh</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=AndriyPyzh" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/karthikbhat13"><img src="https://avatars.githubusercontent.com/u/22431014?v=4?s=100" width="100px;" alt="karthikbhat13"/><br /><sub><b>karthikbhat13</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=karthikbhat13" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/mortezaadi"><img src="https://avatars.githubusercontent.com/u/1329687?v=4?s=100" width="100px;" alt="Morteza Adigozalpour"/><br /><sub><b>Morteza Adigozalpour</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=mortezaadi" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://stackoverflow.com/users/308565/nagaraj-tantri"><img src="https://avatars.githubusercontent.com/u/3784194?v=4?s=100" width="100px;" alt="Nagaraj Tantri"/><br /><sub><b>Nagaraj Tantri</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=tan31989" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/frascu"><img src="https://avatars.githubusercontent.com/u/7107651?v=4?s=100" width="100px;" alt="Francesco Scuccimarri"/><br /><sub><b>Francesco Scuccimarri</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=frascu" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Conhan93"><img src="https://avatars.githubusercontent.com/u/71334757?v=4?s=100" width="100px;" alt="Conny Hansson"/><br /><sub><b>Conny Hansson</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Conhan93" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://muklasr.medium.com"><img src="https://avatars.githubusercontent.com/u/43443753?v=4?s=100" width="100px;" alt="Muklas Rahmanto"/><br /><sub><b>Muklas Rahmanto</b></sub></a><br /><a href="#translation-muklasr" title="Translation">🌍</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/VxDxK"><img src="https://avatars.githubusercontent.com/u/38704817?v=4?s=100" width="100px;" alt="Vadim"/><br /><sub><b>Vadim</b></sub></a><br /><a href="#translation-VxDxK" title="Translation">🌍</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/sims-keshri"><img src="https://avatars.githubusercontent.com/u/62168475?v=4?s=100" width="100px;" alt="Simran Keshri"/><br /><sub><b>Simran Keshri</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=sims-keshri" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://programacionymas.com"><img src="https://avatars.githubusercontent.com/u/3101238?v=4?s=100" width="100px;" alt="JCarlos"/><br /><sub><b>JCarlos</b></sub></a><br /><a href="#translation-JCarlosR" title="Translation">🌍</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://www.mrmoshkel.ir"><img src="https://avatars.githubusercontent.com/u/60359433?v=4?s=100" width="100px;" alt="Ali Ghasemi"/><br /><sub><b>Ali Ghasemi</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Dev-AliGhasemi" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://carlfx.wordpress.com"><img src="https://avatars.githubusercontent.com/u/1594624?v=4?s=100" width="100px;" alt="Carl Dea"/><br /><sub><b>Carl Dea</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=carldea" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Mozartuss"><img src="https://avatars.githubusercontent.com/u/32893711?v=4?s=100" width="100px;" alt="Mozartus"/><br /><sub><b>Mozartus</b></sub></a><br /><a href="#translation-Mozartuss" title="Translation">🌍</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/ManviGoel26"><img src="https://avatars.githubusercontent.com/u/55682355?v=4?s=100" width="100px;" alt="Manvi Goel"/><br /><sub><b>Manvi Goel</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=ManviGoel26" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/blueberry404"><img src="https://avatars.githubusercontent.com/u/39243539?v=4?s=100" width="100px;" alt="Anum Amin"/><br /><sub><b>Anum Amin</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=blueberry404" title="Documentation">📖</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://uh-zz.github.io/blog/"><img src="https://avatars.githubusercontent.com/u/47747828?v=4?s=100" width="100px;" alt="Reo Uehara"/><br /><sub><b>Reo Uehara</b></sub></a><br /><a href="#translation-uh-zz" title="Translation">🌍</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Fiordy"><img src="https://avatars.githubusercontent.com/u/53420573?v=4?s=100" width="100px;" alt="Fiordy"/><br /><sub><b>Fiordy</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Fiordy" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/harshalkh"><img src="https://avatars.githubusercontent.com/u/37841724?v=4?s=100" width="100px;" alt="Harshal"/><br /><sub><b>Harshal</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=harshalkh" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://www.linkedin.com/in/abhinav-vashisth-06613b208/"><img src="https://avatars.githubusercontent.com/u/89785800?v=4?s=100" width="100px;" alt="Abhinav Vashisth"/><br /><sub><b>Abhinav Vashisth</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=vashisthabhinav" title="Documentation">📖</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://no website"><img src="https://avatars.githubusercontent.com/u/47126749?v=4?s=100" width="100px;" alt="Kevin"/><br /><sub><b>Kevin</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/pulls?q=is%3Apr+reviewed-by%3AKevinyl3" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/iluwatar/java-design-patterns/commits?author=Kevinyl3" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Shrirang97"><img src="https://avatars.githubusercontent.com/u/28738668?v=4?s=100" width="100px;" alt="Shrirang"/><br /><sub><b>Shrirang</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/pulls?q=is%3Apr+reviewed-by%3AShrirang97" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/iluwatar/java-design-patterns/commits?author=Shrirang97" title="Code">💻</a></td>
    </tr>
    <tr>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/interactwithankush"><img src="https://avatars.githubusercontent.com/u/18613127?v=4?s=100" width="100px;" alt="interactwithankush"/><br /><sub><b>interactwithankush</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=interactwithankush" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/yuhangbin"><img src="https://avatars.githubusercontent.com/u/17566866?v=4?s=100" width="100px;" alt="CharlieYu"/><br /><sub><b>CharlieYu</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=yuhangbin" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Leisterbecker"><img src="https://avatars.githubusercontent.com/u/20650323?v=4?s=100" width="100px;" alt="Leisterbecker"/><br /><sub><b>Leisterbecker</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=Leisterbecker" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="http://rosaecrucis.cn"><img src="https://avatars.githubusercontent.com/u/35420129?v=4?s=100" width="100px;" alt="DragonDreamer"/><br /><sub><b>DragonDreamer</b></sub></a><br /><a href="https://github.com/iluwatar/java-design-patterns/commits?author=castleKing1997" title="Code">💻</a></td>
      <td align="center" valign="top" width="16.66%"><a href="https://github.com/ShivanshCharak"><img src="https://avatars.githubusercontent.com/u/96943825?v=4?s=100" width="100px;" alt="ShivanshCh
Download .txt
Showing preview only (208K chars total). Download the full file or copy to clipboard to get everything.
gitextract_iyxrb95i/

├── .all-contributorsrc
├── .editorconfig
├── .github/
│   ├── FUNDING.yml
│   ├── dependabot.yml
│   └── workflows/
│       ├── maven-ci.yml
│       ├── maven-pr-builder.yml
│       ├── presubmit.yml
│       └── stale.yml
├── .gitignore
├── .mvn/
│   └── wrapper/
│       └── maven-wrapper.properties
├── CONTRIBUTING.MD
├── LICENSE.md
├── PULL_REQUEST_TEMPLATE.md
├── README.md
├── abstract-document/
│   ├── README.md
│   ├── etc/
│   │   ├── abstract-document.ucls
│   │   └── abstract-document.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── abstractdocument/
│       │                   ├── AbstractDocument.java
│       │                   ├── App.java
│       │                   ├── Document.java
│       │                   └── domain/
│       │                       ├── Car.java
│       │                       ├── HasModel.java
│       │                       ├── HasParts.java
│       │                       ├── HasPrice.java
│       │                       ├── HasType.java
│       │                       ├── Part.java
│       │                       └── enums/
│       │                           └── Property.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── abstractdocument/
│                           ├── AbstractDocumentTest.java
│                           ├── AppTest.java
│                           └── DomainTest.java
├── abstract-factory/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   └── abstract-factory.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── abstractfactory/
│       │                   ├── App.java
│       │                   ├── Army.java
│       │                   ├── Castle.java
│       │                   ├── ElfArmy.java
│       │                   ├── ElfCastle.java
│       │                   ├── ElfKing.java
│       │                   ├── ElfKingdomFactory.java
│       │                   ├── King.java
│       │                   ├── Kingdom.java
│       │                   ├── KingdomFactory.java
│       │                   ├── OrcArmy.java
│       │                   ├── OrcCastle.java
│       │                   ├── OrcKing.java
│       │                   └── OrcKingdomFactory.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── abstractfactory/
│                           ├── AbstractFactoryTest.java
│                           └── AppTest.java
├── active-object/
│   ├── README.md
│   ├── etc/
│   │   └── active-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── activeobject/
│       │                   ├── ActiveCreature.java
│       │                   ├── App.java
│       │                   └── Orc.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── activeobject/
│                           ├── ActiveCreatureTest.java
│                           └── AppTest.java
├── actor-model/
│   ├── README.md
│   ├── etc/
│   │   └── actor-model.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── actormodel/
│       │                   ├── Actor.java
│       │                   ├── ActorSystem.java
│       │                   ├── App.java
│       │                   ├── ExampleActor.java
│       │                   ├── ExampleActor2.java
│       │                   └── Message.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── actor/
│                           └── ActorModelTest.java
├── acyclic-visitor/
│   ├── README.md
│   ├── etc/
│   │   └── acyclic-visitor.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── acyclicvisitor/
│       │                   ├── AllModemVisitor.java
│       │                   ├── App.java
│       │                   ├── ConfigureForDosVisitor.java
│       │                   ├── ConfigureForUnixVisitor.java
│       │                   ├── Hayes.java
│       │                   ├── HayesVisitor.java
│       │                   ├── Modem.java
│       │                   ├── ModemVisitor.java
│       │                   ├── Zoom.java
│       │                   └── ZoomVisitor.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── acyclicvisitor/
│                           ├── AppTest.java
│                           ├── HayesTest.java
│                           └── ZoomTest.java
├── adapter/
│   ├── README.md
│   ├── etc/
│   │   └── adapter.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── adapter/
│       │                   ├── App.java
│       │                   ├── Captain.java
│       │                   ├── FishingBoat.java
│       │                   ├── FishingBoatAdapter.java
│       │                   ├── RowingBoat.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── adapter/
│                           ├── AdapterPatternTest.java
│                           └── AppTest.java
├── ambassador/
│   ├── README.md
│   ├── etc/
│   │   └── ambassador.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── ambassador/
│       │                   ├── App.java
│       │                   ├── Client.java
│       │                   ├── RemoteService.java
│       │                   ├── RemoteServiceInterface.java
│       │                   ├── RemoteServiceStatus.java
│       │                   ├── ServiceAmbassador.java
│       │                   └── util/
│       │                       └── RandomProvider.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── ambassador/
│                           ├── AppTest.java
│                           ├── ClientTest.java
│                           ├── RemoteServiceTest.java
│                           └── ServiceAmbassadorTest.java
├── anti-corruption-layer/
│   ├── README.md
│   ├── etc/
│   │   └── anti-corruption-layer.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── corruption/
│       │   │               ├── App.java
│       │   │               ├── package-info.java
│       │   │               └── system/
│       │   │                   ├── AntiCorruptionLayer.java
│       │   │                   ├── DataStore.java
│       │   │                   ├── ShopException.java
│       │   │                   ├── legacy/
│       │   │                   │   ├── LegacyOrder.java
│       │   │                   │   ├── LegacyShop.java
│       │   │                   │   └── LegacyStore.java
│       │   │                   └── modern/
│       │   │                       ├── Customer.java
│       │   │                       ├── ModernOrder.java
│       │   │                       ├── ModernShop.java
│       │   │                       ├── ModernStore.java
│       │   │                       └── Shipment.java
│       │   └── resources/
│       │       └── application.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── corruption/
│                           └── system/
│                               └── AntiCorruptionLayerTest.java
├── arrange-act-assert/
│   ├── README.md
│   ├── etc/
│   │   └── arrange-act-assert.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── arrangeactassert/
│       │                   └── Cash.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── arrangeactassert/
│                           ├── CashAAATest.java
│                           └── CashAntiAAATest.java
├── async-method-invocation/
│   ├── README.md
│   ├── etc/
│   │   └── async-method-invocation.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── async/
│       │                   └── method/
│       │                       └── invocation/
│       │                           ├── App.java
│       │                           ├── AsyncCallback.java
│       │                           ├── AsyncExecutor.java
│       │                           ├── AsyncResult.java
│       │                           └── ThreadAsyncExecutor.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── async/
│                           └── method/
│                               └── invocation/
│                                   ├── AppTest.java
│                                   └── ThreadAsyncExecutorTest.java
├── backpressure/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── backpressure/
│       │                   ├── App.java
│       │                   ├── Publisher.java
│       │                   └── Subscriber.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── backpressure/
│                           ├── AppTest.java
│                           ├── LoggerExtension.java
│                           ├── PublisherTest.java
│                           └── SubscriberTest.java
├── balking/
│   ├── README.md
│   ├── etc/
│   │   ├── balking.ucls
│   │   └── balking.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── balking/
│       │                   ├── App.java
│       │                   ├── DelayProvider.java
│       │                   ├── WashingMachine.java
│       │                   └── WashingMachineState.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── balking/
│                           ├── AppTest.java
│                           └── WashingMachineTest.java
├── bloc/
│   ├── README.md
│   ├── etc/
│   │   ├── bloc.puml
│   │   └── bloc.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── bloc/
│       │                   ├── Bloc.java
│       │                   ├── BlocUi.java
│       │                   ├── ListenerManager.java
│       │                   ├── Main.java
│       │                   ├── State.java
│       │                   └── StateListener.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── bloc/
│                           ├── BlocTest.java
│                           └── BlocUiTest.java
├── bridge/
│   ├── README.md
│   ├── etc/
│   │   └── bridge.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── bridge/
│       │                   ├── App.java
│       │                   ├── Enchantment.java
│       │                   ├── FlyingEnchantment.java
│       │                   ├── Hammer.java
│       │                   ├── SoulEatingEnchantment.java
│       │                   ├── Sword.java
│       │                   └── Weapon.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── bridge/
│                           ├── AppTest.java
│                           ├── HammerTest.java
│                           ├── SwordTest.java
│                           └── WeaponTest.java
├── builder/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   └── builder.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── builder/
│       │                   ├── App.java
│       │                   ├── Armor.java
│       │                   ├── HairColor.java
│       │                   ├── HairType.java
│       │                   ├── Hero.java
│       │                   ├── Profession.java
│       │                   └── Weapon.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── builder/
│                           ├── AppTest.java
│                           └── HeroTest.java
├── business-delegate/
│   ├── README.md
│   ├── etc/
│   │   └── business-delegate.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── business/
│       │                   └── delegate/
│       │                       ├── App.java
│       │                       ├── BusinessDelegate.java
│       │                       ├── BusinessLookup.java
│       │                       ├── MobileClient.java
│       │                       ├── NetflixService.java
│       │                       ├── VideoStreamingService.java
│       │                       └── YouTubeService.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── business/
│                           └── delegate/
│                               ├── AppTest.java
│                               └── BusinessDelegateTest.java
├── bytecode/
│   ├── README.md
│   ├── etc/
│   │   └── bytecode.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── bytecode/
│       │                   ├── App.java
│       │                   ├── Instruction.java
│       │                   ├── VirtualMachine.java
│       │                   ├── Wizard.java
│       │                   └── util/
│       │                       └── InstructionConverterUtil.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── bytecode/
│                           ├── AppTest.java
│                           ├── VirtualMachineTest.java
│                           └── util/
│                               └── InstructionConverterUtilTest.java
├── caching/
│   ├── .gitignore
│   ├── README.md
│   ├── docker-compose.yml
│   ├── etc/
│   │   ├── caching.ucls
│   │   └── caching.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── caching/
│       │                   ├── App.java
│       │                   ├── AppManager.java
│       │                   ├── CacheStore.java
│       │                   ├── CachingPolicy.java
│       │                   ├── LruCache.java
│       │                   ├── UserAccount.java
│       │                   ├── constants/
│       │                   │   ├── CachingConstants.java
│       │                   │   └── package-info.java
│       │                   ├── database/
│       │                   │   ├── DbManager.java
│       │                   │   ├── DbManagerFactory.java
│       │                   │   ├── MongoDb.java
│       │                   │   ├── VirtualDb.java
│       │                   │   └── package-info.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── caching/
│                           ├── AppTest.java
│                           ├── CachingTest.java
│                           └── database/
│                               └── MongoDbTest.java
├── callback/
│   ├── README.md
│   ├── etc/
│   │   ├── callback.ucls
│   │   └── callback.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── callback/
│       │                   ├── App.java
│       │                   ├── Callback.java
│       │                   ├── SimpleTask.java
│       │                   ├── Task.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── callback/
│                           ├── AppTest.java
│                           └── CallbackTest.java
├── chain-of-responsibility/
│   ├── README.md
│   ├── etc/
│   │   └── chain-of-responsibility.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── chain/
│       │                   ├── App.java
│       │                   ├── OrcCommander.java
│       │                   ├── OrcKing.java
│       │                   ├── OrcOfficer.java
│       │                   ├── OrcSoldier.java
│       │                   ├── Request.java
│       │                   ├── RequestHandler.java
│       │                   └── RequestType.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── chain/
│                           ├── AppTest.java
│                           └── OrcKingTest.java
├── checkstyle-suppressions.xml
├── circuit-breaker/
│   ├── README.md
│   ├── etc/
│   │   └── circuit-breaker.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── circuitbreaker/
│       │                   ├── App.java
│       │                   ├── CircuitBreaker.java
│       │                   ├── DefaultCircuitBreaker.java
│       │                   ├── DelayedRemoteService.java
│       │                   ├── MonitoringService.java
│       │                   ├── QuickRemoteService.java
│       │                   ├── RemoteService.java
│       │                   ├── RemoteServiceException.java
│       │                   └── State.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── circuitbreaker/
│                           ├── AppTest.java
│                           ├── DefaultCircuitBreakerTest.java
│                           ├── DelayedRemoteServiceTest.java
│                           └── MonitoringServiceTest.java
├── clean-architecture/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── cleanarchitecture/
│       │                   ├── App.java
│       │                   ├── Cart.java
│       │                   ├── CartController.java
│       │                   ├── CartRepository.java
│       │                   ├── InMemoryCartRepository.java
│       │                   ├── InMemoryOrderRepository.java
│       │                   ├── InMemoryProductRepository.java
│       │                   ├── Order.java
│       │                   ├── OrderController.java
│       │                   ├── OrderRepository.java
│       │                   ├── Product.java
│       │                   ├── ProductRepository.java
│       │                   ├── ShoppingCartService.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── cleanarchitecture/
│                           ├── AppTest.java
│                           └── CartControllerTest.java
├── client-session/
│   ├── README.md
│   ├── etc/
│   │   └── client-session.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── client/
│       │                   └── session/
│       │                       ├── App.java
│       │                       ├── Request.java
│       │                       ├── Server.java
│       │                       └── Session.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── client/
│                           └── session/
│                               ├── AppTest.java
│                               └── ServerTest.java
├── collecting-parameter/
│   ├── README.md
│   ├── etc/
│   │   └── collecting-parameter.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── collectingparameter/
│       │                   ├── App.java
│       │                   ├── PaperSizes.java
│       │                   ├── PrinterItem.java
│       │                   └── PrinterQueue.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── collectingparameter/
│                           ├── AppTest.java
│                           ├── CollectingParameterTest.java
│                           └── PrinterQueueTest.java
├── collection-pipeline/
│   ├── README.md
│   ├── etc/
│   │   └── collection-pipeline.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── collectionpipeline/
│       │                   ├── App.java
│       │                   ├── Car.java
│       │                   ├── CarFactory.java
│       │                   ├── Category.java
│       │                   ├── FunctionalProgramming.java
│       │                   ├── ImperativeProgramming.java
│       │                   └── Person.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── collectionpipeline/
│                           └── AppTest.java
├── combinator/
│   ├── README.md
│   ├── etc/
│   │   └── combinator.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── combinator/
│       │                   ├── CombinatorApp.java
│       │                   ├── Finder.java
│       │                   └── Finders.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── combinator/
│                           ├── CombinatorAppTest.java
│                           ├── FinderTest.java
│                           └── FindersTest.java
├── command/
│   ├── README.md
│   ├── etc/
│   │   ├── command.ucls
│   │   └── command.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── command/
│       │                   ├── App.java
│       │                   ├── Goblin.java
│       │                   ├── Size.java
│       │                   ├── Target.java
│       │                   ├── Visibility.java
│       │                   └── Wizard.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── command/
│                           ├── AppTest.java
│                           └── CommandTest.java
├── command-query-responsibility-segregation/
│   ├── README.md
│   ├── etc/
│   │   ├── command-query-responsibility-segregation.urm.puml
│   │   ├── cqrs.ucls
│   │   └── cqrs.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── cqrs/
│       │   │               ├── app/
│       │   │               │   └── App.java
│       │   │               ├── commandes/
│       │   │               │   ├── CommandService.java
│       │   │               │   └── CommandServiceImpl.java
│       │   │               ├── constants/
│       │   │               │   └── AppConstants.java
│       │   │               ├── domain/
│       │   │               │   └── model/
│       │   │               │       ├── Author.java
│       │   │               │       └── Book.java
│       │   │               ├── dto/
│       │   │               │   ├── Author.java
│       │   │               │   └── Book.java
│       │   │               ├── queries/
│       │   │               │   ├── QueryService.java
│       │   │               │   └── QueryServiceImpl.java
│       │   │               └── util/
│       │   │                   └── HibernateUtil.java
│       │   └── resources/
│       │       ├── hibernate.cfg.xml
│       │       └── logback.xml
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── iluwatar/
│           │           └── cqrs/
│           │               └── IntegrationTest.java
│           └── resources/
│               ├── hibernate.cfg.xml
│               └── logback.xml
├── commander/
│   ├── README.md
│   ├── etc/
│   │   └── commander.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── commander/
│       │                   ├── AppAllCases.java
│       │                   ├── Commander.java
│       │                   ├── Database.java
│       │                   ├── Order.java
│       │                   ├── Retry.java
│       │                   ├── RetryParams.java
│       │                   ├── Service.java
│       │                   ├── TimeLimits.java
│       │                   ├── User.java
│       │                   ├── employeehandle/
│       │                   │   ├── EmployeeDatabase.java
│       │                   │   └── EmployeeHandle.java
│       │                   ├── exceptions/
│       │                   │   ├── DatabaseUnavailableException.java
│       │                   │   ├── IsEmptyException.java
│       │                   │   ├── ItemUnavailableException.java
│       │                   │   ├── PaymentDetailsErrorException.java
│       │                   │   └── ShippingNotPossibleException.java
│       │                   ├── messagingservice/
│       │                   │   ├── MessagingDatabase.java
│       │                   │   └── MessagingService.java
│       │                   ├── paymentservice/
│       │                   │   ├── PaymentDatabase.java
│       │                   │   └── PaymentService.java
│       │                   ├── queue/
│       │                   │   ├── Queue.java
│       │                   │   ├── QueueDatabase.java
│       │                   │   └── QueueTask.java
│       │                   └── shippingservice/
│       │                       ├── ShippingDatabase.java
│       │                       └── ShippingService.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── commander/
│                           ├── CommanderTest.java
│                           └── RetryTest.java
├── component/
│   ├── README.md
│   ├── etc/
│   │   ├── component.uml.puml
│   │   └── component.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── component/
│       │                   ├── App.java
│       │                   ├── GameObject.java
│       │                   └── component/
│       │                       ├── graphiccomponent/
│       │                       │   ├── GraphicComponent.java
│       │                       │   └── ObjectGraphicComponent.java
│       │                       ├── inputcomponent/
│       │                       │   ├── DemoInputComponent.java
│       │                       │   ├── InputComponent.java
│       │                       │   └── PlayerInputComponent.java
│       │                       └── physiccomponent/
│       │                           ├── ObjectPhysicComponent.java
│       │                           └── PhysicComponent.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── component/
│                           ├── AppTest.java
│                           └── GameObjectTest.java
├── composite/
│   ├── README.md
│   ├── etc/
│   │   └── composite.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── composite/
│       │                   ├── App.java
│       │                   ├── Letter.java
│       │                   ├── LetterComposite.java
│       │                   ├── Messenger.java
│       │                   ├── Sentence.java
│       │                   └── Word.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── composite/
│                           ├── AppTest.java
│                           └── MessengerTest.java
├── composite-entity/
│   ├── README.md
│   ├── etc/
│   │   └── composite-entity.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── compositeentity/
│       │                   ├── App.java
│       │                   ├── CoarseGrainedObject.java
│       │                   ├── CompositeEntity.java
│       │                   ├── ConsoleCoarseGrainedObject.java
│       │                   ├── DependentObject.java
│       │                   ├── MessageDependentObject.java
│       │                   └── SignalDependentObject.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── compositeentity/
│                           ├── AppTest.java
│                           └── PersistenceTest.java
├── composite-view/
│   ├── README.md
│   ├── etc/
│   │   └── composite-view.urm.puml
│   ├── pom.xml
│   ├── src/
│   │   ├── main/
│   │   │   └── java/
│   │   │       └── com/
│   │   │           └── iluwatar/
│   │   │               └── compositeview/
│   │   │                   ├── AppServlet.java
│   │   │                   └── ClientPropertiesBean.java
│   │   └── test/
│   │       └── java/
│   │           └── com/
│   │               └── iluwatar/
│   │                   └── compositeview/
│   │                       ├── AppServletTest.java
│   │                       └── JavaBeansTest.java
│   └── web/
│       ├── WEB-INF/
│       │   └── web.xml
│       ├── businessNews.jsp
│       ├── header.jsp
│       ├── index.jsp
│       ├── localNews.jsp
│       ├── newsDisplay.jsp
│       ├── scienceNews.jsp
│       ├── sportsNews.jsp
│       └── worldNews.jsp
├── context-object/
│   ├── README.md
│   ├── etc/
│   │   └── context-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── context/
│       │                   └── object/
│       │                       ├── App.java
│       │                       ├── LayerA.java
│       │                       ├── LayerB.java
│       │                       ├── LayerC.java
│       │                       ├── ServiceContext.java
│       │                       └── ServiceContextFactory.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── contect/
│                           └── object/
│                               ├── AppTest.java
│                               └── ServiceContextTest.java
├── converter/
│   ├── README.md
│   ├── etc/
│   │   ├── Converter.ucls
│   │   └── converter.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── converter/
│       │                   ├── App.java
│       │                   ├── Converter.java
│       │                   ├── User.java
│       │                   ├── UserConverter.java
│       │                   └── UserDto.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── converter/
│                           ├── AppTest.java
│                           └── ConverterTest.java
├── curiously-recurring-template-pattern/
│   ├── README.md
│   ├── etc/
│   │   └── curiously-recurring-template-pattern.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── crtp/
│       │           ├── App.java
│       │           ├── Fighter.java
│       │           ├── MmaBantamweightFighter.java
│       │           ├── MmaFighter.java
│       │           ├── MmaHeavyweightFighter.java
│       │           └── MmaLightweightFighter.java
│       └── test/
│           └── java/
│               └── crtp/
│                   ├── AppTest.java
│                   └── FightTest.java
├── currying/
│   ├── README.md
│   ├── etc/
│   │   └── currying.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── currying/
│       │                   ├── App.java
│       │                   ├── Book.java
│       │                   └── Genre.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── currying/
│                           ├── AppTest.java
│                           └── BookCurryingTest.java
├── dao-factory/
│   ├── README.md
│   ├── etc/
│   │   └── dao-factory.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── daofactory/
│       │   │               ├── App.java
│       │   │               ├── CustomException.java
│       │   │               ├── Customer.java
│       │   │               ├── CustomerDAO.java
│       │   │               ├── DAOFactory.java
│       │   │               ├── DAOFactoryProvider.java
│       │   │               ├── DataSourceType.java
│       │   │               ├── FlatFileCustomerDAO.java
│       │   │               ├── FlatFileDataSourceFactory.java
│       │   │               ├── H2CustomerDAO.java
│       │   │               ├── H2DataSourceFactory.java
│       │   │               ├── MongoCustomerDAO.java
│       │   │               └── MongoDataSourceFactory.java
│       │   └── resources/
│       │       └── logback.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── daofactory/
│                           ├── AppTest.java
│                           ├── DAOFactoryTest.java
│                           ├── FlatFileCustomerDAOTest.java
│                           ├── H2CustomerDAOTest.java
│                           └── MongoCustomerDAOTest.java
├── data-access-object/
│   ├── README.md
│   ├── etc/
│   │   ├── dao.ucls
│   │   ├── dao.urm.puml
│   │   └── data-access-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── dao/
│       │                   ├── App.java
│       │                   ├── CustomException.java
│       │                   ├── Customer.java
│       │                   ├── CustomerDao.java
│       │                   ├── CustomerSchemaSql.java
│       │                   ├── DbCustomerDao.java
│       │                   └── InMemoryCustomerDao.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── dao/
│                           ├── AppTest.java
│                           ├── CustomerTest.java
│                           ├── DbCustomerDaoTest.java
│                           └── InMemoryCustomerDaoTest.java
├── data-bus/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   └── data-bus.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── databus/
│       │                   ├── AbstractDataType.java
│       │                   ├── App.java
│       │                   ├── DataBus.java
│       │                   ├── DataType.java
│       │                   ├── Member.java
│       │                   ├── data/
│       │                   │   ├── MessageData.java
│       │                   │   ├── StartingData.java
│       │                   │   └── StoppingData.java
│       │                   └── members/
│       │                       ├── MessageCollectorMember.java
│       │                       └── StatusMember.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── databus/
│                           ├── DataBusTest.java
│                           └── members/
│                               ├── MessageCollectorMemberTest.java
│                               └── StatusMemberTest.java
├── data-locality/
│   ├── README.md
│   ├── etc/
│   │   └── data-locality.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── data/
│       │                   └── locality/
│       │                       ├── Application.java
│       │                       └── game/
│       │                           ├── GameEntity.java
│       │                           └── component/
│       │                               ├── AiComponent.java
│       │                               ├── Component.java
│       │                               ├── PhysicsComponent.java
│       │                               ├── RenderComponent.java
│       │                               └── manager/
│       │                                   ├── AiComponentManager.java
│       │                                   ├── PhysicsComponentManager.java
│       │                                   └── RenderComponentManager.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── data/
│                           └── locality/
│                               └── ApplicationTest.java
├── data-mapper/
│   ├── README.md
│   ├── etc/
│   │   ├── data-mapper.ucls
│   │   └── data-mapper.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── datamapper/
│       │                   ├── App.java
│       │                   ├── DataMapperException.java
│       │                   ├── Student.java
│       │                   ├── StudentDataMapper.java
│       │                   └── StudentDataMapperImpl.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── datamapper/
│                           ├── AppTest.java
│                           ├── DataMapperTest.java
│                           └── StudentTest.java
├── data-transfer-object/
│   ├── README.md
│   ├── etc/
│   │   ├── data-transfer-object.ucls
│   │   └── data-transfer-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── datatransfer/
│       │                   ├── App.java
│       │                   ├── customer/
│       │                   │   ├── CustomerDto.java
│       │                   │   └── CustomerResource.java
│       │                   └── product/
│       │                       ├── Product.java
│       │                       ├── ProductDto.java
│       │                       └── ProductResource.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── datatransfer/
│                           ├── AppTest.java
│                           └── customer/
│                               └── CustomerResourceTest.java
├── decorator/
│   ├── README.md
│   ├── etc/
│   │   └── decorator.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── decorator/
│       │                   ├── App.java
│       │                   ├── ClubbedTroll.java
│       │                   ├── SimpleTroll.java
│       │                   └── Troll.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── decorator/
│                           ├── AppTest.java
│                           ├── ClubbedTrollTest.java
│                           └── SimpleTrollTest.java
├── delegation/
│   ├── README.md
│   ├── etc/
│   │   ├── delegation.ucls
│   │   └── delegation.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── delegation/
│       │                   └── simple/
│       │                       ├── App.java
│       │                       ├── Printer.java
│       │                       ├── PrinterController.java
│       │                       └── printers/
│       │                           ├── CanonPrinter.java
│       │                           ├── EpsonPrinter.java
│       │                           └── HpPrinter.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── delegation/
│                           └── simple/
│                               ├── AppTest.java
│                               └── DelegateTest.java
├── dependency-injection/
│   ├── README.md
│   ├── etc/
│   │   ├── dependency-injection.ucls
│   │   └── dependency-injection.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── dependency/
│       │                   └── injection/
│       │                       ├── AdvancedSorceress.java
│       │                       ├── AdvancedWizard.java
│       │                       ├── App.java
│       │                       ├── GuiceWizard.java
│       │                       ├── OldTobyTobacco.java
│       │                       ├── RivendellTobacco.java
│       │                       ├── SecondBreakfastTobacco.java
│       │                       ├── SimpleWizard.java
│       │                       ├── Tobacco.java
│       │                       ├── TobaccoModule.java
│       │                       └── Wizard.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── dependency/
│                           └── injection/
│                               ├── AdvancedSorceressTest.java
│                               ├── AdvancedWizardTest.java
│                               ├── AppTest.java
│                               ├── GuiceWizardTest.java
│                               ├── SimpleWizardTest.java
│                               └── utils/
│                                   └── InMemoryAppender.java
├── dirty-flag/
│   ├── README.md
│   ├── etc/
│   │   ├── dirty-flag.ucls
│   │   └── dirty-flag.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── dirtyflag/
│       │   │               ├── App.java
│       │   │               ├── DataFetcher.java
│       │   │               └── World.java
│       │   └── resources/
│       │       └── world.txt
│       └── test/
│           └── java/
│               └── org/
│                   └── dirty/
│                       └── flag/
│                           ├── AppTest.java
│                           └── DirtyFlagTest.java
├── domain-model/
│   ├── README.md
│   ├── etc/
│   │   └── domain-model.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── domainmodel/
│       │                   ├── App.java
│       │                   ├── Customer.java
│       │                   ├── CustomerDao.java
│       │                   ├── CustomerDaoImpl.java
│       │                   ├── Product.java
│       │                   ├── ProductDao.java
│       │                   └── ProductDaoImpl.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── domainmodel/
│                           ├── AppTest.java
│                           ├── CustomerDaoImplTest.java
│                           ├── CustomerTest.java
│                           ├── ProductDaoImplTest.java
│                           ├── ProductTest.java
│                           └── TestUtils.java
├── double-buffer/
│   ├── README.md
│   ├── etc/
│   │   └── double-buffer.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── doublebuffer/
│       │                   ├── App.java
│       │                   ├── Buffer.java
│       │                   ├── FrameBuffer.java
│       │                   ├── Pixel.java
│       │                   └── Scene.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── doublebuffer/
│                           ├── AppTest.java
│                           ├── FrameBufferTest.java
│                           └── SceneTest.java
├── double-checked-locking/
│   ├── README.md
│   ├── etc/
│   │   ├── double-checked-locking.ucls
│   │   └── double-checked-locking.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── doublechecked/
│       │   │               └── locking/
│       │   │                   ├── App.java
│       │   │                   ├── Inventory.java
│       │   │                   └── Item.java
│       │   └── resources/
│       │       └── logback.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── doublechecked/
│                           └── locking/
│                               ├── AppTest.java
│                               └── InventoryTest.java
├── double-dispatch/
│   ├── README.md
│   ├── etc/
│   │   ├── double-dispatch.ucls
│   │   └── double-dispatch.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── doubledispatch/
│       │                   ├── App.java
│       │                   ├── FlamingAsteroid.java
│       │                   ├── GameObject.java
│       │                   ├── Meteoroid.java
│       │                   ├── Rectangle.java
│       │                   ├── SpaceStationIss.java
│       │                   ├── SpaceStationMir.java
│       │                   └── constants/
│       │                       └── AppConstants.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── doubledispatch/
│                           ├── AppTest.java
│                           ├── CollisionTest.java
│                           ├── FlamingAsteroidTest.java
│                           ├── MeteoroidTest.java
│                           ├── RectangleTest.java
│                           ├── SpaceStationIssTest.java
│                           └── SpaceStationMirTest.java
├── dynamic-proxy/
│   ├── README.md
│   ├── etc/
│   │   └── dynamic-proxy.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── dynamicproxy/
│       │                   ├── Album.java
│       │                   ├── AlbumInvocationHandler.java
│       │                   ├── AlbumService.java
│       │                   ├── App.java
│       │                   └── tinyrestclient/
│       │                       ├── JsonUtil.java
│       │                       ├── TinyRestClient.java
│       │                       └── annotation/
│       │                           ├── Body.java
│       │                           ├── Delete.java
│       │                           ├── Get.java
│       │                           ├── Http.java
│       │                           ├── Path.java
│       │                           ├── Post.java
│       │                           └── Put.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── dynamicproxy/
│                           └── AppTest.java
├── event-aggregator/
│   ├── README.md
│   ├── etc/
│   │   ├── classes.ucls
│   │   └── event-aggregator.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── event/
│       │                   └── aggregator/
│       │                       ├── App.java
│       │                       ├── Event.java
│       │                       ├── EventEmitter.java
│       │                       ├── EventObserver.java
│       │                       ├── KingJoffrey.java
│       │                       ├── KingsHand.java
│       │                       ├── LordBaelish.java
│       │                       ├── LordVarys.java
│       │                       ├── Scout.java
│       │                       └── Weekday.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── event/
│                           └── aggregator/
│                               ├── AppTest.java
│                               ├── EventEmitterTest.java
│                               ├── EventTest.java
│                               ├── KingJoffreyTest.java
│                               ├── KingsHandTest.java
│                               ├── LordBaelishTest.java
│                               ├── LordVarysTest.java
│                               ├── ScoutTest.java
│                               └── WeekdayTest.java
├── event-based-asynchronous/
│   ├── README.md
│   ├── etc/
│   │   ├── event-asynchronous.ucls
│   │   ├── event-asynchronous.urm.puml
│   │   └── event-based-asynchronous.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── event/
│       │   │               └── asynchronous/
│       │   │                   ├── App.java
│       │   │                   ├── AsyncEvent.java
│       │   │                   ├── Event.java
│       │   │                   ├── EventDoesNotExistException.java
│       │   │                   ├── EventManager.java
│       │   │                   ├── InvalidOperationException.java
│       │   │                   ├── LongRunningEventException.java
│       │   │                   ├── MaxNumOfEventsAllowedException.java
│       │   │                   └── ThreadCompleteListener.java
│       │   └── resources/
│       │       └── config.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── event/
│                           └── asynchronous/
│                               ├── AppTest.java
│                               └── EventAsynchronousTest.java
├── event-driven-architecture/
│   ├── README.md
│   ├── etc/
│   │   ├── eda.ucls
│   │   └── event-driven-architecture.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── eda/
│       │                   ├── App.java
│       │                   ├── event/
│       │                   │   ├── AbstractEvent.java
│       │                   │   ├── UserCreatedEvent.java
│       │                   │   └── UserUpdatedEvent.java
│       │                   ├── framework/
│       │                   │   ├── Event.java
│       │                   │   ├── EventDispatcher.java
│       │                   │   └── Handler.java
│       │                   ├── handler/
│       │                   │   ├── UserCreatedEventHandler.java
│       │                   │   └── UserUpdatedEventHandler.java
│       │                   └── model/
│       │                       └── User.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── eda/
│                           ├── AppTest.java
│                           ├── event/
│                           │   └── UserCreatedEventTest.java
│                           └── framework/
│                               └── EventDispatcherTest.java
├── event-queue/
│   ├── README.md
│   ├── etc/
│   │   ├── Bass-Drum-1.aif
│   │   ├── Closed-Hi-Hat-1.aif
│   │   └── event-queue.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── event/
│       │                   └── queue/
│       │                       ├── App.java
│       │                       ├── Audio.java
│       │                       └── PlayMessage.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── event/
│                           └── queue/
│                               └── AudioTest.java
├── event-sourcing/
│   ├── README.md
│   ├── etc/
│   │   ├── event-sourcing.ucls
│   │   └── event-sourcing.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── event/
│       │                   └── sourcing/
│       │                       ├── app/
│       │                       │   └── App.java
│       │                       ├── domain/
│       │                       │   └── Account.java
│       │                       ├── event/
│       │                       │   ├── AccountCreateEvent.java
│       │                       │   ├── DomainEvent.java
│       │                       │   ├── MoneyDepositEvent.java
│       │                       │   └── MoneyTransferEvent.java
│       │                       ├── processor/
│       │                       │   ├── DomainEventProcessor.java
│       │                       │   ├── EventJournal.java
│       │                       │   └── JsonFileJournal.java
│       │                       └── state/
│       │                           └── AccountAggregate.java
│       └── test/
│           └── java/
│               └── IntegrationTest.java
├── execute-around/
│   ├── README.md
│   ├── etc/
│   │   ├── execute-around.ucls
│   │   └── execute-around.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── execute/
│       │                   └── around/
│       │                       ├── App.java
│       │                       ├── FileWriterAction.java
│       │                       └── SimpleFileWriter.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── execute/
│                           └── around/
│                               ├── AppTest.java
│                               └── SimpleFileWriterTest.java
├── extension-objects/
│   ├── README.md
│   ├── etc/
│   │   ├── extension-objects.urm.puml
│   │   └── extension_obj.ucls
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       ├── App.java
│       │       ├── abstractextensions/
│       │       │   ├── CommanderExtension.java
│       │       │   ├── SergeantExtension.java
│       │       │   ├── SoldierExtension.java
│       │       │   └── UnitExtension.java
│       │       ├── concreteextensions/
│       │       │   ├── Commander.java
│       │       │   ├── Sergeant.java
│       │       │   └── Soldier.java
│       │       └── units/
│       │           ├── CommanderUnit.java
│       │           ├── SergeantUnit.java
│       │           ├── SoldierUnit.java
│       │           └── Unit.java
│       └── test/
│           └── java/
│               ├── AppTest.java
│               ├── concreteextensions/
│               │   ├── CommanderTest.java
│               │   ├── SergeantTest.java
│               │   └── SoldierTest.java
│               └── units/
│                   ├── CommanderUnitTest.java
│                   ├── SergeantUnitTest.java
│                   ├── SoldierUnitTest.java
│                   └── UnitTest.java
├── facade/
│   ├── README.md
│   ├── etc/
│   │   └── facade.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── facade/
│       │                   ├── App.java
│       │                   ├── DwarvenCartOperator.java
│       │                   ├── DwarvenGoldDigger.java
│       │                   ├── DwarvenGoldmineFacade.java
│       │                   ├── DwarvenMineWorker.java
│       │                   └── DwarvenTunnelDigger.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── facade/
│                           ├── AppTest.java
│                           └── DwarvenGoldmineFacadeTest.java
├── factory/
│   ├── README.md
│   ├── etc/
│   │   └── factory.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── factory/
│       │                   ├── App.java
│       │                   ├── Coin.java
│       │                   ├── CoinFactory.java
│       │                   ├── CoinType.java
│       │                   ├── CopperCoin.java
│       │                   └── GoldCoin.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── factory/
│                           ├── AppTest.java
│                           └── CoinFactoryTest.java
├── factory-kit/
│   ├── README.md
│   ├── etc/
│   │   ├── factory-kit.ucls
│   │   └── factory-kit.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── factorykit/
│       │                   ├── App.java
│       │                   ├── Axe.java
│       │                   ├── Bow.java
│       │                   ├── Builder.java
│       │                   ├── Spear.java
│       │                   ├── Sword.java
│       │                   ├── Weapon.java
│       │                   ├── WeaponFactory.java
│       │                   └── WeaponType.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── factorykit/
│                           ├── app/
│                           │   └── AppTest.java
│                           └── factorykit/
│                               └── FactoryKitTest.java
├── factory-method/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   └── factory-method.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── factory/
│       │                   └── method/
│       │                       ├── App.java
│       │                       ├── Blacksmith.java
│       │                       ├── ElfBlacksmith.java
│       │                       ├── ElfWeapon.java
│       │                       ├── OrcBlacksmith.java
│       │                       ├── OrcWeapon.java
│       │                       ├── Weapon.java
│       │                       └── WeaponType.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── factory/
│                           └── method/
│                               ├── AppTest.java
│                               └── FactoryMethodTest.java
├── fanout-fanin/
│   ├── README.md
│   ├── etc/
│   │   └── fanout-fanin.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── fanout/
│       │                   └── fanin/
│       │                       ├── App.java
│       │                       ├── Consumer.java
│       │                       ├── FanOutFanIn.java
│       │                       └── SquareNumberRequest.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── fanout/
│                           └── fanin/
│                               ├── AppTest.java
│                               ├── FanOutFanInTest.java
│                               └── SquareNumberRequestTest.java
├── feature-toggle/
│   ├── README.md
│   ├── etc/
│   │   ├── feature-toggle.ucls
│   │   └── feature-toggle.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── featuretoggle/
│       │                   ├── App.java
│       │                   ├── pattern/
│       │                   │   ├── Service.java
│       │                   │   ├── propertiesversion/
│       │                   │   │   └── PropertiesFeatureToggleVersion.java
│       │                   │   └── tieredversion/
│       │                   │       └── TieredFeatureToggleVersion.java
│       │                   └── user/
│       │                       ├── User.java
│       │                       └── UserGroup.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── featuretoggle/
│                           ├── pattern/
│                           │   ├── propertiesversion/
│                           │   │   └── PropertiesFeatureToggleVersionTest.java
│                           │   └── tieredversion/
│                           │       └── TieredFeatureToggleVersionTest.java
│                           └── user/
│                               └── UserGroupTest.java
├── filterer/
│   ├── README.md
│   ├── etc/
│   │   └── filterer.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── filterer/
│       │                   ├── App.java
│       │                   ├── domain/
│       │                   │   └── Filterer.java
│       │                   └── threat/
│       │                       ├── ProbabilisticThreatAwareSystem.java
│       │                       ├── ProbableThreat.java
│       │                       ├── SimpleProbabilisticThreatAwareSystem.java
│       │                       ├── SimpleProbableThreat.java
│       │                       ├── SimpleThreat.java
│       │                       ├── SimpleThreatAwareSystem.java
│       │                       ├── Threat.java
│       │                       ├── ThreatAwareSystem.java
│       │                       └── ThreatType.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── filterer/
│                           ├── AppTest.java
│                           └── threat/
│                               ├── SimpleProbabilisticThreatAwareSystemTest.java
│                               └── SimpleThreatAwareSystemTest.java
├── fluent-interface/
│   ├── README.md
│   ├── etc/
│   │   ├── fluent-interface.urm.puml
│   │   ├── fluentinterface.ucls
│   │   └── fluentinterface.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── fluentinterface/
│       │                   ├── app/
│       │                   │   └── App.java
│       │                   └── fluentiterable/
│       │                       ├── FluentIterable.java
│       │                       ├── lazy/
│       │                       │   ├── DecoratingIterator.java
│       │                       │   └── LazyFluentIterable.java
│       │                       └── simple/
│       │                           └── SimpleFluentIterable.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── fluentinterface/
│                           ├── app/
│                           │   └── AppTest.java
│                           └── fluentiterable/
│                               ├── FluentIterableTest.java
│                               ├── lazy/
│                               │   └── LazyFluentIterableTest.java
│                               └── simple/
│                                   └── SimpleFluentIterableTest.java
├── flux/
│   ├── README.md
│   ├── etc/
│   │   ├── flux.ucls
│   │   └── flux.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── flux/
│       │                   ├── action/
│       │                   │   ├── Action.java
│       │                   │   ├── ActionType.java
│       │                   │   ├── Content.java
│       │                   │   ├── ContentAction.java
│       │                   │   ├── MenuAction.java
│       │                   │   └── MenuItem.java
│       │                   ├── app/
│       │                   │   └── App.java
│       │                   ├── dispatcher/
│       │                   │   └── Dispatcher.java
│       │                   ├── store/
│       │                   │   ├── ContentStore.java
│       │                   │   ├── MenuStore.java
│       │                   │   └── Store.java
│       │                   └── view/
│       │                       ├── ContentView.java
│       │                       ├── MenuView.java
│       │                       └── View.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── flux/
│                           ├── action/
│                           │   ├── ContentTest.java
│                           │   └── MenuItemTest.java
│                           ├── app/
│                           │   └── AppTest.java
│                           ├── dispatcher/
│                           │   └── DispatcherTest.java
│                           ├── store/
│                           │   ├── ContentStoreTest.java
│                           │   └── MenuStoreTest.java
│                           └── view/
│                               ├── ContentViewTest.java
│                               └── MenuViewTest.java
├── flyweight/
│   ├── README.md
│   ├── etc/
│   │   └── flyweight.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── flyweight/
│       │                   ├── AlchemistShop.java
│       │                   ├── App.java
│       │                   ├── HealingPotion.java
│       │                   ├── HolyWaterPotion.java
│       │                   ├── InvisibilityPotion.java
│       │                   ├── PoisonPotion.java
│       │                   ├── Potion.java
│       │                   ├── PotionFactory.java
│       │                   ├── PotionType.java
│       │                   └── StrengthPotion.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── flyweight/
│                           ├── AlchemistShopTest.java
│                           └── AppTest.java
├── front-controller/
│   ├── README.md
│   ├── etc/
│   │   ├── front-controller.ucls
│   │   └── front-controller.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── front/
│       │                   └── controller/
│       │                       ├── App.java
│       │                       ├── ApplicationException.java
│       │                       ├── ArcherCommand.java
│       │                       ├── ArcherView.java
│       │                       ├── CatapultCommand.java
│       │                       ├── CatapultView.java
│       │                       ├── Command.java
│       │                       ├── Dispatcher.java
│       │                       ├── ErrorView.java
│       │                       ├── FrontController.java
│       │                       ├── UnknownCommand.java
│       │                       └── View.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── front/
│                           └── controller/
│                               ├── AppTest.java
│                               ├── ApplicationExceptionTest.java
│                               ├── CommandTest.java
│                               ├── DispatcherTest.java
│                               ├── FrontControllerTest.java
│                               ├── ViewTest.java
│                               └── utils/
│                                   └── InMemoryAppender.java
├── function-composition/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   ├── function-composition.urm.puml
│   │   └── function.composition.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── function/
│       │                   └── composition/
│       │                       ├── App.java
│       │                       └── FunctionComposer.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── function/
│                           └── composition/
│                               ├── AppTest.java
│                               └── FunctionComposerTest.java
├── game-loop/
│   ├── README.md
│   ├── etc/
│   │   └── game-loop.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── gameloop/
│       │                   ├── App.java
│       │                   ├── Bullet.java
│       │                   ├── FixedStepGameLoop.java
│       │                   ├── FrameBasedGameLoop.java
│       │                   ├── GameController.java
│       │                   ├── GameLoop.java
│       │                   ├── GameStatus.java
│       │                   └── VariableStepGameLoop.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── gameloop/
│                           ├── AppTest.java
│                           ├── FixedStepGameLoopTest.java
│                           ├── FrameBasedGameLoopTest.java
│                           ├── GameControllerTest.java
│                           ├── GameLoopTest.java
│                           └── VariableStepGameLoopTest.java
├── gateway/
│   ├── README.md
│   ├── etc/
│   │   └── gateway.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── gateway/
│       │                   ├── App.java
│       │                   ├── ExternalServiceA.java
│       │                   ├── ExternalServiceB.java
│       │                   ├── ExternalServiceC.java
│       │                   ├── Gateway.java
│       │                   └── GatewayFactory.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── gateway/
│                           ├── AppTest.java
│                           └── ServiceFactoryTest.java
├── guarded-suspension/
│   ├── README.md
│   ├── etc/
│   │   ├── guarded-suspension.ucls
│   │   └── guarded-suspension.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── guarded/
│       │                   └── suspension/
│       │                       ├── App.java
│       │                       └── GuardedQueue.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── guarded/
│                           └── suspension/
│                               └── GuardedQueueTest.java
├── half-sync-half-async/
│   ├── README.md
│   ├── etc/
│   │   ├── half-sync-half-async.ucls
│   │   └── half-sync-half-async.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── halfsynchalfasync/
│       │                   ├── App.java
│       │                   ├── AsyncTask.java
│       │                   └── AsynchronousService.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── halfsynchalfasync/
│                           ├── AppTest.java
│                           └── AsynchronousServiceTest.java
├── health-check/
│   ├── README.md
│   ├── etc/
│   │   ├── health-check.puml
│   │   └── health-check.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── health/
│       │   │               └── check/
│       │   │                   ├── App.java
│       │   │                   ├── AsynchronousHealthChecker.java
│       │   │                   ├── CpuHealthIndicator.java
│       │   │                   ├── CustomHealthIndicator.java
│       │   │                   ├── DatabaseTransactionHealthIndicator.java
│       │   │                   ├── GarbageCollectionHealthIndicator.java
│       │   │                   ├── HealthCheck.java
│       │   │                   ├── HealthCheckInterruptedException.java
│       │   │                   ├── HealthCheckRepository.java
│       │   │                   ├── MemoryHealthIndicator.java
│       │   │                   └── RetryConfig.java
│       │   └── resources/
│       │       └── application.properties
│       └── test/
│           └── java/
│               ├── AppTest.java
│               ├── AsynchronousHealthCheckerTest.java
│               ├── CpuHealthIndicatorTest.java
│               ├── CustomHealthIndicatorTest.java
│               ├── DatabaseTransactionHealthIndicatorTest.java
│               ├── GarbageCollectionHealthIndicatorTest.java
│               ├── HealthCheckRepositoryTest.java
│               ├── HealthEndpointIntegrationTest.java
│               ├── MemoryHealthIndicatorTest.java
│               └── RetryConfigTest.java
├── hexagonal-architecture/
│   ├── README.md
│   ├── etc/
│   │   ├── hexagonal-architecture.urm.puml
│   │   ├── hexagonal.ucls
│   │   └── hexagonal.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── hexagonal/
│       │                   ├── App.java
│       │                   ├── administration/
│       │                   │   ├── ConsoleAdministration.java
│       │                   │   ├── ConsoleAdministrationSrv.java
│       │                   │   └── ConsoleAdministrationSrvImpl.java
│       │                   ├── banking/
│       │                   │   ├── InMemoryBank.java
│       │                   │   ├── MongoBank.java
│       │                   │   └── WireTransfers.java
│       │                   ├── database/
│       │                   │   ├── InMemoryTicketRepository.java
│       │                   │   ├── LotteryTicketRepository.java
│       │                   │   └── MongoTicketRepository.java
│       │                   ├── domain/
│       │                   │   ├── LotteryAdministration.java
│       │                   │   ├── LotteryConstants.java
│       │                   │   ├── LotteryNumbers.java
│       │                   │   ├── LotteryService.java
│       │                   │   ├── LotteryTicket.java
│       │                   │   ├── LotteryTicketCheckResult.java
│       │                   │   ├── LotteryTicketId.java
│       │                   │   ├── LotteryUtils.java
│       │                   │   └── PlayerDetails.java
│       │                   ├── eventlog/
│       │                   │   ├── LotteryEventLog.java
│       │                   │   ├── MongoEventLog.java
│       │                   │   └── StdOutEventLog.java
│       │                   ├── module/
│       │                   │   ├── LotteryModule.java
│       │                   │   └── LotteryTestingModule.java
│       │                   ├── mongo/
│       │                   │   └── MongoConnectionPropertiesLoader.java
│       │                   ├── sampledata/
│       │                   │   └── SampleData.java
│       │                   └── service/
│       │                       ├── ConsoleLottery.java
│       │                       ├── LotteryConsoleService.java
│       │                       └── LotteryConsoleServiceImpl.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── hexagonal/
│                           ├── AppTest.java
│                           ├── banking/
│                           │   ├── InMemoryBankTest.java
│                           │   └── MongoBankTest.java
│                           ├── database/
│                           │   ├── InMemoryTicketRepositoryTest.java
│                           │   └── MongoTicketRepositoryTest.java
│                           ├── domain/
│                           │   ├── LotteryNumbersTest.java
│                           │   ├── LotteryTest.java
│                           │   ├── LotteryTicketCheckResultTest.java
│                           │   ├── LotteryTicketIdTest.java
│                           │   ├── LotteryTicketTest.java
│                           │   └── PlayerDetailsTest.java
│                           ├── eventlog/
│                           │   └── MongoEventLogTest.java
│                           └── test/
│                               └── LotteryTestUtils.java
├── identity-map/
│   ├── README.md
│   ├── etc/
│   │   └── identity-map.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── identitymap/
│       │                   ├── App.java
│       │                   ├── IdNotFoundException.java
│       │                   ├── IdentityMap.java
│       │                   ├── Person.java
│       │                   ├── PersonDbSimulator.java
│       │                   ├── PersonDbSimulatorImplementation.java
│       │                   └── PersonFinder.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── identitymap/
│                           ├── AppTest.java
│                           ├── IdentityMapTest.java
│                           ├── PersonDbSimulatorImplementationTest.java
│                           ├── PersonFinderTest.java
│                           └── PersonTest.java
├── intercepting-filter/
│   ├── README.md
│   ├── etc/
│   │   ├── intercepting-filter.ucls
│   │   └── intercepting-filter.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── intercepting/
│       │                   └── filter/
│       │                       ├── AbstractFilter.java
│       │                       ├── AddressFilter.java
│       │                       ├── App.java
│       │                       ├── Client.java
│       │                       ├── ContactFilter.java
│       │                       ├── DepositFilter.java
│       │                       ├── Filter.java
│       │                       ├── FilterChain.java
│       │                       ├── FilterManager.java
│       │                       ├── NameFilter.java
│       │                       ├── Order.java
│       │                       ├── OrderFilter.java
│       │                       └── Target.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── intercepting/
│                           └── filter/
│                               ├── AppTest.java
│                               ├── FilterManagerTest.java
│                               ├── FilterTest.java
│                               ├── OrderTest.java
│                               └── TargetTest.java
├── interpreter/
│   ├── README.md
│   ├── etc/
│   │   ├── interpreter.ucls
│   │   └── interpreter.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── interpreter/
│       │                   ├── App.java
│       │                   ├── Expression.java
│       │                   ├── MinusExpression.java
│       │                   ├── MultiplyExpression.java
│       │                   ├── NumberExpression.java
│       │                   └── PlusExpression.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── interpreter/
│                           ├── AppTest.java
│                           ├── ExpressionTest.java
│                           ├── MinusExpressionTest.java
│                           ├── MultiplyExpressionTest.java
│                           ├── NumberExpressionTest.java
│                           └── PlusExpressionTest.java
├── iterator/
│   ├── README.md
│   ├── etc/
│   │   ├── iterator.ucls
│   │   └── iterator.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── iterator/
│       │                   ├── App.java
│       │                   ├── Iterator.java
│       │                   ├── bst/
│       │                   │   ├── BstIterator.java
│       │                   │   ├── README.md
│       │                   │   └── TreeNode.java
│       │                   └── list/
│       │                       ├── Item.java
│       │                       ├── ItemType.java
│       │                       ├── TreasureChest.java
│       │                       └── TreasureChestItemIterator.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── iterator/
│                           ├── AppTest.java
│                           ├── bst/
│                           │   └── BstIteratorTest.java
│                           └── list/
│                               └── TreasureChestTest.java
├── layered-architecture/
│   ├── README.md
│   ├── etc/
│   │   ├── layers.ucls
│   │   └── layers.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   ├── com/
│       │   │   │   └── iluwatar/
│       │   │   │       └── layers/
│       │   │   │           ├── Runner.java
│       │   │   │           └── app/
│       │   │   │               └── LayersApp.java
│       │   │   ├── dao/
│       │   │   │   ├── CakeDao.java
│       │   │   │   ├── CakeLayerDao.java
│       │   │   │   └── CakeToppingDao.java
│       │   │   ├── dto/
│       │   │   │   ├── CakeInfo.java
│       │   │   │   ├── CakeLayerInfo.java
│       │   │   │   └── CakeToppingInfo.java
│       │   │   ├── entity/
│       │   │   │   ├── Cake.java
│       │   │   │   ├── CakeLayer.java
│       │   │   │   └── CakeTopping.java
│       │   │   ├── exception/
│       │   │   │   └── CakeBakingException.java
│       │   │   ├── service/
│       │   │   │   ├── CakeBakingService.java
│       │   │   │   └── CakeBakingServiceImpl.java
│       │   │   └── view/
│       │   │       ├── CakeViewImpl.java
│       │   │       └── View.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── logback.xml
│       │       └── application.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── layers/
│                           ├── app/
│                           │   └── LayersAppTests.java
│                           ├── entity/
│                           │   └── CakeTest.java
│                           ├── exception/
│                           │   └── CakeBakingExceptionTest.java
│                           ├── service/
│                           │   └── CakeBakingServiceImplTest.java
│                           └── view/
│                               └── CakeViewImplTest.java
├── lazy-loading/
│   ├── README.md
│   ├── etc/
│   │   ├── lazy-loading.ucls
│   │   └── lazy-loading.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── lazy/
│       │                   └── loading/
│       │                       ├── App.java
│       │                       ├── Heavy.java
│       │                       ├── HolderNaive.java
│       │                       ├── HolderThreadSafe.java
│       │                       └── Java8Holder.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── lazy/
│                           └── loading/
│                               ├── AbstractHolderTest.java
│                               ├── AppTest.java
│                               ├── HolderNaiveTest.java
│                               ├── HolderThreadSafeTest.java
│                               └── Java8HolderTest.java
├── leader-election/
│   ├── README.md
│   ├── etc/
│   │   └── leader-election.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── leaderelection/
│       │                   ├── AbstractInstance.java
│       │                   ├── AbstractMessageManager.java
│       │                   ├── Instance.java
│       │                   ├── Message.java
│       │                   ├── MessageManager.java
│       │                   ├── MessageType.java
│       │                   ├── bully/
│       │                   │   ├── BullyApp.java
│       │                   │   ├── BullyInstance.java
│       │                   │   └── BullyMessageManager.java
│       │                   └── ring/
│       │                       ├── RingApp.java
│       │                       ├── RingInstance.java
│       │                       └── RingMessageManager.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── leaderelection/
│                           ├── MessageTest.java
│                           ├── bully/
│                           │   ├── BullyAppTest.java
│                           │   ├── BullyMessageManagerTest.java
│                           │   └── BullyinstanceTest.java
│                           └── ring/
│                               ├── RingAppTest.java
│                               ├── RingInstanceTest.java
│                               └── RingMessageManagerTest.java
├── leader-followers/
│   ├── README.md
│   ├── etc/
│   │   └── leader-followers.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── leaderfollowers/
│       │                   ├── App.java
│       │                   ├── Task.java
│       │                   ├── TaskHandler.java
│       │                   ├── TaskSet.java
│       │                   ├── WorkCenter.java
│       │                   └── Worker.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── leaderfollowers/
│                           ├── AppTest.java
│                           ├── TaskHandlerTest.java
│                           ├── TaskSetTest.java
│                           └── WorkCenterTest.java
├── lgpl-3.0.txt
├── localization/
│   ├── ar/
│   │   ├── README.md
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   └── README.md
│   │   ├── acyclic-visitor/
│   │   │   └── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── aggregator-microservices/
│   │   │   └── README.md
│   │   ├── ambassador/
│   │   │   └── README.md
│   │   ├── api-gateway/
│   │   │   └── README.md
│   │   ├── arrange-act-assert/
│   │   │   └── README.md
│   │   ├── async-method-invocation/
│   │   │   └── README.md
│   │   ├── balking/
│   │   │   └── README.md
│   │   ├── bridge/
│   │   │   └── README.md
│   │   ├── builder/
│   │   │   └── README.md
│   │   ├── business-delegate/
│   │   │   └── README.md
│   │   ├── bytecode/
│   │   │   └── README.md
│   │   ├── chain-of-responsibility/
│   │   │   └── README.md
│   │   ├── client-session/
│   │   │   └── README.md
│   │   ├── collecting-parameter/
│   │   │   └── README.md
│   │   ├── command/
│   │   │   └── README.md
│   │   ├── commander/
│   │   │   └── README.md
│   │   ├── composite/
│   │   │   └── README.md
│   │   ├── composite-entity/
│   │   │   └── README.md
│   │   ├── composite-view/
│   │   │   └── README.md
│   │   ├── context-object/
│   │   │   └── README.md
│   │   ├── converter/
│   │   │   └── README.md
│   │   ├── crtp/
│   │   │   └── README.md
│   │   ├── data-locality/
│   │   │   └── README.md
│   │   ├── decorator/
│   │   │   └── README.md
│   │   ├── delegation/
│   │   │   └── README.md
│   │   ├── dependency-injection/
│   │   │   └── README.md
│   │   ├── dirty-flag/
│   │   │   └── README.md
│   │   ├── double-buffer/
│   │   │   └── README.md
│   │   ├── embedded-value/
│   │   │   └── README.md
│   │   ├── event-aggregator/
│   │   │   └── README.md
│   │   ├── extension-objects/
│   │   │   └── README.md
│   │   ├── facade/
│   │   │   └── README.md
│   │   └── factory/
│   │       └── README.md
│   ├── bn/
│   │   └── README.md
│   ├── da/
│   │   └── README.md
│   ├── de/
│   │   ├── README.md
│   │   └── abstract-document/
│   │       └── README.md
│   ├── el/
│   │   └── README.md
│   ├── es/
│   │   ├── README.md
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   └── README.md
│   │   ├── acyclic-visitor/
│   │   │   └── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── aggregator-microservices/
│   │   │   └── README.md
│   │   ├── ambassador/
│   │   │   └── README.md
│   │   ├── api-gateway/
│   │   │   └── README.md
│   │   ├── arrange-act-assert/
│   │   │   └── README.md
│   │   ├── async-method-invocation/
│   │   │   └── README.md
│   │   ├── balking/
│   │   │   └── README.md
│   │   ├── bridge/
│   │   │   └── README.md
│   │   ├── builder/
│   │   │   └── README.md
│   │   ├── business-delegate/
│   │   │   └── README.md
│   │   ├── bytecode/
│   │   │   └── README.md
│   │   ├── chain-of-responsibility/
│   │   │   └── README.md
│   │   ├── client-session/
│   │   │   └── README.md
│   │   ├── collecting-parameter/
│   │   │   └── README.md
│   │   ├── command/
│   │   │   └── README.md
│   │   ├── commander/
│   │   │   └── README.md
│   │   ├── composite/
│   │   │   └── README.md
│   │   ├── composite-entity/
│   │   │   └── README.md
│   │   ├── composite-view/
│   │   │   └── README.md
│   │   ├── context-object/
│   │   │   └── README.md
│   │   ├── converter/
│   │   │   └── README.md
│   │   ├── crtp/
│   │   │   └── README.md
│   │   ├── data-locality/
│   │   │   └── README.md
│   │   ├── decorator/
│   │   │   └── README.md
│   │   ├── delegation/
│   │   │   └── README.md
│   │   ├── dependency-injection/
│   │   │   └── README.md
│   │   ├── dirty-flag/
│   │   │   └── README.md
│   │   ├── double-buffer/
│   │   │   └── README.md
│   │   ├── embedded-value/
│   │   │   └── README.md
│   │   ├── event-aggregator/
│   │   │   └── README.md
│   │   ├── extension-objects/
│   │   │   └── README.md
│   │   ├── facade/
│   │   │   └── README.md
│   │   ├── factory/
│   │   │   └── README.md
│   │   ├── factory-kit/
│   │   │   └── README.md
│   │   ├── factory-method/
│   │   │   └── README.md
│   │   ├── feature-toggle/
│   │   │   └── README.md
│   │   ├── flux/
│   │   │   └── README.md
│   │   ├── flyweight/
│   │   │   └── README.md
│   │   ├── front-controller/
│   │   │   └── README.md
│   │   ├── game-loop/
│   │   │   └── README.md
│   │   ├── gateway/
│   │   │   └── README.md
│   │   ├── health-check/
│   │   │   └── README.md
│   │   ├── identity-map/
│   │   │   └── README.md
│   │   ├── intercepting-filter/
│   │   │   └── README.md
│   │   ├── interpreter/
│   │   │   └── README.md
│   │   ├── iterator/
│   │   │   └── README.md
│   │   ├── layers/
│   │   │   └── README.md
│   │   ├── lazy-loading/
│   │   │   └── README.md
│   │   ├── leader-election/
│   │   │   └── README.md
│   │   ├── map-reduce/
│   │   │   └── README.md
│   │   ├── marker/
│   │   │   └── README.md
│   │   ├── mediator/
│   │   │   └── README.md
│   │   ├── memento/
│   │   │   └── README.md
│   │   ├── module/
│   │   │   └── README.md
│   │   ├── monostate/
│   │   │   └── README.md
│   │   ├── multiton/
│   │   │   └── README.md
│   │   ├── null-object/
│   │   │   └── README.md
│   │   ├── object-mother/
│   │   │   └── README.md
│   │   ├── object-pool/
│   │   │   └── README.md
│   │   ├── observer/
│   │   │   └── README.md
│   │   ├── page-controller/
│   │   │   └── README.md
│   │   ├── page-object/
│   │   │   └── README.md
│   │   ├── parameter-object/
│   │   │   └── README.md
│   │   ├── partial-response/
│   │   │   └── README.md
│   │   ├── pipeline/
│   │   │   └── README.md
│   │   ├── poison-pill/
│   │   │   └── README.md
│   │   ├── presentation-model/
│   │   │   └── README.md
│   │   ├── priority-queue/
│   │   │   └── README.md
│   │   ├── property/
│   │   │   └── README.md
│   │   ├── prototype/
│   │   │   └── README.md
│   │   ├── proxy/
│   │   │   └── README.md
│   │   ├── registry/
│   │   │   └── README.md
│   │   ├── retry/
│   │   │   └── README.md
│   │   ├── role-object/
│   │   │   └── README.md
│   │   ├── separated-interface/
│   │   │   └── README.md
│   │   ├── servant/
│   │   │   └── README.md
│   │   ├── sharding/
│   │   │   └── README.md
│   │   ├── single-table-inheritance/
│   │   │   └── README.md
│   │   ├── singleton/
│   │   │   └── README.md
│   │   ├── spatial-partition/
│   │   │   └── README.md
│   │   ├── special-case/
│   │   │   └── README.md
│   │   ├── specification/
│   │   │   └── README.md
│   │   ├── state/
│   │   │   └── README.md
│   │   ├── step-builder/
│   │   │   └── README.md
│   │   ├── strangler/
│   │   │   └── README.md
│   │   ├── strategy/
│   │   │   └── README.md
│   │   ├── subclass-sandbox/
│   │   │   └── README.md
│   │   ├── table-module/
│   │   │   └── README.md
│   │   ├── template-method/
│   │   │   └── README.md
│   │   ├── throttling/
│   │   │   └── README.md
│   │   ├── trampoline/
│   │   │   └── README.md
│   │   ├── transaction-script/
│   │   │   └── README.md
│   │   ├── twin/
│   │   │   └── README.md
│   │   ├── typeobjectpattern/
│   │   │   └── README.md
│   │   ├── update-method/
│   │   │   └── README.md
│   │   ├── value-object/
│   │   │   └── README.md
│   │   └── visitor/
│   │       └── README.md
│   ├── fa/
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   ├── README.md
│   │   │   └── etc/
│   │   │       └── active-object.urm.puml
│   │   └── factory/
│   │       └── README.md
│   ├── fr/
│   │   ├── README.md
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   └── README.md
│   │   ├── acyclic-visitore/
│   │   │   └── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── aggregator-microservices/
│   │   │   └── README.md
│   │   ├── ambassador/
│   │   │   └── README.md
│   │   ├── anti-corruption-layer/
│   │   │   └── README.md
│   │   ├── api-gateway/
│   │   │   └── README.md
│   │   ├── arrange-act-assert/
│   │   │   └── README.md
│   │   ├── async-method-invocation/
│   │   │   └── README.md
│   │   ├── balking/
│   │   │   └── README.md
│   │   ├── bridge/
│   │   │   └── README.md
│   │   ├── builder/
│   │   │   └── README.md
│   │   └── business-delegate/
│   │       └── README.md
│   ├── hi/
│   │   ├── README.md
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   └── README.md
│   │   ├── acyclic-visitor/
│   │   │   └── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── aggregator-microservices/
│   │   │   └── README.md
│   │   ├── ambassador/
│   │   │   └── README.md
│   │   ├── api-gateway/
│   │   │   └── README.md
│   │   ├── arrange-act-assert/
│   │   │   └── README.md
│   │   ├── async-method-invocation/
│   │   │   └── README.md
│   │   ├── balking/
│   │   │   └── README.md
│   │   ├── bridge/
│   │   │   └── README.md
│   │   ├── builder/
│   │   │   └── README.md
│   │   ├── business-delegate/
│   │   │   └── README.md
│   │   ├── bytecode/
│   │   │   └── README.md
│   │   ├── caching/
│   │   │   └── README.md
│   │   ├── callback/
│   │   │   └── README.md
│   │   ├── chain-of-responsibility/
│   │   │   └── README.md
│   │   ├── circuit-breaker/
│   │   │   └── README.md
│   │   ├── client-session/
│   │   │   └── README.md
│   │   ├── collecting-parameter/
│   │   │   └── README.md
│   │   ├── collection-pipeline/
│   │   │   └── README.md
│   │   ├── combinator/
│   │   │   └── README.md
│   │   ├── command/
│   │   │   └── README.md
│   │   ├── factory-method/
│   │   │   └── README.md
│   │   └── module/
│   │       └── README.md
│   ├── id/
│   │   ├── README.md
│   │   └── decorator/
│   │       └── README.md
│   ├── it/
│   │   ├── README.md
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   └── README.md
│   │   ├── acyclic-visitor/
│   │   │   └── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── iterator/
│   │   │   └── README.md
│   │   └── observer/
│   │       └── README.md
│   ├── ja/
│   │   ├── README.md
│   │   └── decorator/
│   │       └── README.md
│   ├── ko/
│   │   ├── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── builder/
│   │   │   └── README.md
│   │   ├── callback/
│   │   │   └── README.md
│   │   ├── decorater/
│   │   │   └── README.md
│   │   ├── event-driven-architecture/
│   │   │   └── README.md
│   │   ├── event-sourcing/
│   │   │   └── README.md
│   │   ├── facade/
│   │   │   └── README.md
│   │   ├── factory/
│   │   │   └── README.md
│   │   ├── factory-method/
│   │   │   └── README.md
│   │   ├── iterator/
│   │   │   └── README.md
│   │   ├── observer/
│   │   │   └── README.md
│   │   ├── prototype/
│   │   │   └── README.md
│   │   ├── proxy/
│   │   │   └── README.md
│   │   ├── singleton/
│   │   │   └── README.md
│   │   ├── strategy/
│   │   │   └── README.md
│   │   ├── template-method/
│   │   │   └── README.md
│   │   └── visitor/
│   │       └── README.md
│   ├── mr/
│   │   └── README.md
│   ├── ne/
│   │   └── README.md
│   ├── pt/
│   │   ├── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── builder/
│   │   │   └── README.md
│   │   ├── caching/
│   │   │   └── README.md
│   │   ├── chain-of-responsability/
│   │   │   └── README.md
│   │   ├── facade/
│   │   │   └── README.md
│   │   ├── factory/
│   │   │   └── README.md
│   │   ├── proxy/
│   │   │   └── README.md
│   │   └── singleton/
│   │       └── README.md
│   ├── ru/
│   │   ├── README.md
│   │   └── abstract-factory/
│   │       └── README.md
│   ├── si/
│   │   └── README.md
│   ├── tr/
│   │   ├── README.md
│   │   └── singleton/
│   │       └── README.md
│   ├── ur/
│   │   ├── README.md
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   └── README.md
│   │   └── acyclic-visitor/
│   │       └── README.md
│   ├── vi/
│   │   ├── README.md
│   │   ├── abstract-document/
│   │   │   └── README.md
│   │   ├── abstract-factory/
│   │   │   └── README.md
│   │   ├── active-object/
│   │   │   └── README.md
│   │   ├── acyclic-visitor/
│   │   │   └── README.md
│   │   ├── adapter/
│   │   │   └── README.md
│   │   ├── aggregator-microservices/
│   │   │   └── README.md
│   │   ├── builder/
│   │   │   └── README.md
│   │   └── game-loop/
│   │       └── README.md
│   └── zh/
│       ├── README.md
│       ├── abstract-document/
│       │   └── README.md
│       ├── abstract-factory/
│       │   └── README.md
│       ├── active-object/
│       │   └── README.md
│       ├── acyclic-visitor/
│       │   └── README.md
│       ├── adapter/
│       │   └── README.md
│       ├── aggregator-microservices/
│       │   └── README.md
│       ├── ambassador/
│       │   └── README.md
│       ├── api-gateway/
│       │   └── README.md
│       ├── arrange-act-assert/
│       │   └── README.md
│       ├── async-method-invocation/
│       │   └── README.md
│       ├── balking/
│       │   └── README.md
│       ├── bridge/
│       │   └── README.md
│       ├── builder/
│       │   └── README.md
│       ├── business-delegate/
│       │   └── README.md
│       ├── bytecode/
│       │   └── README.md
│       ├── caching/
│       │   └── README.md
│       ├── callback/
│       │   └── README.md
│       ├── chain/
│       │   └── README.md
│       ├── circuit-breaker/
│       │   └── README.md
│       ├── cloud-static-content-hosting/
│       │   └── README.md
│       ├── collection-pipeline/
│       │   └── README.md
│       ├── combinator/
│       │   └── README.md
│       ├── command/
│       │   └── README.md
│       ├── commander/
│       │   └── README.md
│       ├── composite/
│       │   └── README.md
│       ├── composite-entity/
│       │   └── README.md
│       ├── converter/
│       │   └── README.md
│       ├── crtp/
│       │   └── README.md
│       ├── dao/
│       │   └── README.md
│       ├── data-bus/
│       │   └── README.md
│       ├── data-mapper/
│       │   └── README.md
│       ├── data-transfer-object/
│       │   └── README.md
│       ├── decorator/
│       │   └── README.md
│       ├── delegation/
│       │   └── README.md
│       ├── dependency-injection/
│       │   └── README.md
│       ├── dirty-flag/
│       │   └── README.md
│       ├── double-checked-locking/
│       │   └── README.md
│       ├── facade/
│       │   └── README.md
│       ├── factory/
│       │   └── README.md
│       ├── factory-kit/
│       │   └── README.md
│       ├── factory-method/
│       │   └── README.md
│       ├── interpreter/
│       │   └── README.md
│       ├── iterator/
│       │   └── README.md
│       ├── monitor/
│       │   └── README.md
│       ├── observer/
│       │   └── README.md
│       ├── private-class-data/
│       │   └── README.md
│       ├── producer-consumer/
│       │   └── README.md
│       ├── proxy/
│       │   └── README.md
│       ├── servant/
│       │   └── README.md
│       ├── sharding/
│       │   └── README.md
│       ├── singleton/
│       │   └── README.md
│       ├── state/
│       │   └── README.md
│       ├── step-builder/
│       │   └── README.md
│       ├── strategy/
│       │   └── README.md
│       ├── table-module/
│       │   └── README.md
│       ├── template-method/
│       │   └── README.md
│       ├── trampoline/
│       │   └── README.md
│       ├── unit-of-work/
│       │   └── README.md
│       ├── update-method/
│       │   └── README.md
│       ├── value-object/
│       │   └── README.md
│       ├── version-number/
│       │   └── README.md
│       └── visitor/
│           └── README.md
├── lockable-object/
│   ├── README.md
│   ├── etc/
│   │   └── lockable-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── lockableobject/
│       │                   ├── App.java
│       │                   ├── Lockable.java
│       │                   ├── LockingException.java
│       │                   ├── SwordOfAragorn.java
│       │                   └── domain/
│       │                       ├── Creature.java
│       │                       ├── CreatureStats.java
│       │                       ├── CreatureType.java
│       │                       ├── Elf.java
│       │                       ├── Feind.java
│       │                       ├── Human.java
│       │                       └── Orc.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── lockableobject/
│                           ├── AppTest.java
│                           ├── CreatureTest.java
│                           ├── ExceptionsTest.java
│                           ├── FeindTest.java
│                           ├── SubCreaturesTests.java
│                           └── TheSwordOfAragornTest.java
├── lombok.config
├── map-reduce/
│   ├── README.md
│   ├── etc/
│   │   └── map-reduce.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               ├── Main.java
│       │               ├── MapReduce.java
│       │               ├── Mapper.java
│       │               ├── Reducer.java
│       │               └── Shuffler.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       ├── MapReduceTest.java
│                       ├── MapperTest.java
│                       ├── ReducerTest.java
│                       └── ShufflerTest.java
├── marker-interface/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   ├── MarkerDiagram.ucls
│   │   ├── marker-interface.urm.puml
│   │   └── marker.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       ├── App.java
│       │       ├── Guard.java
│       │       ├── Permission.java
│       │       └── Thief.java
│       └── test/
│           └── java/
│               ├── AppTest.java
│               ├── GuardTest.java
│               └── ThiefTest.java
├── master-worker/
│   ├── README.md
│   ├── etc/
│   │   ├── master-worker-pattern.urm.puml
│   │   └── master-worker.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── masterworker/
│       │                   ├── App.java
│       │                   ├── ArrayInput.java
│       │                   ├── ArrayResult.java
│       │                   ├── ArrayUtilityMethods.java
│       │                   ├── Input.java
│       │                   ├── Result.java
│       │                   └── system/
│       │                       ├── ArrayTransposeMasterWorker.java
│       │                       ├── MasterWorker.java
│       │                       ├── systemmaster/
│       │                       │   ├── ArrayTransposeMaster.java
│       │                       │   └── Master.java
│       │                       └── systemworkers/
│       │                           ├── ArrayTransposeWorker.java
│       │                           └── Worker.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── masterworker/
│                           ├── ArrayInputTest.java
│                           ├── ArrayUtilityMethodsTest.java
│                           └── system/
│                               ├── ArrayTransposeMasterWorkerTest.java
│                               └── systemworkers/
│                                   └── ArrayTransposeWorkerTest.java
├── mediator/
│   ├── README.md
│   ├── etc/
│   │   ├── mediator.ucls
│   │   └── mediator.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── mediator/
│       │                   ├── Action.java
│       │                   ├── App.java
│       │                   ├── Hobbit.java
│       │                   ├── Hunter.java
│       │                   ├── Party.java
│       │                   ├── PartyImpl.java
│       │                   ├── PartyMember.java
│       │                   ├── PartyMemberBase.java
│       │                   ├── Rogue.java
│       │                   └── Wizard.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── mediator/
│                           ├── AppTest.java
│                           ├── PartyImplTest.java
│                           └── PartyMemberTest.java
├── memento/
│   ├── README.md
│   ├── etc/
│   │   ├── memento.ucls
│   │   └── memento.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── memento/
│       │                   ├── App.java
│       │                   ├── Star.java
│       │                   ├── StarMemento.java
│       │                   └── StarType.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── memento/
│                           ├── AppTest.java
│                           └── StarTest.java
├── metadata-mapping/
│   ├── README.md
│   ├── etc/
│   │   ├── metadata-mapping.urm.puml
│   │   └── metamapping.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── metamapping/
│       │   │               ├── App.java
│       │   │               ├── model/
│       │   │               │   └── User.java
│       │   │               ├── service/
│       │   │               │   └── UserService.java
│       │   │               └── utils/
│       │   │                   ├── DatabaseUtil.java
│       │   │                   └── HibernateUtil.java
│       │   └── resources/
│       │       ├── com/
│       │       │   └── iluwatar/
│       │       │       └── metamapping/
│       │       │           └── model/
│       │       │               └── User.hbm.xml
│       │       ├── hibernate.cfg.xml
│       │       └── logback.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── metamapping/
│                           └── AppTest.java
├── microservices-aggregrator/
│   ├── README.md
│   ├── aggregator-service/
│   │   ├── etc/
│   │   │   └── aggregator-service.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── iluwatar/
│   │       │   │           └── aggregator/
│   │       │   │               └── microservices/
│   │       │   │                   ├── Aggregator.java
│   │       │   │                   ├── App.java
│   │       │   │                   ├── Product.java
│   │       │   │                   ├── ProductInformationClient.java
│   │       │   │                   ├── ProductInformationClientImpl.java
│   │       │   │                   ├── ProductInventoryClient.java
│   │       │   │                   └── ProductInventoryClientImpl.java
│   │       │   └── resources/
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── iluwatar/
│   │                       └── aggregator/
│   │                           └── microservices/
│   │                               └── AggregatorTest.java
│   ├── etc/
│   │   ├── aggregator-microservices.urm.puml
│   │   └── microservices-aggregrator.urm.puml
│   ├── information-microservice/
│   │   ├── etc/
│   │   │   └── information-microservice.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── iluwatar/
│   │       │   │           └── information/
│   │       │   │               └── microservice/
│   │       │   │                   ├── InformationApplication.java
│   │       │   │                   └── InformationController.java
│   │       │   └── resources/
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── iluwatar/
│   │                       └── information/
│   │                           └── microservice/
│   │                               └── InformationControllerTest.java
│   ├── inventory-microservice/
│   │   ├── etc/
│   │   │   └── inventory-microservice.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── iluwatar/
│   │       │   │           └── inventory/
│   │       │   │               └── microservice/
│   │       │   │                   ├── InventoryApplication.java
│   │       │   │                   └── InventoryController.java
│   │       │   └── resources/
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── iluwatar/
│   │                       └── inventory/
│   │                           └── microservice/
│   │                               └── InventoryControllerTest.java
│   └── pom.xml
├── microservices-api-gateway/
│   ├── README.md
│   ├── api-gateway-service/
│   │   ├── etc/
│   │   │   └── api-gateway-service.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── iluwatar/
│   │       │   │           └── api/
│   │       │   │               └── gateway/
│   │       │   │                   ├── ApiGateway.java
│   │       │   │                   ├── App.java
│   │       │   │                   ├── DesktopProduct.java
│   │       │   │                   ├── ImageClient.java
│   │       │   │                   ├── ImageClientImpl.java
│   │       │   │                   ├── MobileProduct.java
│   │       │   │                   ├── PriceClient.java
│   │       │   │                   └── PriceClientImpl.java
│   │       │   └── resources/
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── iluwatar/
│   │                       └── api/
│   │                           └── gateway/
│   │                               └── ApiGatewayTest.java
│   ├── etc/
│   │   ├── api-gateway.ucls
│   │   ├── api-gateway.urm.puml
│   │   └── microservices-api-gateway.urm.puml
│   ├── image-microservice/
│   │   ├── etc/
│   │   │   ├── image-microservice.ucls
│   │   │   └── image-microservice.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── iluwatar/
│   │       │   │           └── image/
│   │       │   │               └── microservice/
│   │       │   │                   ├── ImageApplication.java
│   │       │   │                   └── ImageController.java
│   │       │   └── resources/
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── iluwatar/
│   │                       └── image/
│   │                           └── microservice/
│   │                               └── ImageControllerTest.java
│   ├── pom.xml
│   └── price-microservice/
│       ├── etc/
│       │   ├── price-microservice.ucls
│       │   └── price-microservice.urm.puml
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   ├── java/
│           │   │   └── com/
│           │   │       └── iluwatar/
│           │   │           └── price/
│           │   │               └── microservice/
│           │   │                   ├── PriceApplication.java
│           │   │                   ├── PriceController.java
│           │   │                   ├── PriceService.java
│           │   │                   └── PriceServiceImpl.java
│           │   └── resources/
│           │       └── application.properties
│           └── test/
│               └── java/
│                   └── com/
│                       └── iluwatar/
│                           └── price/
│                               └── microservice/
│                                   ├── PriceControllerTest.java
│                                   └── PriceServiceTest.java
├── microservices-client-side-ui-composition/
│   ├── README.md
│   ├── etc/
│   │   ├── client-side-ui-composition.urm.puml
│   │   └── microservices-client-side-ui-composition.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── clientsideuicomposition/
│       │                   ├── ApiGateway.java
│       │                   ├── CartFrontend.java
│       │                   ├── ClientSideIntegrator.java
│       │                   ├── FrontendComponent.java
│       │                   └── ProductFrontend.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── clientsideuicomposition/
│                           └── ClientSideCompositionTest.java
├── microservices-distributed-tracing/
│   ├── README.md
│   ├── etc/
│   │   ├── microservices-distributed-tracing.puml
│   │   └── microservices-distributed-tracing.urm.puml
│   ├── order-microservice/
│   │   ├── etc/
│   │   │   ├── order-microservice.puml
│   │   │   └── order-microservice.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── iluwatar/
│   │       │   │           └── order/
│   │       │   │               └── microservice/
│   │       │   │                   ├── Main.java
│   │       │   │                   ├── OrderController.java
│   │       │   │                   └── OrderService.java
│   │       │   └── resources/
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── iluwatar/
│   │                       └── order/
│   │                           └── microservice/
│   │                               ├── MainTest.java
│   │                               ├── OrderControllerTest.java
│   │                               └── OrderServiceTest.java
│   ├── payment-microservice/
│   │   ├── etc/
│   │   │   ├── payment-microservice.puml
│   │   │   └── payment-microservice.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── iluwatar/
│   │       │   │           └── payment/
│   │       │   │               └── microservice/
│   │       │   │                   ├── Main.java
│   │       │   │                   └── PaymentController.java
│   │       │   └── resources/
│   │       │       └── application.properties
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── iluwatar/
│   │                       └── payment/
│   │                           └── microservice/
│   │                               ├── MainTest.java
│   │                               └── ProductControllerTest.java
│   ├── pom.xml
│   └── product-microservice/
│       ├── etc/
│       │   ├── product-microservice.puml
│       │   └── product-microservice.urm.puml
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   ├── java/
│           │   │   └── com/
│           │   │       └── iluwatar/
│           │   │           └── product/
│           │   │               └── microservice/
│           │   │                   └── microservice/
│           │   │                       ├── Main.java
│           │   │                       └── ProductController.java
│           │   └── resources/
│           │       └── application.properties
│           └── test/
│               └── java/
│                   └── com/
│                       └── iluwatar/
│                           └── product/
│                               └── microservice/
│                                   ├── MainTest.java
│                                   └── ProductControllerTest.java
├── microservices-idempotent-consumer/
│   ├── README.md
│   ├── etc/
│   │   └── microservices-idempotent-consumer.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── idempotentconsumer/
│       │                   ├── App.java
│       │                   ├── InvalidNextStateException.java
│       │                   ├── Request.java
│       │                   ├── RequestNotFoundException.java
│       │                   ├── RequestRepository.java
│       │                   ├── RequestService.java
│       │                   └── RequestStateMachine.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── idempotentconsumer/
│                           ├── AppTest.java
│                           ├── RequestServiceTests.java
│                           └── RequestStateMachineTests.java
├── microservices-log-aggregation/
│   ├── README.md
│   ├── etc/
│   │   ├── log-aggregation.puml
│   │   ├── log-aggregation.urm.puml
│   │   └── microservices-log-aggregation.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── logaggregation/
│       │                   ├── App.java
│       │                   ├── CentralLogStore.java
│       │                   ├── LogAggregator.java
│       │                   ├── LogEntry.java
│       │                   ├── LogLevel.java
│       │                   └── LogProducer.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── logaggregation/
│                           └── LogAggregatorTest.java
├── microservices-self-registration/
│   ├── README.md
│   ├── contextservice/
│   │   ├── .gitattributes
│   │   ├── .gitignore
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── learning/
│   │       │   │           └── contextservice/
│   │       │   │               ├── ContextserviceApplication.java
│   │       │   │               ├── MyCustomHealthCheck.java
│   │       │   │               ├── client/
│   │       │   │               │   └── GreetingServiceClient.java
│   │       │   │               └── controller/
│   │       │   │                   └── ContextController.java
│   │       │   └── resources/
│   │       │       └── application.yml
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── learning/
│   │                       └── contextservice/
│   │                           ├── ContextControllerTest.java
│   │                           ├── ContextserviceApplicationTests.java
│   │                           ├── TestConfig.java
│   │                           └── myCustomHealthCheckTest.java
│   ├── eurekaserver/
│   │   ├── .gitattributes
│   │   ├── .gitignore
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── learning/
│   │       │   │           └── eurekaserver/
│   │       │   │               └── EurekaserverApplication.java
│   │       │   └── resources/
│   │       │       └── application.yml
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── learning/
│   │                       └── eurekaserver/
│   │                           └── EurekaserverApplicationTests.java
│   ├── greetingservice/
│   │   ├── .gitattributes
│   │   ├── .gitignore
│   │   ├── pom.xml
│   │   └── src/
│   │       ├── main/
│   │       │   ├── java/
│   │       │   │   └── com/
│   │       │   │       └── learning/
│   │       │   │           └── greetingservice/
│   │       │   │               ├── GreetingserviceApplication.java
│   │       │   │               ├── MyCustomHealthCheck.java
│   │       │   │               └── controller/
│   │       │   │                   └── GreetingsController.java
│   │       │   └── resources/
│   │       │       └── application.yml
│   │       └── test/
│   │           └── java/
│   │               └── com/
│   │                   └── learning/
│   │                       └── greetingservice/
│   │                           ├── GreetingserviceApplicationTests.java
│   │                           ├── MyCustomHealthCheckTest.java
│   │                           └── controller/
│   │                               └── GreetingControllerTest.java
│   └── pom.xml
├── model-view-controller/
│   ├── README.md
│   ├── etc/
│   │   ├── model-view-controller.ucls
│   │   └── model-view-controller.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── model/
│       │                   └── view/
│       │                       └── controller/
│       │                           ├── App.java
│       │                           ├── Fatigue.java
│       │                           ├── GiantController.java
│       │                           ├── GiantModel.java
│       │                           ├── GiantView.java
│       │                           ├── Health.java
│       │                           └── Nourishment.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── model/
│                           └── view/
│                               └── controller/
│                                   ├── AppTest.java
│                                   ├── GiantControllerTest.java
│                                   ├── GiantModelTest.java
│                                   └── GiantViewTest.java
├── model-view-intent/
│   ├── README.md
│   ├── etc/
│   │   └── model-view-intent.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── model/
│       │                   └── view/
│       │                       └── intent/
│       │                           ├── App.java
│       │                           ├── CalculatorModel.java
│       │                           ├── CalculatorView.java
│       │                           ├── CalculatorViewModel.java
│       │                           ├── actions/
│       │                           │   ├── AdditionCalculatorAction.java
│       │                           │   ├── CalculatorAction.java
│       │                           │   ├── DivisionCalculatorAction.java
│       │                           │   ├── MultiplicationCalculatorAction.java
│       │                           │   ├── SetVariableCalculatorAction.java
│       │                           │   ├── SubtractionCalculatorAction.java
│       │                           │   └── package-info.java
│       │                           └── package-info.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── model/
│                           └── view/
│                               └── intent/
│                                   ├── AppTest.java
│                                   └── CalculatorViewModelTest.java
├── model-view-presenter/
│   ├── README.md
│   ├── etc/
│   │   ├── data/
│   │   │   └── test.txt
│   │   ├── model-view-presenter.ucls
│   │   └── model-view-presenter.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── model/
│       │                   └── view/
│       │                       └── presenter/
│       │                           ├── App.java
│       │                           ├── FileLoader.java
│       │                           ├── FileSelectorJframe.java
│       │                           ├── FileSelectorPresenter.java
│       │                           ├── FileSelectorStub.java
│       │                           └── FileSelectorView.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── model/
│                           └── view/
│                               └── presenter/
│                                   ├── AppTest.java
│                                   ├── FileLoaderTest.java
│                                   ├── FileSelectorJframeTest.java
│                                   └── FileSelectorPresenterTest.java
├── model-view-viewmodel/
│   ├── README.md
│   ├── etc/
│   │   └── model-view-viewmodel.urm.puml
│   ├── lombok.config
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── assembly/
│       │   │   └── webapp.xml
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── model/
│       │   │               └── view/
│       │   │                   └── viewmodel/
│       │   │                       ├── Book.java
│       │   │                       ├── BookService.java
│       │   │                       ├── BookServiceImpl.java
│       │   │                       └── BookViewModel.java
│       │   └── webapp/
│       │       ├── META-INF/
│       │       │   └── MANIFEST.MF
│       │       ├── WEB-INF/
│       │       │   └── web.xml
│       │       └── index.zul
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── model/
│                           └── view/
│                               └── viewmodel/
│                                   └── BookTest.java
├── monad/
│   ├── README.md
│   ├── etc/
│   │   ├── monad.ucls
│   │   └── monad.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── monad/
│       │                   ├── App.java
│       │                   ├── Sex.java
│       │                   ├── User.java
│       │                   └── Validator.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── monad/
│                           ├── AppTest.java
│                           └── MonadTest.java
├── money/
│   ├── README.md
│   ├── etc/
│   │   └── money.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               ├── App.java
│       │               ├── CannotAddTwoCurrienciesException.java
│       │               ├── CannotSubtractException.java
│       │               └── Money.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwater/
│                       └── money/
│                           └── MoneyTest.java
├── monitor/
│   ├── README.md
│   ├── etc/
│   │   └── monitor.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── monitor/
│       │                   ├── Bank.java
│       │                   └── Main.java
│       └── test/
│           ├── java/
│           │   └── com/
│           │       └── iluwatar/
│           │           └── monitor/
│           │               ├── BankTest.java
│           │               └── MainTest.java
│           └── resources/
│               └── logback.xml
├── monolithic-architecture/
│   ├── README.md
│   ├── etc/
│   │   ├── Monolithic-Ecommerce.urm.puml
│   │   └── monolithic-architecture.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── monolithic/
│       │   │               ├── EcommerceApp.java
│       │   │               ├── controller/
│       │   │               │   ├── OrderController.java
│       │   │               │   ├── ProductController.java
│       │   │               │   └── UserController.java
│       │   │               ├── exceptions/
│       │   │               │   ├── InsufficientStockException.java
│       │   │               │   ├── NonExistentProductException.java
│       │   │               │   └── NonExistentUserException.java
│       │   │               ├── model/
│       │   │               │   ├── Order.java
│       │   │               │   ├── Product.java
│       │   │               │   └── User.java
│       │   │               └── repository/
│       │   │                   ├── OrderRepository.java
│       │   │                   ├── ProductRepository.java
│       │   │                   └── UserRepository.java
│       │   └── resources/
│       │       └── application.properties
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── monolithic/
│                           └── MonolithicAppTest.java
├── monostate/
│   ├── README.md
│   ├── etc/
│   │   ├── MonoState.ucls
│   │   └── monostate.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── monostate/
│       │                   ├── App.java
│       │                   ├── LoadBalancer.java
│       │                   ├── Request.java
│       │                   └── Server.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── monostate/
│                           ├── AppTest.java
│                           └── LoadBalancerTest.java
├── multiton/
│   ├── README.md
│   ├── etc/
│   │   ├── multiton.ucls
│   │   └── multiton.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── multiton/
│       │                   ├── App.java
│       │                   ├── Nazgul.java
│       │                   ├── NazgulEnum.java
│       │                   └── NazgulName.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── multiton/
│                           ├── AppTest.java
│                           ├── NazgulEnumTest.java
│                           └── NazgulTest.java
├── mute-idiom/
│   ├── README.md
│   ├── etc/
│   │   ├── mute-idiom.ucls
│   │   └── mute-idiom.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── mute/
│       │                   ├── App.java
│       │                   ├── CheckedRunnable.java
│       │                   ├── Mute.java
│       │                   └── Resource.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── mute/
│                           ├── AppTest.java
│                           └── MuteTest.java
├── mvnw
├── mvnw.cmd
├── naked-objects/
│   └── README.md
├── notification/
│   ├── README.md
│   ├── etc/
│   │   └── notification.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               ├── App.java
│       │               ├── DataTransferObject.java
│       │               ├── Notification.java
│       │               ├── NotificationError.java
│       │               ├── RegisterWorker.java
│       │               ├── RegisterWorkerDto.java
│       │               ├── RegisterWorkerForm.java
│       │               ├── RegisterWorkerService.java
│       │               └── ServerCommand.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       ├── AppTest.java
│                       ├── RegisterWorkerFormTest.java
│                       └── RegisterWorkerTest.java
├── null-object/
│   ├── README.md
│   ├── etc/
│   │   ├── null-object.ucls
│   │   └── null-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── nullobject/
│       │                   ├── App.java
│       │                   ├── Node.java
│       │                   ├── NodeImpl.java
│       │                   └── NullNode.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── nullobject/
│                           ├── AppTest.java
│                           ├── NullNodeTest.java
│                           └── TreeTest.java
├── object-mother/
│   ├── README.md
│   ├── etc/
│   │   ├── object-mother.ucls
│   │   └── object-mother.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── objectmother/
│       │                   ├── King.java
│       │                   ├── Queen.java
│       │                   ├── Royalty.java
│       │                   └── RoyaltyObjectMother.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── objectmother/
│                           └── test/
│                               └── RoyaltyObjectMotherTest.java
├── object-pool/
│   ├── README.md
│   ├── etc/
│   │   ├── object-pool.ucls
│   │   └── object-pool.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── object/
│       │                   └── pool/
│       │                       ├── App.java
│       │                       ├── ObjectPool.java
│       │                       ├── Oliphaunt.java
│       │                       └── OliphauntPool.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── object/
│                           └── pool/
│                               ├── AppTest.java
│                               └── OliphauntPoolTest.java
├── observer/
│   ├── README.md
│   ├── etc/
│   │   ├── observer.ucls
│   │   └── observer.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── observer/
│       │                   ├── App.java
│       │                   ├── Hobbits.java
│       │                   ├── Orcs.java
│       │                   ├── Weather.java
│       │                   ├── WeatherObserver.java
│       │                   ├── WeatherType.java
│       │                   └── generic/
│       │                       ├── GenHobbits.java
│       │                       ├── GenOrcs.java
│       │                       ├── GenWeather.java
│       │                       ├── Observable.java
│       │                       ├── Observer.java
│       │                       └── Race.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── observer/
│                           ├── AppTest.java
│                           ├── HobbitsTest.java
│                           ├── OrcsTest.java
│                           ├── WeatherObserverTest.java
│                           ├── WeatherTest.java
│                           ├── generic/
│                           │   ├── GHobbitsTest.java
│                           │   ├── GWeatherTest.java
│                           │   ├── ObserverTest.java
│                           │   └── OrcsTest.java
│                           └── utils/
│                               └── InMemoryAppender.java
├── optimistic-offline-lock/
│   ├── README.md
│   ├── etc/
│   │   └── optimistic-offline-lock.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               ├── api/
│       │               │   └── UpdateService.java
│       │               ├── exception/
│       │               │   └── ApplicationException.java
│       │               ├── model/
│       │               │   └── Card.java
│       │               ├── repository/
│       │               │   └── JpaRepository.java
│       │               └── service/
│       │                   └── CardUpdateService.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── OptimisticLockTest.java
├── page-controller/
│   ├── README.md
│   ├── etc/
│   │   └── page-controller.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── page/
│       │   │               └── controller/
│       │   │                   ├── App.java
│       │   │                   ├── SignupController.java
│       │   │                   ├── SignupModel.java
│       │   │                   ├── SignupView.java
│       │   │                   ├── UserController.java
│       │   │                   ├── UserModel.java
│       │   │                   └── UserView.java
│       │   └── resources/
│       │       ├── application.properties
│       │       └── templates/
│       │           ├── signup.html
│       │           └── user.html
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── page/
│                           └── controller/
│                               ├── AppTest.java
│                               ├── SignupControllerTest.java
│                               ├── SignupModelTest.java
│                               ├── UserControllerTest.java
│                               └── UserModelTest.java
├── page-object/
│   ├── README.md
│   ├── etc/
│   │   ├── page-object.ucls
│   │   └── page-object.urm.puml
│   ├── pom.xml
│   ├── sample-application/
│   │   ├── etc/
│   │   │   ├── page-object.ucls
│   │   │   └── sample-application.urm.puml
│   │   ├── pom.xml
│   │   └── src/
│   │       └── main/
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── iluwatar/
│   │           │           └── pageobject/
│   │           │               └── App.java
│   │           └── resources/
│   │               └── sample-ui/
│   │                   ├── album-list.html
│   │                   ├── album-page.html
│   │                   ├── css/
│   │                   │   ├── album-list.css
│   │                   │   └── style.css
│   │                   └── login.html
│   ├── src/
│   │   ├── main/
│   │   │   ├── java/
│   │   │   │   └── com/
│   │   │   │       └── iluwatar/
│   │   │   │           └── pageobject/
│   │   │   │               └── App.java
│   │   │   └── resources/
│   │   │       └── sample-ui/
│   │   │           ├── album-list.html
│   │   │           ├── album-page.html
│   │   │           ├── css/
│   │   │           │   ├── album-list.css
│   │   │           │   └── style.css
│   │   │           └── login.html
│   │   └── test/
│   │       └── java/
│   │           └── com/
│   │               └── iluwatar/
│   │                   └── pageobject/
│   │                       ├── AlbumListPageTest.java
│   │                       ├── AlbumPageTest.java
│   │                       ├── LoginPageTest.java
│   │                       └── pages/
│   │                           ├── AlbumListPage.java
│   │                           ├── AlbumPage.java
│   │                           ├── LoginPage.java
│   │                           └── Page.java
│   └── test-automation/
│       ├── etc/
│       │   └── test-automation.urm.puml
│       ├── pom.xml
│       └── src/
│           ├── main/
│           │   └── java/
│           │       └── com/
│           │           └── iluwatar/
│           │               └── pageobject/
│           │                   ├── AlbumListPage.java
│           │                   ├── AlbumPage.java
│           │                   ├── LoginPage.java
│           │                   └── Page.java
│           └── test/
│               └── java/
│                   └── com/
│                       └── iluwatar/
│                           └── pageobject/
│                               ├── AlbumListPageTest.java
│                               ├── AlbumPageTest.java
│                               └── LoginPageTest.java
├── parameter-object/
│   ├── README.md
│   ├── etc/
│   │   └── parameter-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── parameter/
│       │                   └── object/
│       │                       ├── App.java
│       │                       ├── ParameterObject.java
│       │                       ├── SearchService.java
│       │                       └── SortOrder.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── parameter/
│                           └── object/
│                               ├── AppTest.java
│                               ├── ParameterObjectTest.java
│                               └── SearchServiceTest.java
├── partial-response/
│   ├── README.md
│   ├── etc/
│   │   ├── partial-response.ucls
│   │   └── partial-response.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── partialresponse/
│       │                   ├── App.java
│       │                   ├── FieldJsonMapper.java
│       │                   ├── Video.java
│       │                   └── VideoResource.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── partialresponse/
│                           ├── AppTest.java
│                           ├── FieldJsonMapperTest.java
│                           └── VideoResourceTest.java
├── pipeline/
│   ├── README.md
│   ├── etc/
│   │   └── pipeline.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── pipeline/
│       │                   ├── App.java
│       │                   ├── ConvertToCharArrayHandler.java
│       │                   ├── Handler.java
│       │                   ├── Pipeline.java
│       │                   ├── RemoveAlphabetsHandler.java
│       │                   └── RemoveDigitsHandler.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── pipeline/
│                           ├── AppTest.java
│                           └── PipelineTest.java
├── poison-pill/
│   ├── README.md
│   ├── etc/
│   │   ├── poison-pill.ucls
│   │   └── poison-pill.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── poison/
│       │                   └── pill/
│       │                       ├── App.java
│       │                       ├── Consumer.java
│       │                       ├── Message.java
│       │                       ├── MessageQueue.java
│       │                       ├── MqPublishPoint.java
│       │                       ├── MqSubscribePoint.java
│       │                       ├── Producer.java
│       │                       ├── SimpleMessage.java
│       │                       └── SimpleMessageQueue.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── poison/
│                           └── pill/
│                               ├── AppTest.java
│                               ├── ConsumerTest.java
│                               ├── PoisonMessageTest.java
│                               ├── ProducerTest.java
│                               └── SimpleMessageTest.java
├── pom.xml
├── presentation-model/
│   ├── README.md
│   ├── etc/
│   │   ├── presentation-model.urm.puml
│   │   └── presentation.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── presentationmodel/
│       │                   ├── Album.java
│       │                   ├── App.java
│       │                   ├── DisplayedAlbums.java
│       │                   ├── PresentationModel.java
│       │                   └── View.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── presentationmodel/
│                           ├── AlbumTest.java
│                           ├── AppTest.java
│                           ├── DisplayedAlbumsTest.java
│                           ├── PresentationTest.java
│                           └── ViewTest.java
├── private-class-data/
│   ├── README.md
│   ├── etc/
│   │   ├── private-class-data.ucls
│   │   └── private-class-data.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── privateclassdata/
│       │                   ├── App.java
│       │                   ├── ImmutableStew.java
│       │                   ├── Stew.java
│       │                   └── StewData.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── privateclassdata/
│                           ├── AppTest.java
│                           ├── ImmutableStewTest.java
│                           ├── StewTest.java
│                           └── utils/
│                               └── InMemoryAppender.java
├── producer-consumer/
│   ├── README.md
│   ├── etc/
│   │   ├── producer-consumer.ucls
│   │   └── producer-consumer.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── producer/
│       │                   └── consumer/
│       │                       ├── App.java
│       │                       ├── Consumer.java
│       │                       ├── Item.java
│       │                       ├── ItemQueue.java
│       │                       └── Producer.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── producer/
│                           └── consumer/
│                               ├── AppTest.java
│                               ├── ConsumerTest.java
│                               └── ProducerTest.java
├── promise/
│   ├── README.md
│   ├── etc/
│   │   ├── promise.ucls
│   │   └── promise.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── promise/
│       │                   ├── App.java
│       │                   ├── Promise.java
│       │                   ├── PromiseSupport.java
│       │                   └── Utility.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── promise/
│                           ├── AppTest.java
│                           └── PromiseTest.java
├── property/
│   ├── README.md
│   ├── etc/
│   │   ├── property.ucls
│   │   └── property.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── property/
│       │                   ├── App.java
│       │                   ├── Character.java
│       │                   ├── Prototype.java
│       │                   └── Stats.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── property/
│                           ├── AppTest.java
│                           └── CharacterTest.java
├── prototype/
│   ├── README.md
│   ├── etc/
│   │   └── prototype.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── prototype/
│       │                   ├── App.java
│       │                   ├── Beast.java
│       │                   ├── ElfBeast.java
│       │                   ├── ElfMage.java
│       │                   ├── ElfWarlord.java
│       │                   ├── HeroFactory.java
│       │                   ├── HeroFactoryImpl.java
│       │                   ├── Mage.java
│       │                   ├── OrcBeast.java
│       │                   ├── OrcMage.java
│       │                   ├── OrcWarlord.java
│       │                   ├── Prototype.java
│       │                   └── Warlord.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── prototype/
│                           ├── AppTest.java
│                           └── PrototypeTest.java
├── proxy/
│   ├── README.md
│   ├── etc/
│   │   └── proxy.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── proxy/
│       │                   ├── App.java
│       │                   ├── IvoryTower.java
│       │                   ├── Wizard.java
│       │                   ├── WizardTower.java
│       │                   └── WizardTowerProxy.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── proxy/
│                           ├── AppTest.java
│                           ├── IvoryTowerTest.java
│                           ├── WizardTest.java
│                           ├── WizardTowerProxyTest.java
│                           └── utils/
│                               └── InMemoryAppender.java
├── publish-subscribe/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── publish/
│       │                   └── subscribe/
│       │                       ├── App.java
│       │                       ├── model/
│       │                       │   ├── Message.java
│       │                       │   └── Topic.java
│       │                       ├── publisher/
│       │                       │   ├── Publisher.java
│       │                       │   └── PublisherImpl.java
│       │                       └── subscriber/
│       │                           ├── CustomerSupportSubscriber.java
│       │                           ├── DelayedWeatherSubscriber.java
│       │                           ├── Subscriber.java
│       │                           └── WeatherSubscriber.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── publish/
│                           └── subscribe/
│                               ├── AppTest.java
│                               ├── LoggerExtension.java
│                               ├── model/
│                               │   ├── MessageTest.java
│                               │   └── TopicTest.java
│                               ├── publisher/
│                               │   └── PublisherTest.java
│                               └── subscriber/
│                                   └── SubscriberTest.java
├── queue-based-load-leveling/
│   ├── README.md
│   ├── etc/
│   │   ├── queue-based-load-leveling.urm.puml
│   │   ├── queue-load-leveling.ucls
│   │   └── queue-load-leveling.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── queue/
│       │                   └── load/
│       │                       └── leveling/
│       │                           ├── App.java
│       │                           ├── Message.java
│       │                           ├── MessageQueue.java
│       │                           ├── ServiceExecutor.java
│       │                           ├── Task.java
│       │                           └── TaskGenerator.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── queue/
│                           └── load/
│                               └── leveling/
│                                   ├── AppTest.java
│                                   ├── MessageQueueTest.java
│                                   ├── MessageTest.java
│                                   └── TaskGenSrvExeTest.java
├── rate-limiting-pattern/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── rate/
│       │                   └── limiting/
│       │                       └── pattern/
│       │                           ├── AdaptiveRateLimiter.java
│       │                           ├── App.java
│       │                           ├── FindCustomerRequest.java
│       │                           ├── FixedWindowRateLimiter.java
│       │                           ├── RateLimitException.java
│       │                           ├── RateLimitOperation.java
│       │                           ├── RateLimiter.java
│       │                           ├── ServiceUnavailableException.java
│       │                           ├── ThrottlingException.java
│       │                           └── TokenBucketRateLimiter.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── rate/
│                           └── limiting/
│                               └── pattern/
│                                   ├── AdaptiveRateLimiterTest.java
│                                   ├── AppTest.java
│                                   ├── AppTestUtils.java
│                                   ├── ConcurrencyTests.java
│                                   ├── ExceptionTests.java
│                                   ├── FindCustomerRequestTest.java
│                                   ├── FixedWindowRateLimiterTest.java
│                                   ├── RateLimitOperationTest.java
│                                   ├── RateLimiterTest.java
│                                   └── TokenBucketRateLimiterTest.java
├── reactor/
│   ├── README.md
│   ├── etc/
│   │   ├── reactor.ucls
│   │   └── reactor.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── reactor/
│       │                   ├── app/
│       │                   │   ├── App.java
│       │                   │   ├── AppClient.java
│       │                   │   └── LoggingHandler.java
│       │                   └── framework/
│       │                       ├── AbstractNioChannel.java
│       │                       ├── ChannelHandler.java
│       │                       ├── Dispatcher.java
│       │                       ├── NioDatagramChannel.java
│       │                       ├── NioReactor.java
│       │                       ├── NioServerSocketChannel.java
│       │                       ├── SameThreadDispatcher.java
│       │                       └── ThreadPoolDispatcher.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── reactor/
│                           └── app/
│                               └── ReactorTest.java
├── registry/
│   ├── README.md
│   ├── etc/
│   │   └── registry.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── registry/
│       │                   ├── App.java
│       │                   ├── Customer.java
│       │                   └── CustomerRegistry.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── registry/
│                           └── CustomerRegistryTest.java
├── repository/
│   ├── README.md
│   ├── etc/
│   │   ├── repository.ucls
│   │   └── repository.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── repository/
│       │   │               ├── App.java
│       │   │               ├── AppConfig.java
│       │   │               ├── Person.java
│       │   │               ├── PersonRepository.java
│       │   │               └── PersonSpecifications.java
│       │   └── resources/
│       │       ├── META-INF/
│       │       │   └── persistence.xml
│       │       ├── applicationContext.xml
│       │       └── logback.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── repository/
│                           ├── AnnotationBasedRepositoryTest.java
│                           ├── AppConfigTest.java
│                           ├── AppTest.java
│                           └── RepositoryTest.java
├── resource-acquisition-is-initialization/
│   ├── README.md
│   ├── etc/
│   │   ├── resource-acquisition-is-initialization.ucls
│   │   └── resource-acquisition-is-initialization.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── resource/
│       │                   └── acquisition/
│       │                       └── is/
│       │                           └── initialization/
│       │                               ├── App.java
│       │                               ├── SlidingDoor.java
│       │                               └── TreasureChest.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── resource/
│                           └── acquisition/
│                               └── is/
│                                   └── initialization/
│                                       ├── AppTest.java
│                                       └── ClosableTest.java
├── retry/
│   ├── README.md
│   ├── etc/
│   │   └── retry.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── retry/
│       │                   ├── App.java
│       │                   ├── BusinessException.java
│       │                   ├── BusinessOperation.java
│       │                   ├── CustomerNotFoundException.java
│       │                   ├── DatabaseNotAvailableException.java
│       │                   ├── FindCustomer.java
│       │                   ├── Retry.java
│       │                   └── RetryExponentialBackoff.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── retry/
│                           ├── FindCustomerTest.java
│                           ├── RetryExponentialBackoffTest.java
│                           └── RetryTest.java
├── role-object/
│   ├── README.md
│   ├── etc/
│   │   └── role-object.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── roleobject/
│       │                   ├── ApplicationRoleObject.java
│       │                   ├── BorrowerRole.java
│       │                   ├── Customer.java
│       │                   ├── CustomerCore.java
│       │                   ├── CustomerRole.java
│       │                   ├── InvestorRole.java
│       │                   └── Role.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── roleobject/
│                           ├── ApplicationRoleObjectTest.java
│                           ├── BorrowerRoleTest.java
│                           ├── CustomerCoreTest.java
│                           ├── InvestorRoleTest.java
│                           └── RoleTest.java
├── saga/
│   ├── README.md
│   ├── etc/
│   │   └── saga.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── saga/
│       │                   ├── choreography/
│       │                   │   ├── ChoreographyChapter.java
│       │                   │   ├── FlyBookingService.java
│       │                   │   ├── HotelBookingService.java
│       │                   │   ├── OrderService.java
│       │                   │   ├── Saga.java
│       │                   │   ├── SagaApplication.java
│       │                   │   ├── Service.java
│       │                   │   ├── ServiceDiscoveryService.java
│       │                   │   └── WithdrawMoneyService.java
│       │                   └── orchestration/
│       │                       ├── ChapterResult.java
│       │                       ├── FlyBookingService.java
│       │                       ├── HotelBookingService.java
│       │                       ├── OrchestrationChapter.java
│       │                       ├── OrderService.java
│       │                       ├── Saga.java
│       │                       ├── SagaApplication.java
│       │                       ├── SagaOrchestrator.java
│       │                       ├── Service.java
│       │                       ├── ServiceDiscoveryService.java
│       │                       └── WithdrawMoneyService.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── saga/
│                           ├── choreography/
│                           │   ├── SagaApplicationTest.java
│                           │   └── SagaChoreographyTest.java
│                           └── orchestration/
│                               ├── SagaApplicationTest.java
│                               ├── SagaOrchestratorInternallyTest.java
│                               └── SagaOrchestratorTest.java
├── separated-interface/
│   ├── README.md
│   ├── etc/
│   │   └── separated-interface.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── separatedinterface/
│       │                   ├── App.java
│       │                   ├── invoice/
│       │                   │   ├── InvoiceGenerator.java
│       │                   │   └── TaxCalculator.java
│       │                   └── taxes/
│       │                       ├── DomesticTaxCalculator.java
│       │                       └── ForeignTaxCalculator.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── separatedinterface/
│                           ├── AppTest.java
│                           ├── invoice/
│                           │   └── InvoiceGeneratorTest.java
│                           └── taxes/
│                               ├── DomesticTaxCalculatorTest.java
│                               └── ForeignTaxCalculatorTest.java
├── serialized-entity/
│   ├── README.md
│   ├── etc/
│   │   ├── serialize-entity.urm.puml
│   │   └── serialized-entity.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── serializedentity/
│       │                   ├── App.java
│       │                   ├── Country.java
│       │                   ├── CountryDao.java
│       │                   └── CountrySchemaSql.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── serializedentity/
│                           ├── AppTest.java
│                           └── CountryTest.java
├── serialized-lob/
│   ├── README.md
│   ├── etc/
│   │   ├── serialized-lob.urm.puml
│   │   ├── slob.urm.puml
│   │   └── slob.urm.uml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── slob/
│       │                   ├── App.java
│       │                   ├── dbservice/
│       │                   │   └── DatabaseService.java
│       │                   ├── lob/
│       │                   │   ├── Animal.java
│       │                   │   ├── Forest.java
│       │                   │   └── Plant.java
│       │                   └── serializers/
│       │                       ├── BlobSerializer.java
│       │                       ├── ClobSerializer.java
│       │                       └── LobSerializer.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── slob/
│                           └── AppTest.java
├── servant/
│   ├── README.md
│   ├── etc/
│   │   ├── servant-pattern.ucls
│   │   └── servant.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── etc/
│       │   └── servant.xml
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── servant/
│       │                   ├── App.java
│       │                   ├── King.java
│       │                   ├── Queen.java
│       │                   ├── Royalty.java
│       │                   └── Servant.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── servant/
│                           ├── AppTest.java
│                           ├── KingTest.java
│                           ├── QueenTest.java
│                           └── ServantTest.java
├── server-session/
│   ├── README.md
│   ├── etc/
│   │   └── server-session.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── sessionserver/
│       │                   ├── App.java
│       │                   ├── LoginHandler.java
│       │                   └── LogoutHandler.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── sessionserver/
│                           ├── LoginHandlerTest.java
│                           └── LogoutHandlerTest.java
├── service-layer/
│   ├── README.md
│   ├── etc/
│   │   ├── service-layer.ucls
│   │   └── service-layer.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   ├── java/
│       │   │   └── com/
│       │   │       └── iluwatar/
│       │   │           └── servicelayer/
│       │   │               ├── app/
│       │   │               │   └── App.java
│       │   │               ├── common/
│       │   │               │   ├── BaseEntity.java
│       │   │               │   ├── Dao.java
│       │   │               │   └── DaoBaseImpl.java
│       │   │               ├── hibernate/
│       │   │               │   └── HibernateUtil.java
│       │   │               ├── magic/
│       │   │               │   ├── MagicService.java
│       │   │               │   └── MagicServiceImpl.java
│       │   │               ├── spell/
│       │   │               │   ├── Spell.java
│       │   │               │   ├── SpellDao.java
│       │   │               │   └── SpellDaoImpl.java
│       │   │               ├── spellbook/
│       │   │               │   ├── Spellbook.java
│       │   │               │   ├── SpellbookDao.java
│       │   │               │   └── SpellbookDaoImpl.java
│       │   │               └── wizard/
│       │   │                   ├── Wizard.java
│       │   │                   ├── WizardDao.java
│       │   │                   └── WizardDaoImpl.java
│       │   └── resources/
│       │       └── logback.xml
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── servicelayer/
│                           ├── app/
│                           │   └── AppTest.java
│                           ├── common/
│                           │   └── BaseDaoTest.java
│                           ├── magic/
│                           │   └── MagicServiceImplTest.java
│                           ├── spell/
│                           │   └── SpellDaoImplTest.java
│                           ├── spellbook/
│                           │   └── SpellbookDaoImplTest.java
│                           └── wizard/
│                               └── WizardDaoImplTest.java
├── service-locator/
│   ├── README.md
│   ├── etc/
│   │   ├── service-locator.ucls
│   │   └── service-locator.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── servicelocator/
│       │                   ├── App.java
│       │                   ├── InitContext.java
│       │                   ├── Service.java
│       │                   ├── ServiceCache.java
│       │                   ├── ServiceImpl.java
│       │                   └── ServiceLocator.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── servicelocator/
│                           ├── AppTest.java
│                           └── ServiceLocatorTest.java
├── service-stub/
│   ├── README.md
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── servicestub/
│       │                   ├── App.java
│       │                   ├── RealSentimentAnalysisServer.java
│       │                   ├── SentimentAnalysisServer.java
│       │                   └── StubSentimentAnalysisServer.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── servicestub/
│                           ├── AppTest.java
│                           ├── RealSentimentAnalysisServerTest.java
│                           └── StubSentimentAnalysisServerTest.java
├── service-to-worker/
│   ├── README.md
│   ├── etc/
│   │   ├── service-to-worker.puml
│   │   └── service-to-worker.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── servicetoworker/
│       │                   ├── Action.java
│       │                   ├── App.java
│       │                   ├── Command.java
│       │                   ├── Dispatcher.java
│       │                   ├── GiantController.java
│       │                   ├── GiantModel.java
│       │                   └── GiantView.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── servicetoworker/
│                           ├── ActionTest.java
│                           ├── AppTest.java
│                           ├── DispatcherTest.java
│                           ├── GiantControllerTest.java
│                           ├── GiantModelTest.java
│                           └── GiantViewTest.java
├── session-facade/
│   ├── README.md
│   ├── etc/
│   │   └── session-facade.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── sessionfacade/
│       │                   ├── App.java
│       │                   ├── CartService.java
│       │                   ├── OrderService.java
│       │                   ├── PaymentService.java
│       │                   ├── Product.java
│       │                   ├── ProductCatalogService.java
│       │                   └── ShoppingFacade.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── sessionfacade/
│                           ├── AppTest.java
│                           ├── CartServiceTest.java
│                           ├── PaymentServiceTest.java
│                           ├── ProductTest.java
│                           └── ShoppingFacadeTest.java
├── sharding/
│   ├── README.md
│   ├── etc/
│   │   └── sharding.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── sharding/
│       │                   ├── App.java
│       │                   ├── Data.java
│       │                   ├── HashShardManager.java
│       │                   ├── LookupShardManager.java
│       │                   ├── RangeShardManager.java
│       │                   ├── Shard.java
│       │                   └── ShardManager.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── sharding/
│                           ├── AppTest.java
│                           ├── HashShardManagerTest.java
│                           ├── LookupShardManagerTest.java
│                           ├── RangeShardManagerTest.java
│                           ├── ShardManagerTest.java
│                           └── ShardTest.java
├── single-table-inheritance/
│   ├── README.md
│   ├── etc/
│   │   └── single-table-inheritance.urm.puml
│   ├── pom.xml
│   └── src/
│       └── main/
│           ├── java/
│           │   └── com/
│           │       └── iluwatar/
│           │           ├── SingleTableInheritance.java
│           │           ├── entity/
│           │           │   ├── Car.java
│           │           │   ├── Freighter.java
│           │           │   ├── PassengerVehicle.java
│           │           │   ├── Train.java
│           │           │   ├── TransportVehicle.java
│           │           │   ├── Truck.java
│           │           │   └── Vehicle.java
│           │           ├── repository/
│           │           │   └── VehicleRepository.java
│           │           └── service/
│           │               └── VehicleService.java
│           └── resources/
│               └── application.properties
├── singleton/
│   ├── README.md
│   ├── etc/
│   │   └── singleton.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── singleton/
│       │                   ├── App.java
│       │                   ├── BillPughImplementation.java
│       │                   ├── EnumIvoryTower.java
│       │                   ├── InitializingOnDemandHolderIdiom.java
│       │                   ├── IvoryTower.java
│       │                   ├── ThreadSafeDoubleCheckLocking.java
│       │                   ├── ThreadSafeLazyLoadedIvoryTower.java
│       │                   └── package-info.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── singleton/
│                           ├── AppTest.java
│                           ├── BillPughImplementationTest.java
│                           ├── EnumIvoryTowerTest.java
│                           ├── InitializingOnDemandHolderIdiomTest.java
│                           ├── IvoryTowerTest.java
│                           ├── SingletonTest.java
│                           ├── ThreadSafeDoubleCheckLockingTest.java
│                           └── ThreadSafeLazyLoadedIvoryTowerTest.java
├── spatial-partition/
│   ├── README.md
│   ├── etc/
│   │   └── spatial-partition.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── spatialpartition/
│       │                   ├── App.java
│       │                   ├── Bubble.java
│       │                   ├── Point.java
│       │                   ├── QuadTree.java
│       │                   ├── Rect.java
│       │                   ├── SpatialPartitionBubbles.java
│       │                   └── SpatialPartitionGeneric.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── spatialpartition/
│                           ├── BubbleTest.java
│                           ├── QuadTreeTest.java
│                           ├── RectTest.java
│                           └── SpatialPartitionBubblesTest.java
├── special-case/
│   ├── README.md
│   ├── etc/
│   │   └── special-case.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── specialcase/
│       │                   ├── App.java
│       │                   ├── ApplicationServices.java
│       │                   ├── ApplicationServicesImpl.java
│       │                   ├── Db.java
│       │                   ├── DomainServices.java
│       │                   ├── DomainServicesImpl.java
│       │                   ├── DownForMaintenance.java
│       │                   ├── InsufficientFunds.java
│       │                   ├── InvalidUser.java
│       │                   ├── MaintenanceLock.java
│       │                   ├── MoneyTransaction.java
│       │                   ├── OutOfStock.java
│       │                   ├── ReceiptDto.java
│       │                   └── ReceiptViewModel.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── specialcase/
│                           ├── AppTest.java
│                           └── SpecialCasesTest.java
├── specification/
│   ├── README.md
│   ├── etc/
│   │   ├── specification.ucls
│   │   └── specification.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── specification/
│       │                   ├── app/
│       │                   │   └── App.java
│       │                   ├── creature/
│       │                   │   ├── AbstractCreature.java
│       │                   │   ├── Creature.java
│       │                   │   ├── Dragon.java
│       │                   │   ├── Goblin.java
│       │                   │   ├── KillerBee.java
│       │                   │   ├── Octopus.java
│       │                   │   ├── Shark.java
│       │                   │   └── Troll.java
│       │                   ├── property/
│       │                   │   ├── Color.java
│       │                   │   ├── Mass.java
│       │                   │   ├── Movement.java
│       │                   │   └── Size.java
│       │                   └── selector/
│       │                       ├── AbstractSelector.java
│       │                       ├── ColorSelector.java
│       │                       ├── ConjunctionSelector.java
│       │                       ├── DisjunctionSelector.java
│       │                       ├── MassEqualSelector.java
│       │                       ├── MassGreaterThanSelector.java
│       │                       ├── MassSmallerThanOrEqSelector.java
│       │                       ├── MovementSelector.java
│       │                       ├── NegationSelector.java
│       │                       └── SizeSelector.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── specification/
│                           ├── app/
│                           │   └── AppTest.java
│                           ├── creature/
│                           │   └── CreatureTest.java
│                           └── selector/
│                               ├── ColorSelectorTest.java
│                               ├── CompositeSelectorsTest.java
│                               ├── MassSelectorTest.java
│                               ├── MovementSelectorTest.java
│                               └── SizeSelectorTest.java
├── state/
│   ├── README.md
│   ├── etc/
│   │   └── state.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── state/
│       │                   ├── AngryState.java
│       │                   ├── App.java
│       │                   ├── Mammoth.java
│       │                   ├── PeacefulState.java
│       │                   └── State.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── state/
│                           ├── AppTest.java
│                           └── MammothTest.java
├── step-builder/
│   ├── README.md
│   ├── etc/
│   │   ├── step-builder.ucls
│   │   └── step-builder.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── stepbuilder/
│       │                   ├── App.java
│       │                   ├── Character.java
│       │                   └── CharacterStepBuilder.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── stepbuilder/
│                           ├── AppTest.java
│                           └── CharacterStepBuilderTest.java
├── strangler/
│   ├── README.md
│   ├── etc/
│   │   ├── strangler.puml
│   │   └── strangler.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── strangler/
│       │                   ├── App.java
│       │                   ├── HalfArithmetic.java
│       │                   ├── HalfSource.java
│       │                   ├── NewArithmetic.java
│       │                   ├── NewSource.java
│       │                   ├── OldArithmetic.java
│       │                   └── OldSource.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── strangler/
│                           ├── AppTest.java
│                           ├── HalfArithmeticTest.java
│                           ├── HalfSourceTest.java
│                           ├── NewArithmeticTest.java
│                           ├── NewSourceTest.java
│                           ├── OldArithmeticTest.java
│                           └── OldSourceTest.java
├── strategy/
│   ├── README.md
│   ├── etc/
│   │   └── strategy.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── strategy/
│       │                   ├── App.java
│       │                   ├── DragonSlayer.java
│       │                   ├── DragonSlayingStrategy.java
│       │                   ├── LambdaStrategy.java
│       │                   ├── MeleeStrategy.java
│       │                   ├── ProjectileStrategy.java
│       │                   └── SpellStrategy.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── strategy/
│                           ├── AppTest.java
│                           ├── DragonSlayerTest.java
│                           └── DragonSlayingStrategyTest.java
├── subclass-sandbox/
│   ├── README.md
│   ├── etc/
│   │   └── subclass-sandbox.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── subclasssandbox/
│       │                   ├── App.java
│       │                   ├── GroundDive.java
│       │                   ├── SkyLaunch.java
│       │                   └── Superpower.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── subclasssandbox/
│                           ├── AppTest.java
│                           ├── GroundDiveTest.java
│                           └── SkyLaunchTest.java
├── table-inheritance/
│   ├── README.md
│   ├── etc/
│   │   └── table-inheritance.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── table/
│       │                   └── inheritance/
│       │                       ├── App.java
│       │                       ├── Car.java
│       │                       ├── Truck.java
│       │                       ├── Vehicle.java
│       │                       └── VehicleDatabase.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── table/
│                           └── inheritance/
│                               ├── AppTest.java
│                               └── VehicleDatabaseTest.java
├── table-module/
│   ├── README.md
│   ├── etc/
│   │   └── table-module.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── tablemodule/
│       │                   ├── App.java
│       │                   ├── User.java
│       │                   └── UserTableModule.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── tablemodule/
│                           ├── AppTest.java
│                           ├── UserTableModuleTest.java
│                           └── UserTest.java
├── template-method/
│   ├── README.md
│   ├── etc/
│   │   └── template-method.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── templatemethod/
│       │                   ├── App.java
│       │                   ├── HalflingThief.java
│       │                   ├── HitAndRunMethod.java
│       │                   ├── StealingMethod.java
│       │                   └── SubtleMethod.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── templatemethod/
│                           ├── AppTest.java
│                           ├── HalflingThiefTest.java
│                           ├── HitAndRunMethodTest.java
│                           ├── StealingMethodTest.java
│                           └── SubtleMethodTest.java
├── templateview/
│   ├── README.md
│   ├── etc/
│   │   ├── template-view.urm.puml
│   │   └── templateview.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── templateview/
│       │                   ├── App.java
│       │                   ├── ContactPageView.java
│       │                   ├── HomePageView.java
│       │                   └── TemplateView.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── templateview/
│                           ├── AppTest.java
│                           ├── ContactPageViewTest.java
│                           ├── HomePageViewTest.java
│                           └── TemplateViewTest.java
├── thread-pool-executor/
│   ├── README.md
│   ├── etc/
│   │   └── thread-pool-executor.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── threadpoolexecutor/
│       │                   ├── App.java
│       │                   ├── FrontDeskService.java
│       │                   ├── GuestCheckInTask.java
│       │                   └── VipGuestCheckInTask.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── threadpoolexecutor/
│                           ├── AppTest.java
│                           ├── FrontDeskServiceTest.java
│                           ├── GuestCheckInTaskTest.java
│                           └── VipGuestCheckInTaskTest.java
├── throttling/
│   ├── README.md
│   ├── etc/
│   │   └── throttling.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── throttling/
│       │                   ├── App.java
│       │                   ├── BarCustomer.java
│       │                   ├── Bartender.java
│       │                   ├── CallsCount.java
│       │                   └── timer/
│       │                       ├── ThrottleTimerImpl.java
│       │                       └── Throttler.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── throttling/
│                           ├── AppTest.java
│                           ├── BarCustomerTest.java
│                           └── BartenderTest.java
├── tolerant-reader/
│   ├── README.md
│   ├── etc/
│   │   └── tolerant-reader.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── tolerantreader/
│       │                   ├── App.java
│       │                   ├── RainbowFish.java
│       │                   ├── RainbowFishSerializer.java
│       │                   └── RainbowFishV2.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── tolerantreader/
│                           ├── AppTest.java
│                           ├── RainbowFishSerializerTest.java
│                           ├── RainbowFishTest.java
│                           └── RainbowFishV2Test.java
├── trampoline/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   └── trampoline.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── trampoline/
│       │                   ├── Trampoline.java
│       │                   └── TrampolineApp.java
│       └── test/
│           └── java/
│               └── com/
│                   └── iluwatar/
│                       └── trampoline/
│                           └── TrampolineAppTest.java
├── transaction-script/
│   ├── .gitignore
│   ├── README.md
│   ├── etc/
│   │   └── transaction-script.urm.puml
│   ├── pom.xml
│   └── src/
│       ├── main/
│       │   └── java/
│       │       └── com/
│       │           └── iluwatar/
│       │               └── transactionscript/
│       │                   ├── App.java
│       │                   ├── Hotel.java
│       │                   ├── HotelDao.java
│       │                   ├── HotelDaoImpl.java
│       │                   ├── Room.java
│       │                   └── RoomSchemaSql.java
│       └── t
Download .txt
Showing preview only (584K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6874 symbols across 1842 files)

FILE: abstract-document/src/main/java/com/iluwatar/abstractdocument/AbstractDocument.java
  class AbstractDocument (line 35) | public abstract class AbstractDocument implements Document {
    method AbstractDocument (line 39) | protected AbstractDocument(Map<String, Object> properties) {
    method put (line 44) | @Override
    method get (line 50) | @Override
    method children (line 55) | @Override
    method toString (line 66) | @Override
    method buildStringRepresentation (line 71) | private String buildStringRepresentation() {

FILE: abstract-document/src/main/java/com/iluwatar/abstractdocument/App.java
  class App (line 41) | @Slf4j
    method main (line 49) | public static void main(String[] args) {

FILE: abstract-document/src/main/java/com/iluwatar/abstractdocument/Document.java
  type Document (line 32) | public interface Document {
    method put (line 41) | Void put(String key, Object value);
    method get (line 49) | Object get(String key);
    method children (line 58) | <T> Stream<T> children(String key, Function<Map<String, Object>, T> co...

FILE: abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/Car.java
  class Car (line 31) | public class Car extends AbstractDocument implements HasModel, HasPrice,...
    method Car (line 33) | public Car(Map<String, Object> properties) {

FILE: abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/HasModel.java
  type HasModel (line 32) | public interface HasModel extends Document {
    method getModel (line 34) | default Optional<String> getModel() {

FILE: abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/HasParts.java
  type HasParts (line 32) | public interface HasParts extends Document {
    method getParts (line 34) | default Stream<Part> getParts() {

FILE: abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/HasPrice.java
  type HasPrice (line 32) | public interface HasPrice extends Document {
    method getPrice (line 34) | default Optional<Number> getPrice() {

FILE: abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/HasType.java
  type HasType (line 32) | public interface HasType extends Document {
    method getType (line 34) | default Optional<String> getType() {

FILE: abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/Part.java
  class Part (line 31) | public class Part extends AbstractDocument implements HasType, HasModel,...
    method Part (line 33) | public Part(Map<String, Object> properties) {

FILE: abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/enums/Property.java
  type Property (line 28) | public enum Property {

FILE: abstract-document/src/test/java/com/iluwatar/abstractdocument/AbstractDocumentTest.java
  class AbstractDocumentTest (line 35) | class AbstractDocumentTest {
    class DocumentImplementation (line 40) | private static class DocumentImplementation extends AbstractDocument {
      method DocumentImplementation (line 42) | DocumentImplementation(Map<String, Object> properties) {
    method shouldPutAndGetValue (line 49) | @Test
    method shouldRetrieveChildren (line 55) | @Test
    method shouldRetrieveEmptyStreamForNonExistingChildren (line 66) | @Test
    method shouldIncludePropsInToString (line 73) | @Test
    method shouldHandleExceptionDuringConstruction (line 81) | @Test
    method shouldPutAndGetNestedDocument (line 95) | @Test
    method shouldUpdateExistingValue (line 111) | @Test

FILE: abstract-document/src/test/java/com/iluwatar/abstractdocument/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteAppWithoutException (line 40) | @Test

FILE: abstract-document/src/test/java/com/iluwatar/abstractdocument/DomainTest.java
  class DomainTest (line 37) | class DomainTest {
    method shouldConstructPart (line 46) | @Test
    method shouldConstructCar (line 59) | @Test

FILE: abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java
  class App (line 44) | @Slf4j
    method main (line 55) | public static void main(String[] args) {
    method run (line 60) | @Override
    method createKingdom (line 80) | public void createKingdom(final Kingdom.FactoryMaker.KingdomType kingd...

FILE: abstract-factory/src/main/java/com/iluwatar/abstractfactory/Army.java
  type Army (line 28) | public interface Army {
    method getDescription (line 30) | String getDescription();

FILE: abstract-factory/src/main/java/com/iluwatar/abstractfactory/Castle.java
  type Castle (line 28) | public interface Castle {
    method getDescription (line 30) | String getDescription();

FILE: abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfArmy.java
  class ElfArmy (line 28) | public class ElfArmy implements Army {
    method getDescription (line 32) | @Override

FILE: abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfCastle.java
  class ElfCastle (line 28) | public class ElfCastle implements Castle {
    method getDescription (line 32) | @Override

FILE: abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKing.java
  class ElfKing (line 28) | public class ElfKing implements King {
    method getDescription (line 32) | @Override

FILE: abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKingdomFactory.java
  class ElfKingdomFactory (line 28) | public class ElfKingdomFactory implements KingdomFactory {
    method createCastle (line 30) | @Override
    method createKing (line 35) | @Override
    method createArmy (line 40) | @Override

FILE: abstract-factory/src/main/java/com/iluwatar/abstractfactory/King.java
  type King (line 28) | public interface King {
    method getDescription (line 30) | String getDescription();

FILE: abstract-factory/src/main/java/com/iluwatar/abstractfactory/Kingdom.java
  class Kingdom (line 31) | @Getter
    class FactoryMaker (line 40) | public static class FactoryMaker {
      type KingdomType (line 43) | public enum KingdomType {
      method makeFactory (line 49) | public static KingdomFactory makeFactory(KingdomType type) {

FILE: abstract-factory/src/main/java/com/iluwatar/abstractfactory/KingdomFactory.java
  type KingdomFactory (line 28) | public interface KingdomFactory {
    method createCastle (line 30) | Castle createCastle();
    method createKing (line 32) | King createKing();
    method createArmy (line 34) | Army createArmy();

FILE: abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcArmy.java
  class OrcArmy (line 28) | public class OrcArmy implements Army {
    method getDescription (line 32) | @Override

FILE: abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcCastle.java
  class OrcCastle (line 28) | public class OrcCastle implements Castle {
    method getDescription (line 32) | @Override

FILE: abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKing.java
  class OrcKing (line 28) | public class OrcKing implements King {
    method getDescription (line 32) | @Override

FILE: abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKingdomFactory.java
  class OrcKingdomFactory (line 28) | public class OrcKingdomFactory implements KingdomFactory {
    method createCastle (line 30) | @Override
    method createKing (line 35) | @Override
    method createArmy (line 40) | @Override

FILE: abstract-factory/src/test/java/com/iluwatar/abstractfactory/AbstractFactoryTest.java
  class AbstractFactoryTest (line 33) | class AbstractFactoryTest {
    method verifyKingCreation (line 37) | @Test
    method verifyCastleCreation (line 52) | @Test
    method verifyArmyCreation (line 67) | @Test
    method verifyElfKingdomCreation (line 82) | @Test
    method verifyOrcKingdomCreation (line 98) | @Test

FILE: abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 34) | @Test

FILE: active-object/src/main/java/com/iluwatar/activeobject/ActiveCreature.java
  class ActiveCreature (line 33) | public abstract class ActiveCreature {
    method ActiveCreature (line 46) | protected ActiveCreature(String name) {
    method eat (line 74) | public void eat() throws InterruptedException {
    method roam (line 87) | public void roam() throws InterruptedException {
    method name (line 96) | public String name() {
    method kill (line 105) | public void kill(int status) {
    method getStatus (line 115) | public int getStatus() {

FILE: active-object/src/main/java/com/iluwatar/activeobject/App.java
  class App (line 40) | public class App implements Runnable {
    method main (line 51) | public static void main(String[] args) {
    method run (line 56) | @Override

FILE: active-object/src/main/java/com/iluwatar/activeobject/Orc.java
  class Orc (line 28) | public class Orc extends ActiveCreature {
    method Orc (line 30) | public Orc(String name) {

FILE: active-object/src/test/java/com/iluwatar/activeobject/ActiveCreatureTest.java
  class ActiveCreatureTest (line 31) | class ActiveCreatureTest {
    method executionTest (line 33) | @Test

FILE: active-object/src/test/java/com/iluwatar/activeobject/AppTest.java
  class AppTest (line 31) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 33) | @Test

FILE: actor-model/src/main/java/com/iluwatar/actormodel/Actor.java
  class Actor (line 32) | public abstract class Actor implements Runnable {
    method send (line 41) | public void send(Message message) {
    method stop (line 45) | public void stop() {
    method run (line 49) | @Override
    method onReceive (line 62) | protected abstract void onReceive(Message message);

FILE: actor-model/src/main/java/com/iluwatar/actormodel/ActorSystem.java
  class ActorSystem (line 32) | public class ActorSystem {
    method startActor (line 37) | public void startActor(Actor actor) {
    method getActorById (line 44) | public Actor getActorById(String actorId) {
    method shutdown (line 48) | public void shutdown() {

FILE: actor-model/src/main/java/com/iluwatar/actormodel/App.java
  class App (line 47) | public class App {
    method main (line 48) | public static void main(String[] args) throws InterruptedException {

FILE: actor-model/src/main/java/com/iluwatar/actormodel/ExampleActor.java
  class ExampleActor (line 32) | @Slf4j
    method ExampleActor (line 37) | public ExampleActor(ActorSystem actorSystem) {
    method onReceive (line 43) | @Override

FILE: actor-model/src/main/java/com/iluwatar/actormodel/ExampleActor2.java
  class ExampleActor2 (line 32) | @Slf4j
    method ExampleActor2 (line 37) | public ExampleActor2(ActorSystem actorSystem) {
    method onReceive (line 41) | @Override

FILE: actor-model/src/main/java/com/iluwatar/actormodel/Message.java
  class Message (line 30) | @AllArgsConstructor

FILE: actor-model/src/test/java/com/iluwatar/actor/ActorModelTest.java
  class ActorModelTest (line 36) | public class ActorModelTest {
    method testMainMethod (line 37) | @Test
    method testMessagePassing (line 42) | @Test

FILE: acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/AllModemVisitor.java
  type AllModemVisitor (line 31) | public interface AllModemVisitor extends ZoomVisitor, HayesVisitor {}

FILE: acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/App.java
  class App (line 38) | public class App {
    method main (line 41) | public static void main(String[] args) {

FILE: acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java
  class ConfigureForDosVisitor (line 32) | @Slf4j
    method visit (line 35) | @Override
    method visit (line 40) | @Override

FILE: acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitor.java
  class ConfigureForUnixVisitor (line 33) | @Slf4j
    method visit (line 36) | @Override

FILE: acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java
  class Hayes (line 30) | @Slf4j
    method accept (line 34) | @Override
    method toString (line 44) | @Override

FILE: acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/HayesVisitor.java
  type HayesVisitor (line 28) | public interface HayesVisitor extends ModemVisitor {
    method visit (line 29) | void visit(Hayes hayes);

FILE: acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Modem.java
  type Modem (line 28) | public interface Modem {
    method accept (line 29) | void accept(ModemVisitor modemVisitor);

FILE: acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java
  type ModemVisitor (line 31) | public interface ModemVisitor {

FILE: acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java
  class Zoom (line 30) | @Slf4j
    method accept (line 34) | @Override
    method toString (line 44) | @Override

FILE: acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ZoomVisitor.java
  type ZoomVisitor (line 28) | public interface ZoomVisitor extends ModemVisitor {
    method visit (line 29) | void visit(Zoom zoom);

FILE: acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 40) | @Test

FILE: acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/HayesTest.java
  class HayesTest (line 33) | class HayesTest {
    method testAcceptForDos (line 35) | @Test
    method testAcceptForUnix (line 44) | @Test

FILE: acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ZoomTest.java
  class ZoomTest (line 34) | class ZoomTest {
    method testAcceptForDos (line 36) | @Test
    method testAcceptForUnix (line 45) | @Test

FILE: adapter/src/main/java/com/iluwatar/adapter/App.java
  class App (line 46) | public final class App {
    method App (line 48) | private App() {}
    method main (line 55) | public static void main(final String[] args) {

FILE: adapter/src/main/java/com/iluwatar/adapter/Captain.java
  class Captain (line 35) | @Setter
    method row (line 42) | void row() {

FILE: adapter/src/main/java/com/iluwatar/adapter/FishingBoat.java
  class FishingBoat (line 33) | @Slf4j
    method sail (line 36) | void sail() {

FILE: adapter/src/main/java/com/iluwatar/adapter/FishingBoatAdapter.java
  class FishingBoatAdapter (line 31) | public class FishingBoatAdapter implements RowingBoat {
    method row (line 35) | public final void row() {

FILE: adapter/src/main/java/com/iluwatar/adapter/RowingBoat.java
  type RowingBoat (line 31) | public interface RowingBoat {
    method row (line 33) | void row();

FILE: adapter/src/test/java/com/iluwatar/adapter/AdapterPatternTest.java
  class AdapterPatternTest (line 36) | class AdapterPatternTest {
    method setup (line 45) | @BeforeEach
    method testAdapter (line 63) | @Test

FILE: adapter/src/test/java/com/iluwatar/adapter/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 35) | @Test

FILE: ambassador/src/main/java/com/iluwatar/ambassador/App.java
  class App (line 42) | public class App {
    method main (line 45) | public static void main(String[] args) {

FILE: ambassador/src/main/java/com/iluwatar/ambassador/Client.java
  class Client (line 30) | @Slf4j
    method useService (line 35) | long useService(int value) {

FILE: ambassador/src/main/java/com/iluwatar/ambassador/RemoteService.java
  class RemoteService (line 33) | @Slf4j
    method getRemoteService (line 39) | static synchronized RemoteService getRemoteService() {
    method RemoteService (line 46) | private RemoteService() {
    method RemoteService (line 51) | RemoteService(RandomProvider randomProvider) {
    method doRemoteFunction (line 63) | @Override

FILE: ambassador/src/main/java/com/iluwatar/ambassador/RemoteServiceInterface.java
  type RemoteServiceInterface (line 28) | interface RemoteServiceInterface {
    method doRemoteFunction (line 30) | long doRemoteFunction(int value);

FILE: ambassador/src/main/java/com/iluwatar/ambassador/RemoteServiceStatus.java
  type RemoteServiceStatus (line 36) | public enum RemoteServiceStatus {
    method RemoteServiceStatus (line 41) | RemoteServiceStatus(long remoteServiceStatusValue) {

FILE: ambassador/src/main/java/com/iluwatar/ambassador/ServiceAmbassador.java
  class ServiceAmbassador (line 37) | @Slf4j
    method ServiceAmbassador (line 43) | ServiceAmbassador() {}
    method doRemoteFunction (line 45) | @Override
    method checkLatency (line 50) | private long checkLatency(int value) {
    method safeCall (line 59) | private long safeCall(int value) {

FILE: ambassador/src/main/java/com/iluwatar/ambassador/util/RandomProvider.java
  type RandomProvider (line 28) | public interface RandomProvider {
    method random (line 29) | double random();

FILE: ambassador/src/test/java/com/iluwatar/ambassador/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 40) | @Test

FILE: ambassador/src/test/java/com/iluwatar/ambassador/ClientTest.java
  class ClientTest (line 32) | class ClientTest {
    method test (line 34) | @Test

FILE: ambassador/src/test/java/com/iluwatar/ambassador/RemoteServiceTest.java
  class RemoteServiceTest (line 33) | class RemoteServiceTest {
    method testFailedCall (line 35) | @Test
    method testSuccessfulCall (line 42) | @Test
    class StaticRandomProvider (line 49) | private static class StaticRandomProvider implements RandomProvider {
      method StaticRandomProvider (line 52) | StaticRandomProvider(double value) {
      method random (line 56) | @Override

FILE: ambassador/src/test/java/com/iluwatar/ambassador/ServiceAmbassadorTest.java
  class ServiceAmbassadorTest (line 32) | class ServiceAmbassadorTest {
    method test (line 34) | @Test

FILE: anti-corruption-layer/src/main/java/com/iluwatar/corruption/App.java
  class App (line 34) | @SpringBootApplication
    method main (line 37) | public static void main(String[] args) {

FILE: anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/AntiCorruptionLayer.java
  class AntiCorruptionLayer (line 43) | @Service
    method findOrderInLegacySystem (line 54) | public Optional<ModernOrder> findOrderInLegacySystem(String id) {

FILE: anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/DataStore.java
  class DataStore (line 35) | public abstract class DataStore<V> {
    method DataStore (line 38) | public DataStore() {
    method get (line 42) | public Optional<V> get(String key) {
    method put (line 46) | public Optional<V> put(String key, V value) {

FILE: anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/ShopException.java
  class ShopException (line 28) | public class ShopException extends Exception {
    method ShopException (line 29) | public ShopException(String message) {
    method throwIncorrectData (line 41) | public static ShopException throwIncorrectData(String lhs, String rhs)...

FILE: anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/legacy/LegacyOrder.java
  class LegacyOrder (line 34) | @Data

FILE: anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/legacy/LegacyShop.java
  class LegacyShop (line 35) | @Service
    method placeOrder (line 44) | public void placeOrder(LegacyOrder legacyOrder) {
    method findOrder (line 49) | public Optional<LegacyOrder> findOrder(String orderId) {

FILE: anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/legacy/LegacyStore.java
  class LegacyStore (line 34) | @Service

FILE: anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/modern/Customer.java
  class Customer (line 31) | @Data

FILE: anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/modern/ModernOrder.java
  class ModernOrder (line 31) | @Data

FILE: anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/modern/ModernShop.java
  class ModernShop (line 37) | @Service
    method placeOrder (line 47) | public void placeOrder(ModernOrder order) throws ShopException {
    method findOrder (line 64) | public Optional<ModernOrder> findOrder(String orderId) {

FILE: anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/modern/ModernStore.java
  class ModernStore (line 31) | @Service

FILE: anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/modern/Shipment.java
  class Shipment (line 34) | @Data

FILE: anti-corruption-layer/src/test/java/com/iluwatar/corruption/system/AntiCorruptionLayerTest.java
  class AntiCorruptionLayerTest (line 42) | @ExtendWith(SpringExtension.class)
    method antiCorruptionLayerTest (line 55) | @Test
    method antiCorruptionLayerWithExTest (line 81) | @Test

FILE: arrange-act-assert/src/main/java/com/iluwatar/arrangeactassert/Cash.java
  class Cash (line 33) | @AllArgsConstructor
    method plus (line 39) | void plus(int addend) {
    method minus (line 44) | boolean minus(int subtrahend) {
    method count (line 54) | int count() {

FILE: arrange-act-assert/src/test/java/com/iluwatar/arrangeactassert/CashAAATest.java
  class CashAAATest (line 58) | class CashAAATest {
    method testPlus (line 60) | @Test
    method testMinus (line 70) | @Test
    method testInsufficientMinus (line 81) | @Test
    method testUpdate (line 92) | @Test

FILE: arrange-act-assert/src/test/java/com/iluwatar/arrangeactassert/CashAntiAAATest.java
  class CashAntiAAATest (line 40) | class CashAntiAAATest {
    method testCash (line 42) | @Test

FILE: async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/App.java
  class App (line 60) | @Slf4j
    method main (line 66) | public static void main(String[] args) throws Exception {
    method lazyval (line 103) | private static <T> Callable<T> lazyval(T value, long delayMillis) {
    method callback (line 117) | private static <T> AsyncCallback<T> callback(String name) {
    method log (line 131) | private static void log(String msg) {

FILE: async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncCallback.java
  type AsyncCallback (line 32) | public interface AsyncCallback<T> {
    method onComplete (line 39) | void onComplete(T value);
    method onError (line 46) | void onError(Exception ex);

FILE: async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncExecutor.java
  type AsyncExecutor (line 31) | public interface AsyncExecutor {
    method startProcess (line 39) | <T> AsyncResult<T> startProcess(Callable<T> task);
    method startProcess (line 49) | <T> AsyncResult<T> startProcess(Callable<T> task, AsyncCallback<T> cal...
    method endProcess (line 60) | <T> T endProcess(AsyncResult<T> asyncResult) throws ExecutionException...

FILE: async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncResult.java
  type AsyncResult (line 34) | public interface AsyncResult<T> {
    method isCompleted (line 41) | boolean isCompleted();
    method getValue (line 50) | T getValue() throws ExecutionException;
    method await (line 57) | void await() throws InterruptedException;

FILE: async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutor.java
  class ThreadAsyncExecutor (line 32) | public class ThreadAsyncExecutor implements AsyncExecutor {
    method startProcess (line 37) | @Override
    method startProcess (line 42) | @Override
    method endProcess (line 58) | @Override
    class CompletableResult (line 75) | private static class CompletableResult<T> implements AsyncResult<T> {
      method CompletableResult (line 88) | CompletableResult(AsyncCallback<T> callback) {
      method hasCallback (line 93) | boolean hasCallback() {
      method setValue (line 103) | void setValue(T value) {
      method setException (line 120) | void setException(Exception exception) {
      method isCompleted (line 131) | @Override
      method getValue (line 136) | @Override
      method await (line 147) | @Override

FILE: async-method-invocation/src/test/java/com/iluwatar/async/method/invocation/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 40) | @Test

FILE: async-method-invocation/src/test/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutorTest.java
  class ThreadAsyncExecutorTest (line 46) | class ThreadAsyncExecutorTest {
    method setUp (line 54) | @BeforeEach
    method testSuccessfulTaskWithoutCallback (line 60) | @Test
    method testSuccessfulTaskWithCallback (line 88) | @Test
    method testLongRunningTaskWithoutCallback (line 120) | @Test
    method testLongRunningTaskWithCallback (line 165) | @Test
    method testEndProcess (line 215) | @Test
    method testNullTask (line 257) | @Test
    method testNullTaskWithCallback (line 287) | @Test
    method testNullTaskWithNullCallback (line 324) | @Test

FILE: backpressure/src/main/java/com/iluwatar/backpressure/App.java
  class App (line 45) | public class App {
    method main (line 54) | public static void main(String[] args) throws InterruptedException {

FILE: backpressure/src/main/java/com/iluwatar/backpressure/Publisher.java
  class Publisher (line 31) | public class Publisher {
    method Publisher (line 33) | private Publisher() {}
    method publish (line 43) | public static Flux<Integer> publish(int start, int count, int delay) {

FILE: backpressure/src/main/java/com/iluwatar/backpressure/Subscriber.java
  class Subscriber (line 33) | @Slf4j
    method hookOnSubscribe (line 36) | @Override
    method hookOnNext (line 41) | @Override
    method hookOnComplete (line 51) | @Override
    method processItem (line 56) | private void processItem() {

FILE: backpressure/src/test/java/com/iluwatar/backpressure/AppTest.java
  class AppTest (line 31) | public class AppTest {
    method shouldExecuteApplicationWithoutException (line 33) | @Test

FILE: backpressure/src/test/java/com/iluwatar/backpressure/LoggerExtension.java
  class LoggerExtension (line 37) | public class LoggerExtension implements BeforeEachCallback, AfterEachCal...
    method afterEach (line 42) | @Override
    method beforeEach (line 49) | @Override
    method getFormattedMessages (line 55) | public List<String> getFormattedMessages() {

FILE: backpressure/src/test/java/com/iluwatar/backpressure/PublisherTest.java
  class PublisherTest (line 34) | public class PublisherTest {
    method testPublish (line 36) | @Test

FILE: backpressure/src/test/java/com/iluwatar/backpressure/SubscriberTest.java
  class SubscriberTest (line 33) | public class SubscriberTest {
    method testSubscribe (line 37) | @Test

FILE: balking/src/main/java/com/iluwatar/balking/App.java
  class App (line 42) | @Slf4j
    method main (line 50) | public static void main(String... args) {

FILE: balking/src/main/java/com/iluwatar/balking/DelayProvider.java
  type DelayProvider (line 30) | public interface DelayProvider {
    method executeAfterDelay (line 31) | void executeAfterDelay(long interval, TimeUnit timeUnit, Runnable task);

FILE: balking/src/main/java/com/iluwatar/balking/WashingMachine.java
  class WashingMachine (line 32) | @Slf4j
    method WashingMachine (line 40) | public WashingMachine() {
    method WashingMachine (line 57) | public WashingMachine(DelayProvider delayProvider) {
    method wash (line 63) | public void wash() {
    method endOfWashing (line 79) | public synchronized void endOfWashing() {

FILE: balking/src/main/java/com/iluwatar/balking/WashingMachineState.java
  type WashingMachineState (line 31) | public enum WashingMachineState {

FILE: balking/src/test/java/com/iluwatar/balking/AppTest.java
  class AppTest (line 33) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 41) | @Test

FILE: balking/src/test/java/com/iluwatar/balking/WashingMachineTest.java
  class WashingMachineTest (line 33) | class WashingMachineTest {
    method wash (line 37) | @Test
    method endOfWashing (line 55) | @Test
    class FakeDelayProvider (line 62) | private static class FakeDelayProvider implements DelayProvider {
      method executeAfterDelay (line 65) | @Override

FILE: bloc/src/main/java/com/iluwatar/bloc/Bloc.java
  class Bloc (line 36) | public class Bloc implements ListenerManager<State> {
    method Bloc (line 42) | public Bloc() {
    method addListener (line 51) | @Override
    method removeListener (line 62) | @Override
    method getListeners (line 72) | @Override
    method emitState (line 82) | private void emitState(State newState) {
    method increment (line 90) | public void increment() {
    method decrement (line 95) | public void decrement() {

FILE: bloc/src/main/java/com/iluwatar/bloc/BlocUi.java
  class BlocUi (line 36) | public class BlocUi {
    method createAndShowUi (line 39) | public void createAndShowUi() {

FILE: bloc/src/main/java/com/iluwatar/bloc/ListenerManager.java
  type ListenerManager (line 34) | public interface ListenerManager<T> {
    method addListener (line 41) | void addListener(StateListener<T> listener);
    method removeListener (line 48) | void removeListener(StateListener<T> listener);
    method getListeners (line 55) | List<StateListener<T>> getListeners();

FILE: bloc/src/main/java/com/iluwatar/bloc/Main.java
  class Main (line 40) | public class Main {
    method main (line 47) | public static void main(String[] args) {

FILE: bloc/src/main/java/com/iluwatar/bloc/StateListener.java
  type StateListener (line 34) | public interface StateListener<T> {
    method onStateChange (line 41) | void onStateChange(T state);

FILE: bloc/src/test/java/com/iluwatar/bloc/BlocTest.java
  class BlocTest (line 33) | class BlocTest {
    method setUp (line 37) | @BeforeEach
    method initialState (line 43) | @Test
    method IncrementUpdateState (line 48) | @Test
    method DecrementUpdateState (line 55) | @Test
    method addingListener (line 62) | @Test
    method removingListener (line 68) | @Test
    method multipleListeners (line 76) | @Test

FILE: bloc/src/test/java/com/iluwatar/bloc/BlocUiTest.java
  class BlocUiTest (line 35) | class BlocUiTest {
    method setUp (line 45) | @BeforeEach
    method tearDown (line 85) | @AfterEach
    method testIncrementButton (line 91) | @Test
    method testDecrementButton (line 97) | @Test
    method testToggleListenerButton (line 103) | @Test
    method simulateButtonClick (line 116) | private void simulateButtonClick(JButton button) {

FILE: bridge/src/main/java/com/iluwatar/bridge/App.java
  class App (line 42) | @Slf4j
    method main (line 50) | public static void main(String[] args) {

FILE: bridge/src/main/java/com/iluwatar/bridge/Enchantment.java
  type Enchantment (line 28) | public interface Enchantment {
    method onActivate (line 30) | void onActivate();
    method apply (line 32) | void apply();
    method onDeactivate (line 34) | void onDeactivate();

FILE: bridge/src/main/java/com/iluwatar/bridge/FlyingEnchantment.java
  class FlyingEnchantment (line 30) | @Slf4j
    method onActivate (line 33) | @Override
    method apply (line 38) | @Override
    method onDeactivate (line 43) | @Override

FILE: bridge/src/main/java/com/iluwatar/bridge/Hammer.java
  class Hammer (line 31) | @Slf4j
    method wield (line 37) | @Override
    method swing (line 43) | @Override
    method unwield (line 49) | @Override
    method getEnchantment (line 55) | @Override

FILE: bridge/src/main/java/com/iluwatar/bridge/SoulEatingEnchantment.java
  class SoulEatingEnchantment (line 30) | @Slf4j
    method onActivate (line 33) | @Override
    method apply (line 38) | @Override
    method onDeactivate (line 43) | @Override

FILE: bridge/src/main/java/com/iluwatar/bridge/Sword.java
  class Sword (line 31) | @Slf4j
    method wield (line 37) | @Override
    method swing (line 43) | @Override
    method unwield (line 49) | @Override
    method getEnchantment (line 55) | @Override

FILE: bridge/src/main/java/com/iluwatar/bridge/Weapon.java
  type Weapon (line 28) | public interface Weapon {
    method wield (line 30) | void wield();
    method swing (line 32) | void swing();
    method unwield (line 34) | void unwield();
    method getEnchantment (line 36) | Enchantment getEnchantment();

FILE: bridge/src/test/java/com/iluwatar/bridge/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 40) | @Test

FILE: bridge/src/test/java/com/iluwatar/bridge/HammerTest.java
  class HammerTest (line 33) | class HammerTest extends WeaponTest {
    method testHammer (line 39) | @Test

FILE: bridge/src/test/java/com/iluwatar/bridge/SwordTest.java
  class SwordTest (line 33) | class SwordTest extends WeaponTest {
    method testSword (line 39) | @Test

FILE: bridge/src/test/java/com/iluwatar/bridge/WeaponTest.java
  class WeaponTest (line 32) | abstract class WeaponTest {
    method testBasicWeaponActions (line 38) | final void testBasicWeaponActions(final Weapon weapon) {

FILE: builder/src/main/java/com/iluwatar/builder/App.java
  class App (line 51) | @Slf4j
    method main (line 59) | public static void main(String[] args) {

FILE: builder/src/main/java/com/iluwatar/builder/Armor.java
  type Armor (line 30) | @AllArgsConstructor
    method toString (line 39) | @Override

FILE: builder/src/main/java/com/iluwatar/builder/HairColor.java
  type HairColor (line 28) | public enum HairColor {
    method toString (line 35) | @Override

FILE: builder/src/main/java/com/iluwatar/builder/HairType.java
  type HairType (line 30) | @AllArgsConstructor
    method toString (line 40) | @Override

FILE: builder/src/main/java/com/iluwatar/builder/Hero.java
  method Hero (line 36) | private Hero(Builder builder) {
  method toString (line 46) | @Override
  class Builder (line 72) | public static class Builder {
    method Builder (line 82) | public Builder(Profession profession, String name) {
    method withHairType (line 90) | public Builder withHairType(HairType hairType) {
    method withHairColor (line 95) | public Builder withHairColor(HairColor hairColor) {
    method withArmor (line 100) | public Builder withArmor(Armor armor) {
    method withWeapon (line 105) | public Builder withWeapon(Weapon weapon) {
    method build (line 110) | public Hero build() {

FILE: builder/src/main/java/com/iluwatar/builder/Profession.java
  type Profession (line 28) | public enum Profession {
    method toString (line 34) | @Override

FILE: builder/src/main/java/com/iluwatar/builder/Weapon.java
  type Weapon (line 28) | public enum Weapon {
    method toString (line 35) | @Override

FILE: builder/src/test/java/com/iluwatar/builder/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 40) | @Test

FILE: builder/src/test/java/com/iluwatar/builder/HeroTest.java
  class HeroTest (line 34) | class HeroTest {
    method testMissingProfession (line 37) | @Test
    method testMissingName (line 43) | @Test
    method testBuildHero (line 49) | @Test

FILE: business-delegate/src/main/java/com/iluwatar/business/delegate/App.java
  class App (line 41) | public class App {
    method main (line 48) | public static void main(String[] args) {

FILE: business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessDelegate.java
  class BusinessDelegate (line 30) | @Setter
    method playbackMovie (line 35) | public void playbackMovie(String movie) {

FILE: business-delegate/src/main/java/com/iluwatar/business/delegate/BusinessLookup.java
  class BusinessLookup (line 31) | @Setter
    method getBusinessService (line 44) | public VideoStreamingService getBusinessService(String movie) {

FILE: business-delegate/src/main/java/com/iluwatar/business/delegate/MobileClient.java
  class MobileClient (line 28) | public class MobileClient {
    method MobileClient (line 32) | public MobileClient(BusinessDelegate businessDelegate) {
    method playbackMovie (line 36) | public void playbackMovie(String movie) {

FILE: business-delegate/src/main/java/com/iluwatar/business/delegate/NetflixService.java
  class NetflixService (line 30) | @Slf4j
    method doProcessing (line 33) | @Override

FILE: business-delegate/src/main/java/com/iluwatar/business/delegate/VideoStreamingService.java
  type VideoStreamingService (line 28) | public interface VideoStreamingService {
    method doProcessing (line 30) | void doProcessing();

FILE: business-delegate/src/main/java/com/iluwatar/business/delegate/YouTubeService.java
  class YouTubeService (line 30) | @Slf4j
    method doProcessing (line 33) | @Override

FILE: business-delegate/src/test/java/com/iluwatar/business/delegate/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 40) | @Test

FILE: business-delegate/src/test/java/com/iluwatar/business/delegate/BusinessDelegateTest.java
  class BusinessDelegateTest (line 36) | class BusinessDelegateTest {
    method setup (line 48) | @BeforeEach
    method testBusinessDelegate (line 66) | @Test

FILE: bytecode/src/main/java/com/iluwatar/bytecode/App.java
  class App (line 43) | @Slf4j
    method main (line 59) | public static void main(String[] args) {

FILE: bytecode/src/main/java/com/iluwatar/bytecode/Instruction.java
  type Instruction (line 31) | @AllArgsConstructor
    method getInstruction (line 54) | public static Instruction getInstruction(int value) {

FILE: bytecode/src/main/java/com/iluwatar/bytecode/VirtualMachine.java
  class VirtualMachine (line 33) | @Getter
    method VirtualMachine (line 42) | public VirtualMachine() {
    method VirtualMachine (line 48) | public VirtualMachine(Wizard wizard1, Wizard wizard2) {
    method execute (line 58) | public void execute(int[] bytecode) {
    method setHealth (line 120) | public void setHealth(int wizard, int amount) {
    method setWisdom (line 124) | public void setWisdom(int wizard, int amount) {
    method setAgility (line 128) | public void setAgility(int wizard, int amount) {
    method getHealth (line 132) | public int getHealth(int wizard) {
    method getWisdom (line 136) | public int getWisdom(int wizard) {
    method getAgility (line 140) | public int getAgility(int wizard) {
    method randomInt (line 144) | private int randomInt(int min, int max) {

FILE: bytecode/src/main/java/com/iluwatar/bytecode/Wizard.java
  class Wizard (line 36) | @AllArgsConstructor
    method playSound (line 48) | public void playSound() {
    method spawnParticles (line 53) | public void spawnParticles() {

FILE: bytecode/src/main/java/com/iluwatar/bytecode/util/InstructionConverterUtil.java
  class InstructionConverterUtil (line 30) | public class InstructionConverterUtil {
    method convertToByteCode (line 37) | public static int[] convertToByteCode(String instructions) {
    method isValidInstruction (line 58) | private static boolean isValidInstruction(String instruction) {
    method isValidInt (line 67) | private static boolean isValidInt(String value) {

FILE: bytecode/src/test/java/com/iluwatar/bytecode/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 40) | @Test

FILE: bytecode/src/test/java/com/iluwatar/bytecode/VirtualMachineTest.java
  class VirtualMachineTest (line 34) | class VirtualMachineTest {
    method testLiteral (line 36) | @Test
    method testSetHealth (line 49) | @Test
    method testSetAgility (line 65) | @Test
    method testSetWisdom (line 81) | @Test
    method testGetHealth (line 97) | @Test
    method testPlaySound (line 116) | @Test
    method testSpawnParticles (line 131) | @Test
    method testInvalidInstruction (line 146) | @Test

FILE: bytecode/src/test/java/com/iluwatar/bytecode/util/InstructionConverterUtilTest.java
  class InstructionConverterUtilTest (line 32) | class InstructionConverterUtilTest {
    method testEmptyInstruction (line 34) | @Test
    method testInstructions (line 43) | @Test

FILE: caching/src/main/java/com/iluwatar/caching/App.java
  class App (line 75) | @Slf4j
    method App (line 88) | public App(final boolean isMongo) {
    method main (line 99) | public static void main(final String[] args) {
    method isDbMongo (line 128) | private static boolean isDbMongo(final String[] args) {
    method useReadAndWriteThroughStrategy (line 138) | public void useReadAndWriteThroughStrategy() {
    method useReadThroughAndWriteAroundStrategy (line 151) | public void useReadThroughAndWriteAroundStrategy() {
    method useReadThroughAndWriteBehindStrategy (line 171) | public void useReadThroughAndWriteBehindStrategy() {
    method useCacheAsideStrategy (line 193) | public void useCacheAsideStrategy() {

FILE: caching/src/main/java/com/iluwatar/caching/AppManager.java
  class AppManager (line 38) | @Slf4j
    method AppManager (line 54) | public AppManager(final DbManager newDbManager) {
    method initDb (line 64) | public void initDb() {
    method initCachingPolicy (line 73) | public void initCachingPolicy(final CachingPolicy policy) {
    method find (line 87) | public UserAccount find(final String userId) {
    method save (line 104) | public void save(final UserAccount userAccount) {
    method printCacheContent (line 122) | public String printCacheContent() {
    method saveAside (line 131) | private void saveAside(final UserAccount userAccount) {
    method findAside (line 142) | private UserAccount findAside(final String userId) {

FILE: caching/src/main/java/com/iluwatar/caching/CacheStore.java
  class CacheStore (line 34) | @Slf4j
    method CacheStore (line 50) | public CacheStore(final DbManager dataBaseManager) {
    method initCapacity (line 60) | public void initCapacity(final int capacity) {
    method readThrough (line 74) | public UserAccount readThrough(final String userId) {
    method writeThrough (line 90) | public void writeThrough(final UserAccount userAccount) {
    method writeAround (line 104) | public void writeAround(final UserAccount userAccount) {
    method readThroughWithWriteBackPolicy (line 121) | public UserAccount readThroughWithWriteBackPolicy(final String userId) {
    method writeBehind (line 142) | public void writeBehind(final UserAccount userAccount) {
    method clearCache (line 152) | public void clearCache() {
    method flushCache (line 159) | public void flushCache() {
    method print (line 173) | public String print() {
    method get (line 188) | public UserAccount get(final String userId) {
    method set (line 198) | public void set(final String userId, final UserAccount userAccount) {
    method invalidate (line 207) | public void invalidate(final String userId) {

FILE: caching/src/main/java/com/iluwatar/caching/CachingPolicy.java
  type CachingPolicy (line 31) | @AllArgsConstructor

FILE: caching/src/main/java/com/iluwatar/caching/LruCache.java
  class LruCache (line 40) | @Slf4j
    class Node (line 43) | static class Node {
      method Node (line 62) | Node(final String id, final UserAccount account) {
    method LruCache (line 85) | public LruCache(final int cap) {
    method get (line 95) | public UserAccount get(final String userId) {
    method remove (line 110) | public void remove(final Node node) {
    method setHead (line 128) | public void setHead(final Node node) {
    method set (line 146) | public void set(final String userId, final UserAccount userAccount) {
    method contains (line 172) | public boolean contains(final String userId) {
    method invalidate (line 181) | public void invalidate(final String userId) {
    method isFull (line 194) | public boolean isFull() {
    method getLruData (line 203) | public UserAccount getLruData() {
    method clear (line 208) | public void clear() {
    method getCacheDataInListForm (line 219) | public List<UserAccount> getCacheDataInListForm() {
    method setCapacity (line 234) | public void setCapacity(final int newCapacity) {

FILE: caching/src/main/java/com/iluwatar/caching/UserAccount.java
  class UserAccount (line 33) | @Data

FILE: caching/src/main/java/com/iluwatar/caching/constants/CachingConstants.java
  class CachingConstants (line 28) | public final class CachingConstants {
    method CachingConstants (line 42) | private CachingConstants() {}

FILE: caching/src/main/java/com/iluwatar/caching/database/DbManager.java
  type DbManager (line 34) | public interface DbManager {
    method connect (line 36) | void connect();
    method disconnect (line 39) | void disconnect();
    method readFromDb (line 47) | UserAccount readFromDb(String userId);
    method writeToDb (line 55) | UserAccount writeToDb(UserAccount userAccount);
    method updateDb (line 63) | UserAccount updateDb(UserAccount userAccount);
    method upsertDb (line 71) | UserAccount upsertDb(UserAccount userAccount);

FILE: caching/src/main/java/com/iluwatar/caching/database/DbManagerFactory.java
  class DbManagerFactory (line 28) | public final class DbManagerFactory {
    method DbManagerFactory (line 30) | private DbManagerFactory() {}
    method initDb (line 38) | public static DbManager initDb(final boolean isMongo) {

FILE: caching/src/main/java/com/iluwatar/caching/database/MongoDb.java
  class MongoDb (line 44) | @Slf4j
    method setDb (line 52) | void setDb(MongoDatabase db) {
    method connect (line 57) | @Override
    method disconnect (line 66) | @Override
    method readFromDb (line 77) | @Override
    method writeToDb (line 100) | @Override
    method updateDb (line 116) | @Override
    method upsertDb (line 132) | @Override

FILE: caching/src/main/java/com/iluwatar/caching/database/VirtualDb.java
  class VirtualDb (line 32) | public class VirtualDb implements DbManager {
    method connect (line 37) | @Override
    method disconnect (line 42) | @Override
    method readFromDb (line 53) | @Override
    method writeToDb (line 67) | @Override
    method updateDb (line 79) | @Override
    method upsertDb (line 90) | @Override

FILE: caching/src/test/java/com/iluwatar/caching/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 39) | @Test

FILE: caching/src/test/java/com/iluwatar/caching/CachingTest.java
  class CachingTest (line 33) | class CachingTest {
    method setUp (line 37) | @BeforeEach
    method testReadAndWriteThroughStrategy (line 46) | @Test
    method testReadThroughAndWriteAroundStrategy (line 52) | @Test
    method testReadThroughAndWriteBehindStrategy (line 58) | @Test
    method testCacheAsideStrategy (line 64) | @Test

FILE: caching/src/test/java/com/iluwatar/caching/database/MongoDbTest.java
  class MongoDbTest (line 44) | class MongoDbTest {
    method init (line 54) | @BeforeEach
    method connect (line 61) | @Test
    method readFromDb (line 66) | @Test
    method writeToDb (line 81) | @Test
    method updateDb (line 91) | @Test
    method upsertDb (line 101) | @Test

FILE: callback/src/main/java/com/iluwatar/callback/App.java
  class App (line 34) | @Slf4j
    method App (line 37) | private App() {}
    method main (line 40) | public static void main(final String[] args) {

FILE: callback/src/main/java/com/iluwatar/callback/Callback.java
  type Callback (line 28) | public interface Callback {
    method call (line 30) | void call();

FILE: callback/src/main/java/com/iluwatar/callback/SimpleTask.java
  class SimpleTask (line 30) | @Slf4j
    method execute (line 33) | @Override

FILE: callback/src/main/java/com/iluwatar/callback/Task.java
  class Task (line 30) | public abstract class Task {
    method executeWith (line 33) | final void executeWith(Callback callback) {
    method execute (line 38) | public abstract void execute();

FILE: callback/src/test/java/com/iluwatar/callback/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 40) | @Test

FILE: callback/src/test/java/com/iluwatar/callback/CallbackTest.java
  class CallbackTest (line 37) | class CallbackTest {
    method test (line 41) | @Test

FILE: chain-of-responsibility/src/main/java/com/iluwatar/chain/App.java
  class App (line 38) | public class App {
    method main (line 45) | public static void main(String[] args) {

FILE: chain-of-responsibility/src/main/java/com/iluwatar/chain/OrcCommander.java
  class OrcCommander (line 30) | @Slf4j
    method canHandleRequest (line 32) | @Override
    method getPriority (line 37) | @Override
    method handle (line 42) | @Override
    method name (line 48) | @Override

FILE: chain-of-responsibility/src/main/java/com/iluwatar/chain/OrcKing.java
  class OrcKing (line 32) | public class OrcKing {
    method OrcKing (line 36) | public OrcKing() {
    method buildChain (line 40) | private void buildChain() {
    method makeRequest (line 45) | public void makeRequest(Request req) {

FILE: chain-of-responsibility/src/main/java/com/iluwatar/chain/OrcOfficer.java
  class OrcOfficer (line 30) | @Slf4j
    method canHandleRequest (line 32) | @Override
    method getPriority (line 37) | @Override
    method handle (line 42) | @Override
    method name (line 48) | @Override

FILE: chain-of-responsibility/src/main/java/com/iluwatar/chain/OrcSoldier.java
  class OrcSoldier (line 30) | @Slf4j
    method canHandleRequest (line 32) | @Override
    method getPriority (line 37) | @Override
    method handle (line 42) | @Override
    method name (line 48) | @Override

FILE: chain-of-responsibility/src/main/java/com/iluwatar/chain/Request.java
  class Request (line 31) | @Getter
    method Request (line 55) | public Request(final RequestType requestType, final String requestDesc...
    method markHandled (line 61) | public void markHandled() {
    method toString (line 65) | @Override

FILE: chain-of-responsibility/src/main/java/com/iluwatar/chain/RequestHandler.java
  type RequestHandler (line 28) | public interface RequestHandler {
    method canHandleRequest (line 30) | boolean canHandleRequest(Request req);
    method getPriority (line 32) | int getPriority();
    method handle (line 34) | void handle(Request req);
    method name (line 36) | String name();

FILE: chain-of-responsibility/src/main/java/com/iluwatar/chain/RequestType.java
  type RequestType (line 28) | public enum RequestType {

FILE: chain-of-responsibility/src/test/java/com/iluwatar/chain/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 40) | @Test

FILE: chain-of-responsibility/src/test/java/com/iluwatar/chain/OrcKingTest.java
  class OrcKingTest (line 33) | class OrcKingTest {
    method testMakeRequest (line 42) | @Test

FILE: circuit-breaker/src/main/java/com/iluwatar/circuitbreaker/App.java
  class App (line 54) | @Slf4j
    method main (line 62) | public static void main(String[] args) {

FILE: circuit-breaker/src/main/java/com/iluwatar/circuitbreaker/CircuitBreaker.java
  type CircuitBreaker (line 28) | public interface CircuitBreaker {
    method recordSuccess (line 31) | void recordSuccess();
    method recordFailure (line 34) | void recordFailure(String response);
    method getState (line 37) | String getState();
    method setState (line 40) | void setState(State state);
    method attemptRequest (line 43) | String attemptRequest() throws RemoteServiceException;

FILE: circuit-breaker/src/main/java/com/iluwatar/circuitbreaker/DefaultCircuitBreaker.java
  class DefaultCircuitBreaker (line 32) | public class DefaultCircuitBreaker implements CircuitBreaker {
    method DefaultCircuitBreaker (line 54) | DefaultCircuitBreaker(
    method recordSuccess (line 70) | @Override
    method recordFailure (line 77) | @Override
    method evaluateState (line 86) | protected void evaluateState() {
    method getState (line 101) | @Override
    method setState (line 113) | @Override
    method attemptRequest (line 134) | @Override

FILE: circuit-breaker/src/main/java/com/iluwatar/circuitbreaker/DelayedRemoteService.java
  class DelayedRemoteService (line 31) | public class DelayedRemoteService implements RemoteService {
    method DelayedRemoteService (line 41) | public DelayedRemoteService(long serverStartTime, int delay) {
    method DelayedRemoteService (line 46) | public DelayedRemoteService() {
    method call (line 56) | @Override

FILE: circuit-breaker/src/main/java/com/iluwatar/circuitbreaker/MonitoringService.java
  class MonitoringService (line 31) | public class MonitoringService {
    method MonitoringService (line 37) | public MonitoringService(CircuitBreaker delayedService, CircuitBreaker...
    method localResourceResponse (line 43) | public String localResourceResponse() {
    method delayedServiceResponse (line 52) | public String delayedServiceResponse() {
    method quickServiceResponse (line 65) | public String quickServiceResponse() {

FILE: circuit-breaker/src/main/java/com/iluwatar/circuitbreaker/QuickRemoteService.java
  class QuickRemoteService (line 28) | public class QuickRemoteService implements RemoteService {
    method call (line 30) | @Override

FILE: circuit-breaker/src/main/java/com/iluwatar/circuitbreaker/RemoteService.java
  type RemoteService (line 31) | public interface RemoteService {
    method call (line 34) | String call() throws RemoteServiceException;

FILE: circuit-breaker/src/main/java/com/iluwatar/circuitbreaker/RemoteServiceException.java
  class RemoteServiceException (line 28) | public class RemoteServiceException extends Exception {
    method RemoteServiceException (line 30) | public RemoteServiceException(String message) {

FILE: circuit-breaker/src/main/java/com/iluwatar/circuitbreaker/State.java
  type State (line 28) | public enum State {

FILE: circuit-breaker/src/test/java/com/iluwatar/circuitbreaker/AppTest.java
  class AppTest (line 35) | class AppTest {
    method setupCircuitBreakers (line 60) | @BeforeEach
    method testFailure_OpenStateTransition (line 78) | @Test
    method testFailure_HalfOpenStateTransition (line 92) | @Test
    method testRecovery_ClosedStateTransition (line 111) | @Test

FILE: circuit-breaker/src/test/java/com/iluwatar/circuitbreaker/DefaultCircuitBreakerTest.java
  class DefaultCircuitBreakerTest (line 32) | class DefaultCircuitBreakerTest {
    method testEvaluateState (line 35) | @Test
    method testSetStateForBypass (line 57) | @Test
    method testApiResponses (line 66) | @Test

FILE: circuit-breaker/src/test/java/com/iluwatar/circuitbreaker/DelayedRemoteServiceTest.java
  class DelayedRemoteServiceTest (line 33) | class DelayedRemoteServiceTest {
    method testDefaultConstructor (line 40) | @Test
    method testParameterizedConstructor (line 55) | @Test

FILE: circuit-breaker/src/test/java/com/iluwatar/circuitbreaker/MonitoringServiceTest.java
  class MonitoringServiceTest (line 32) | class MonitoringServiceTest {
    method testLocalResponse (line 35) | @Test
    method testDelayedRemoteResponseSuccess (line 42) | @Test
    method testDelayedRemoteResponseFailure (line 54) | @Test
    method testQuickRemoteServiceResponse (line 65) | @Test

FILE: clean-architecture/src/main/java/com/iluwatar/cleanarchitecture/App.java
  class App (line 38) | @Slf4j
    method App (line 41) | private App() {
    method main (line 50) | public static void main(final String[] args) {

FILE: clean-architecture/src/main/java/com/iluwatar/cleanarchitecture/Cart.java
  class Cart (line 33) | @Getter
    method Cart (line 50) | public Cart(final Product prod, final int qty) {
    method getTotalPrice (line 61) | public double getTotalPrice() {

FILE: clean-architecture/src/main/java/com/iluwatar/cleanarchitecture/CartController.java
  class CartController (line 33) | public class CartController {
    method CartController (line 43) | public CartController(final ShoppingCartService shoppingCart) {
    method addItemToCart (line 54) | public void addItemToCart(final String userId, final String productId,...
    method removeItemFromCart (line 64) | public void removeItemFromCart(final String userId, final String produ...
    method calculateTotal (line 74) | public double calculateTotal(final String userId) {

FILE: clean-architecture/src/main/java/com/iluwatar/cleanarchitecture/CartRepository.java
  type CartRepository (line 30) | public interface CartRepository {
    method addItemToCart (line 38) | void addItemToCart(String userId, Product product, int quantity);
    method removeItemFromCart (line 46) | void removeItemFromCart(String userId, String productId);
    method getItemsInCart (line 54) | List<Cart> getItemsInCart(String userId);
    method calculateTotal (line 62) | double calculateTotal(String userId);
    method clearCart (line 69) | void clearCart(String userId);

FILE: clean-architecture/src/main/java/com/iluwatar/cleanarchitecture/InMemoryCartRepository.java
  class InMemoryCartRepository (line 37) | public class InMemoryCartRepository implements CartRepository {
    method addItemToCart (line 48) | @Override
    method removeItemFromCart (line 61) | @Override
    method getItemsInCart (line 75) | @Override
    method calculateTotal (line 86) | @Override
    method clearCart (line 98) | @Override

FILE: clean-architecture/src/main/java/com/iluwatar/cleanarchitecture/InMemoryOrderRepository.java
  class InMemoryOrderRepository (line 36) | public class InMemoryOrderRepository implements OrderRepository {
    method saveOrder (line 45) | @Override

FILE: clean-architecture/src/main/java/com/iluwatar/cleanarchitecture/InMemoryProductRepository.java
  class InMemoryProductRepository (line 35) | public class InMemoryProductRepository implements ProductRepository {
    method InMemoryProductRepository (line 56) | public InMemoryProductRepository() {
    method getProductById (line 67) | @Override

FILE: clean-architecture/src/main/java/com/iluwatar/cleanarchitecture/Order.java
  class Order (line 35) | @Getter
    method Order (line 53) | public Order(final String id, final List<Cart> item) {

FILE: clean-architecture/src/main/java/com/iluwatar/cleanarchitecture/OrderController.java
  class OrderController (line 32) | public class OrderController {
    method OrderController (line 41) | public OrderController(final ShoppingCartService shoppingCartUse) {
    method checkout (line 51) | public Order checkout(final String userId) {

FILE: clean-architecture/src/main/java/com/iluwatar/cleanarchitecture/OrderRepository.java
  type OrderRepository (line 32) | public interface OrderRepository {
    method saveOrder (line 38) | void saveOrder(Order order);

FILE: clean-architecture/src/main/java/com/iluwatar/cleanarchitecture/Product.java
  class Product (line 30) | @Getter
    method Product (line 48) | public Product(final String pdtId, final String firstName, final doubl...

FILE: clean-architecture/src/main/java/com/iluwatar/cleanarchitecture/ProductRepository.java
  type ProductRepository (line 28) | public interface ProductRepository {
    method getProductById (line 35) | Product getProductById(String productId);

FILE: clean-architecture/src/main/java/com/iluwatar/cleanarchitecture/ShoppingCartService.java
  class ShoppingCartService (line 35) | public class ShoppingCartService {
    method ShoppingCartService (line 52) | public ShoppingCartService(
    method addItemToCart (line 68) | public void addItemToCart(final String userId, final String productId,...
    method removeItemFromCart (line 81) | public void removeItemFromCart(final String userId, final String produ...
    method calculateTotal (line 91) | public double calculateTotal(final String userId) {
    method checkout (line 104) | public Order checkout(final String userId) {

FILE: clean-architecture/src/test/java/com/iluwatar/cleanarchitecture/AppTest.java
  class AppTest (line 31) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 38) | @Test

FILE: clean-architecture/src/test/java/com/iluwatar/cleanarchitecture/CartControllerTest.java
  class CartControllerTest (line 32) | class CartControllerTest {
    method setUp (line 36) | @BeforeEach
    method testRemoveItemFromCart (line 46) | @Test
    method testRemoveNonExistentItem (line 58) | @Test

FILE: client-session/src/main/java/com/iluwatar/client/session/App.java
  class App (line 38) | public class App {
    method main (line 45) | public static void main(String[] args) {

FILE: client-session/src/main/java/com/iluwatar/client/session/Request.java
  class Request (line 32) | @Data

FILE: client-session/src/main/java/com/iluwatar/client/session/Server.java
  class Server (line 37) | @Slf4j
    method getSession (line 51) | public Session getSession(String name) {
    method process (line 60) | public void process(Request request) {

FILE: client-session/src/main/java/com/iluwatar/client/session/Session.java
  class Session (line 35) | @Data

FILE: client-session/src/test/java/com/iluwatar/client/session/AppTest.java
  class AppTest (line 32) | class AppTest {
    method appStartsWithoutException (line 34) | @Test

FILE: client-session/src/test/java/com/iluwatar/client/session/ServerTest.java
  class ServerTest (line 31) | class ServerTest {
    method checkGetSession (line 33) | @Test

FILE: collecting-parameter/src/main/java/com/iluwatar/collectingparameter/App.java
  class App (line 48) | public class App {
    method main (line 56) | public static void main(String[] args) {
    method addValidA4Papers (line 83) | public static void addValidA4Papers(Queue<PrinterItem> printerItemsCol...
    method addValidA3Papers (line 105) | public static void addValidA3Papers(Queue<PrinterItem> printerItemsCol...
    method addValidA2Papers (line 126) | public static void addValidA2Papers(Queue<PrinterItem> printerItemsCol...

FILE: collecting-parameter/src/main/java/com/iluwatar/collectingparameter/PaperSizes.java
  type PaperSizes (line 27) | enum PaperSizes {

FILE: collecting-parameter/src/main/java/com/iluwatar/collectingparameter/PrinterItem.java
  class PrinterItem (line 30) | public class PrinterItem {
    method PrinterItem (line 37) | public PrinterItem(PaperSizes paperSize, int pageCount, boolean isDoub...

FILE: collecting-parameter/src/main/java/com/iluwatar/collectingparameter/PrinterQueue.java
  class PrinterQueue (line 35) | public class PrinterQueue {
    method getInstance (line 44) | public static PrinterQueue getInstance() {
    method emptyQueue (line 52) | public void emptyQueue() {
    method PrinterQueue (line 57) | private PrinterQueue() {
    method getPrinterQueue (line 61) | public Queue<PrinterItem> getPrinterQueue() {
    method addPrinterItem (line 70) | public void addPrinterItem(PrinterItem printerItem) {

FILE: collecting-parameter/src/test/java/com/iluwatar/collectingparameter/AppTest.java
  class AppTest (line 31) | class AppTest {
    method executesWithoutException (line 33) | @Test

FILE: collecting-parameter/src/test/java/com/iluwatar/collectingparameter/CollectingParameterTest.java
  class CollectingParameterTest (line 33) | class CollectingParameterTest {
    method testCollectingParameter (line 35) | @Test

FILE: collecting-parameter/src/test/java/com/iluwatar/collectingparameter/PrinterQueueTest.java
  class PrinterQueueTest (line 33) | class PrinterQueueTest {
    method singletonTest (line 35) | @Test
    method negativePageCount (line 43) | @Test()
    method nullPageSize (line 50) | @Test()

FILE: collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/App.java
  class App (line 38) | @Slf4j
    method main (line 46) | public static void main(String[] args) {

FILE: collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/CarFactory.java
  class CarFactory (line 30) | public class CarFactory {
    method CarFactory (line 31) | private CarFactory() {}
    method createCars (line 38) | public static List<Car> createCars() {

FILE: collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/Category.java
  type Category (line 28) | public enum Category {

FILE: collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/FunctionalProgramming.java
  class FunctionalProgramming (line 47) | public class FunctionalProgramming {
    method FunctionalProgramming (line 48) | private FunctionalProgramming() {}
    method getModelsAfter2000 (line 56) | public static List<String> getModelsAfter2000(List<Car> cars) {
    method getGroupingOfCarsByCategory (line 70) | public static Map<Category, List<Car>> getGroupingOfCarsByCategory(Lis...
    method getSedanCarsOwnedSortedByDate (line 80) | public static List<Car> getSedanCarsOwnedSortedByDate(List<Person> per...

FILE: collection-pipeline/src/main/java/com/iluwatar/collectionpipeline/ImperativeProgramming.java
  class ImperativeProgramming (line 50) | public class ImperativeProgramming {
    method ImperativeProgramming (line 51) | private ImperativeProgramming() {}
    method getModelsAfter2000 (line 59) | public static List<String> getModelsAfter2000(List<Car> cars) {
    method getGroupingOfCarsByCategory (line 91) | public static Map<Category, List<Car>> getGroupingOfCarsByCategory(Lis...
    method getSedanCarsOwnedSortedByDate (line 112) | public static List<Car> getSedanCarsOwnedSortedByDate(List<Person> per...

FILE: collection-pipeline/src/test/java/com/iluwatar/collectionpipeline/AppTest.java
  class AppTest (line 35) | @Slf4j
    method testGetModelsAfter2000UsingFor (line 40) | @Test
    method testGetModelsAfter2000UsingPipeline (line 46) | @Test
    method testGetGroupingOfCarsByCategory (line 52) | @Test
    method testGetSedanCarsOwnedSortedByDate (line 75) | @Test

FILE: combinator/src/main/java/com/iluwatar/combinator/CombinatorApp.java
  class CombinatorApp (line 38) | @Slf4j
    method main (line 61) | public static void main(String[] args) {
    method text (line 80) | private static String text() {

FILE: combinator/src/main/java/com/iluwatar/combinator/Finder.java
  type Finder (line 32) | public interface Finder {
    method find (line 40) | List<String> find(String text);
    method contains (line 48) | static Finder contains(String word) {
    method not (line 61) | default Finder not(Finder notFinder) {
    method or (line 75) | default Finder or(Finder orFinder) {
    method and (line 89) | default Finder and(Finder andFinder) {

FILE: combinator/src/main/java/com/iluwatar/combinator/Finders.java
  class Finders (line 32) | public class Finders {
    method Finders (line 33) | private Finders() {}
    method advancedFinder (line 43) | public static Finder advancedFinder(String query, String orQuery, Stri...
    method filteredFinder (line 54) | public static Finder filteredFinder(String query, String... excludeQue...
    method specializedFinder (line 69) | public static Finder specializedFinder(String... queries) {
    method expandedFinder (line 84) | public static Finder expandedFinder(String... queries) {
    method identMult (line 93) | private static Finder identMult() {
    method identSum (line 97) | private static Finder identSum() {

FILE: combinator/src/test/java/com/iluwatar/combinator/CombinatorAppTest.java
  class CombinatorAppTest (line 31) | class CombinatorAppTest {
    method shouldExecuteApplicationWithoutException (line 39) | @Test

FILE: combinator/src/test/java/com/iluwatar/combinator/FinderTest.java
  class FinderTest (line 32) | class FinderTest {
    method contains (line 34) | @Test

FILE: combinator/src/test/java/com/iluwatar/combinator/FindersTest.java
  class FindersTest (line 36) | class FindersTest {
    method advancedFinderTest (line 38) | @Test
    method filteredFinderTest (line 45) | @Test
    method specializedFinderTest (line 52) | @Test
    method expandedFinderTest (line 59) | @Test
    method text (line 68) | private String text() {

FILE: command-query-responsibility-segregation/src/main/java/com/iluwatar/cqrs/app/App.java
  class App (line 44) | @Slf4j
    method main (line 52) | public static void main(String[] args) {

FILE: command-query-responsibility-segregation/src/main/java/com/iluwatar/cqrs/commandes/CommandService.java
  type CommandService (line 28) | public interface CommandService {
    method authorCreated (line 30) | void authorCreated(String username, String name, String email);
    method bookAddedToAuthor (line 32) | void bookAddedToAuthor(String title, double price, String username);
    method authorNameUpdated (line 34) | void authorNameUpdated(String username, String name);
    method authorUsernameUpdated (line 36) | void authorUsernameUpdated(String oldUsername, String newUsername);
    method authorEmailUpdated (line 38) | void authorEmailUpdated(String username, String email);
    method bookTitleUpdated (line 40) | void bookTitleUpdated(String oldTitle, String newTitle);
    method bookPriceUpdated (line 42) | void bookPriceUpdated(String title, double price);

FILE: command-query-responsibility-segregation/src/main/java/com/iluwatar/cqrs/commandes/CommandServiceImpl.java
  class CommandServiceImpl (line 36) | public class CommandServiceImpl implements CommandService {
    method getAuthorByUsername (line 40) | private Author getAuthorByUsername(String username) {
    method getBookByTitle (line 54) | private Book getBookByTitle(String title) {
    method authorCreated (line 68) | @Override
    method bookAddedToAuthor (line 78) | @Override
    method authorNameUpdated (line 89) | @Override
    method authorUsernameUpdated (line 100) | @Override
    method authorEmailUpdated (line 111) | @Override
    method bookTitleUpdated (line 122) | @Override
    method bookPriceUpdated (line 133) | @Override

FILE: command-query-responsibility-segregation/src/main/java/com/iluwatar/cqrs/constants/AppConstants.java
  class AppConstants (line 28) | public class AppConstants {

FILE: command-query-responsibility-segregation/src/main/java/com/iluwatar/cqrs/domain/model/Author.java
  class Author (line 36) | @ToString
    method Author (line 56) | public Author(String username, String name, String email) {
    method Author (line 62) | protected Author() {}

FILE: command-query-responsibility-segregation/src/main/java/com/iluwatar/cqrs/domain/model/Book.java
  class Book (line 40) | @ToString
    method Book (line 60) | public Book(String title, double price, Author author) {
    method Book (line 66) | protected Book() {}

FILE: command-query-responsibility-segregation/src/main/java/com/iluwatar/cqrs/dto/Author.java
  class Author (line 34) | @ToString

FILE: command-query-responsibility-segregation/src/main/java/com/iluwatar/cqrs/dto/Book.java
  class Book (line 34) | @ToString

FILE: command-query-responsibility-segregation/src/main/java/com/iluwatar/cqrs/queries/QueryService.java
  type QueryService (line 33) | public interface QueryService {
    method getAuthorByUsername (line 35) | Author getAuthorByUsername(String username);
    method getBook (line 37) | Book getBook(String title);
    method getAuthorBooks (line 39) | List<Book> getAuthorBooks(String username);
    method getAuthorBooksCount (line 41) | BigInteger getAuthorBooksCount(String username);
    method getAuthorsCount (line 43) | BigInteger getAuthorsCount();

FILE: command-query-responsibility-segregation/src/main/java/com/iluwatar/cqrs/queries/QueryServiceImpl.java
  class QueryServiceImpl (line 40) | public class QueryServiceImpl implements QueryService {
    method getAuthorByUsername (line 44) | @Override
    method getBook (line 58) | @Override
    method getAuthorBooks (line 72) | @Override
    method getAuthorBooksCount (line 87) | @Override
    method getAuthorsCount (line 102) | @Override

FILE: command-query-responsibility-segregation/src/main/java/com/iluwatar/cqrs/util/HibernateUtil.java
  class HibernateUtil (line 36) | @Slf4j
    method buildSessionFactory (line 41) | private static SessionFactory buildSessionFactory() {
    method getSessionFactory (line 54) | public static SessionFactory getSessionFactory() {

FILE: command-query-responsibility-segregation/src/test/java/com/iluwatar/cqrs/IntegrationTest.java
  class IntegrationTest (line 40) | class IntegrationTest {
    method initializeAndPopulateDatabase (line 44) | @BeforeAll
    method testGetAuthorByUsername (line 67) | @Test
    method testGetUpdatedAuthorByUsername (line 75) | @Test
    method testGetBook (line 82) | @Test
    method testGetAuthorBooks (line 89) | @Test
    method testGetAuthorBooksCount (line 97) | @Test
    method testGetAuthorsCount (line 103) | @Test

FILE: command/src/main/java/com/iluwatar/command/App.java
  class App (line 43) | public class App {
    method main (line 50) | public static void main(String[] args) {

FILE: command/src/main/java/com/iluwatar/command/Goblin.java
  class Goblin (line 28) | public class Goblin extends Target {
    method Goblin (line 30) | public Goblin() {
    method toString (line 35) | @Override

FILE: command/src/main/java/com/iluwatar/command/Size.java
  type Size (line 30) | @RequiredArgsConstructor
    method toString (line 37) | @Override

FILE: command/src/main/java/com/iluwatar/command/Target.java
  class Target (line 32) | @Slf4j
    method printStatus (line 42) | public void printStatus() {
    method changeSize (line 47) | public void changeSize() {
    method changeVisibility (line 53) | public void changeVisibility() {

FILE: command/src/main/java/com/iluwatar/command/Visibility.java
  type Visibility (line 30) | @RequiredArgsConstructor
    method toString (line 37) | @Override

FILE: command/src/main/java/com/iluwatar/command/Wizard.java
  class Wizard (line 32) | @Slf4j
    method castSpell (line 39) | public void castSpell(Runnable runnable) {
    method undoLastSpell (line 45) | public void undoLastSpell() {
    method redoLastSpell (line 54) | public void redoLastSpell() {
    method toString (line 62) | @Override

FILE: command/src/test/java/com/iluwatar/command/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 39) | @Test

FILE: command/src/test/java/com/iluwatar/command/CommandTest.java
  class CommandTest (line 45) | class CommandTest {
    method testCommand (line 54) | @Test
    method verifyGoblin (line 88) | private void verifyGoblin(

FILE: commander/src/main/java/com/iluwatar/commander/AppAllCases.java
  class AppAllCases (line 87) | public class AppAllCases {
    method employeeDatabaseUnavailableCase (line 92) | void employeeDatabaseUnavailableCase() {
    method employeeDbSuccessCase (line 128) | void employeeDbSuccessCase() {
    method messagingDatabaseUnavailableCasePaymentSuccess (line 145) | void messagingDatabaseUnavailableCasePaymentSuccess() {
    method messagingDatabaseUnavailableCasePaymentError (line 165) | void messagingDatabaseUnavailableCasePaymentError() {
    method messagingDatabaseUnavailableCasePaymentFailure (line 202) | void messagingDatabaseUnavailableCasePaymentFailure() {
    method messagingSuccessCase (line 238) | void messagingSuccessCase() {
    method paymentNotPossibleCase (line 255) | void paymentNotPossibleCase() {
    method paymentDatabaseUnavailableCase (line 271) | void paymentDatabaseUnavailableCase() {
    method paymentSuccessCase (line 292) | void paymentSuccessCase() {
    method queuePaymentTaskDatabaseUnavailableCase (line 309) | void queuePaymentTaskDatabaseUnavailableCase() {
    method queueMessageTaskDatabaseUnavailableCase (line 336) | void queueMessageTaskDatabaseUnavailableCase() {
    method queueEmployeeDbTaskDatabaseUnavailableCase (line 363) | void queueEmployeeDbTaskDatabaseUnavailableCase() {
    method queueSuccessCase (line 403) | void queueSuccessCase() {
    method itemUnavailableCase (line 420) | void itemUnavailableCase() {
    method shippingDatabaseUnavailableCase (line 432) | void shippingDatabaseUnavailableCase() {
    method shippingItemNotPossibleCase (line 453) | void shippingItemNotPossibleCase() {
    method shippingSuccessCase (line 466) | void shippingSuccessCase() {
    method main (line 487) | public static void main(String[] args) {

FILE: commander/src/main/java/com/iluwatar/commander/Commander.java
  class Commander (line 73) | public class Commander {
    method Commander (line 102) | Commander(
    method placeOrder (line 125) | void placeOrder(Order order) {
    method sendShippingRequest (line 129) | private void sendShippingRequest(Order order) {
    method sendPaymentRequest (line 196) | private void sendPaymentRequest(Order order) {
    method getRetryHandleErrorIssue (line 230) | private Retry.HandleErrorIssue<Order> getRetryHandleErrorIssue(Order o...
    method handlePaymentError (line 247) | private void handlePaymentError(String orderId, Order o) {
    method handlePaymentDetailsError (line 258) | private void handlePaymentDetailsError(String orderId, Order o) {
    method getRetryOperation (line 271) | private Retry.Operation getRetryOperation(Order order) {
    method updateQueue (line 295) | private void updateQueue(QueueTask qt) {
    method tryDoingTasksInQueue (line 360) | private void tryDoingTasksInQueue() { // commander controls operations...
    method tryDequeue (line 390) | private void tryDequeue() {
    method sendSuccessMessage (line 421) | private void sendSuccessMessage(Order order) {
    method handleSuccessMessageErrorIssue (line 449) | private void handleSuccessMessageErrorIssue(Order order, Order o) {
    method handleSuccessMessageRetryOperation (line 464) | private Retry.Operation handleSuccessMessageRetryOperation(Order order) {
    method sendPaymentFailureMessage (line 486) | private void sendPaymentFailureMessage(Order order) {
    method handlePaymentErrorIssue (line 514) | private void handlePaymentErrorIssue(Order order, Order o) {
    method handlePaymentFailureRetryOperation (line 529) | private void handlePaymentFailureRetryOperation(Order order, List<Exce...
    method sendPaymentPossibleErrorMsg (line 553) | private void sendPaymentPossibleErrorMsg(Order order) {
    method handlePaymentPossibleErrorMsgErrorIssue (line 581) | private void handlePaymentPossibleErrorMsgErrorIssue(Order order, Orde...
    method handlePaymentPossibleErrorMsgRetryOperation (line 594) | private void handlePaymentPossibleErrorMsgRetryOperation(Order order, ...
    method employeeHandleIssue (line 617) | private void employeeHandleIssue(Order order) {
    method doTasksInQueue (line 671) | private void doTasksInQueue() throws IsEmptyException, InterruptedExce...
    method doEmployeeDbTask (line 704) | private void doEmployeeDbTask(QueueTask qt) {
    method doMessagingTask (line 714) | private void doMessagingTask(QueueTask qt) {
    method doPaymentTask (line 737) | private void doPaymentTask(QueueTask qt) {

FILE: commander/src/main/java/com/iluwatar/commander/Database.java
  class Database (line 35) | public abstract class Database<T> {
    method add (line 36) | public abstract T add(T obj) throws DatabaseUnavailableException;
    method get (line 38) | public abstract T get(String id) throws DatabaseUnavailableException;

FILE: commander/src/main/java/com/iluwatar/commander/Order.java
  class Order (line 32) | public class Order { // can store all transactions ids also
    type PaymentStatus (line 34) | enum PaymentStatus {
    type MessageSent (line 40) | enum MessageSent {
    method Order (line 59) | Order(User user, String item, float price) {
    method createUniqueId (line 77) | private String createUniqueId() {

FILE: commander/src/main/java/com/iluwatar/commander/Retry.java
  class Retry (line 39) | public class Retry<T> {
    type Operation (line 42) | public interface Operation {
      method operation (line 43) | void operation(List<Exception> list) throws Exception;
    type HandleErrorIssue (line 51) | public interface HandleErrorIssue<T> {
      method handleIssue (line 52) | void handleIssue(T obj, Exception e);
    method Retry (line 65) | Retry(
    method perform (line 86) | public void perform(List<Exception> list, T obj) {

FILE: commander/src/main/java/com/iluwatar/commander/Service.java
  class Service (line 41) | public abstract class Service {
    method Service (line 49) | protected Service(Database db, Exception... exc) {
    method receiveRequest (line 54) | public abstract String receiveRequest(Object... parameters) throws Dat...
    method updateDb (line 56) | protected abstract String updateDb(Object... parameters) throws Databa...
    method generateId (line 58) | protected String generateId() {

FILE: commander/src/main/java/com/iluwatar/commander/User.java
  class User (line 30) | @AllArgsConstructor

FILE: commander/src/main/java/com/iluwatar/commander/employeehandle/EmployeeDatabase.java
  class EmployeeDatabase (line 34) | public class EmployeeDatabase extends Database<Order> {
    method add (line 37) | @Override
    method get (line 42) | @Override

FILE: commander/src/main/java/com/iluwatar/commander/employeehandle/EmployeeHandle.java
  class EmployeeHandle (line 35) | public class EmployeeHandle extends Service {
    method EmployeeHandle (line 37) | public EmployeeHandle(EmployeeDatabase db, Exception... exc) {
    method receiveRequest (line 41) | public String receiveRequest(Object... parameters) throws DatabaseUnav...
    method updateDb (line 45) | protected String updateDb(Object... parameters) throws DatabaseUnavail...

FILE: commander/src/main/java/com/iluwatar/commander/exceptions/DatabaseUnavailableException.java
  class DatabaseUnavailableException (line 31) | public class DatabaseUnavailableException extends Exception {

FILE: commander/src/main/java/com/iluwatar/commander/exceptions/IsEmptyException.java
  class IsEmptyException (line 28) | public class IsEmptyException extends Exception {

FILE: commander/src/main/java/com/iluwatar/commander/exceptions/ItemUnavailableException.java
  class ItemUnavailableException (line 28) | public class ItemUnavailableException extends Exception {

FILE: commander/src/main/java/com/iluwatar/commander/exceptions/PaymentDetailsErrorException.java
  class PaymentDetailsErrorException (line 31) | public class PaymentDetailsErrorException extends Exception {

FILE: commander/src/main/java/com/iluwatar/commander/exceptions/ShippingNotPossibleException.java
  class ShippingNotPossibleException (line 31) | public class ShippingNotPossibleException extends Exception {

FILE: commander/src/main/java/com/iluwatar/commander/messagingservice/MessagingDatabase.java
  class MessagingDatabase (line 33) | public class MessagingDatabase extends Database<MessageRequest> {
    method add (line 36) | @Override
    method get (line 41) | @Override

FILE: commander/src/main/java/com/iluwatar/commander/messagingservice/MessagingService.java
  class MessagingService (line 36) | @Slf4j
    type MessageToSend (line 39) | enum MessageToSend {
    method MessagingService (line 47) | public MessagingService(MessagingDatabase db, Exception... exc) {
    method receiveRequest (line 52) | public String receiveRequest(Object... parameters) throws DatabaseUnav...
    method updateDb (line 67) | protected String updateDb(Object... parameters) throws DatabaseUnavail...
    method sendMessage (line 77) | String sendMessage(MessageToSend m) {

FILE: commander/src/main/java/com/iluwatar/commander/paymentservice/PaymentDatabase.java
  class PaymentDatabase (line 33) | public class PaymentDatabase extends Database<PaymentRequest> {
    method add (line 38) | @Override
    method get (line 43) | @Override

FILE: commander/src/main/java/com/iluwatar/commander/paymentservice/PaymentService.java
  class PaymentService (line 35) | public class PaymentService extends Service {
    class PaymentRequest (line 37) | @RequiredArgsConstructor
    method PaymentService (line 44) | public PaymentService(PaymentDatabase db, Exception... exc) {
    method receiveRequest (line 49) | public String receiveRequest(Object... parameters) throws DatabaseUnav...
    method updateDb (line 56) | protected String updateDb(Object... parameters) throws DatabaseUnavail...

FILE: commander/src/main/java/com/iluwatar/commander/queue/Queue.java
  class Queue (line 34) | public class Queue<T> {
    class Node (line 40) | static class Node<V> {
      method Node (line 44) | Node(V obj, Node<V> b) {
    method isEmpty (line 50) | boolean isEmpty() {
    method enqueue (line 54) | void enqueue(T obj) {
    method dequeue (line 66) | T dequeue() throws IsEmptyException {
    method peek (line 77) | T peek() throws IsEmptyException {

FILE: commander/src/main/java/com/iluwatar/commander/queue/QueueDatabase.java
  class QueueDatabase (line 33) | public class QueueDatabase extends Database<QueueTask> {
    method QueueDatabase (line 38) | public QueueDatabase(Exception... exc) {
    method add (line 43) | @Override
    method peek (line 56) | public QueueTask peek() throws IsEmptyException {
    method dequeue (line 66) | public QueueTask dequeue() throws IsEmptyException {
    method get (line 70) | @Override

FILE: commander/src/main/java/com/iluwatar/commander/queue/QueueTask.java
  class QueueTask (line 33) | @RequiredArgsConstructor
    type TaskType (line 37) | public enum TaskType {
    method getType (line 56) | public String getType() {
    method isFirstAttempt (line 70) | public boolean isFirstAttempt() {

FILE: commander/src/main/java/com/iluwatar/commander/shippingservice/ShippingDatabase.java
  class ShippingDatabase (line 33) | public class ShippingDatabase extends Database<ShippingRequest> {
    method add (line 37) | @Override
    method get (line 42) | public ShippingRequest get(String trasnactionId) {

FILE: commander/src/main/java/com/iluwatar/commander/shippingservice/ShippingService.java
  class ShippingService (line 35) | public class ShippingService extends Service {
    class ShippingRequest (line 37) | @AllArgsConstructor
    method ShippingService (line 44) | public ShippingService(ShippingDatabase db, Exception... exc) {
    method receiveRequest (line 49) | public String receiveRequest(Object... parameters) throws DatabaseUnav...
    method updateDb (line 57) | protected String updateDb(Object... parameters) throws DatabaseUnavail...

FILE: commander/src/test/java/com/iluwatar/commander/CommanderTest.java
  class CommanderTest (line 47) | class CommanderTest {
    method buildCommanderObject (line 65) | private Commander buildCommanderObject() {
    method buildCommanderObject (line 69) | private Commander buildCommanderObject(boolean nonPaymentException) {
    method buildCommanderObjectVanilla (line 121) | private Commander buildCommanderObjectVanilla() {
    method buildCommanderObjectUnknownException (line 160) | private Commander buildCommanderObjectUnknownException() {
    method buildCommanderObjectNoPaymentException1 (line 177) | private Commander buildCommanderObjectNoPaymentException1() {
    method buildCommanderObjectNoPaymentException2 (line 193) | private Commander buildCommanderObjectNoPaymentException2() {
    method buildCommanderObjectNoPaymentException3 (line 210) | private Commander buildCommanderObjectNoPaymentException3() {
    method buildCommanderObjectWithDB (line 227) | private Commander buildCommanderObjectWithDB() {
    method buildCommanderObjectWithDB (line 231) | private Commander buildCommanderObjectWithDB(
    method buildCommanderObjectWithoutDB (line 260) | private Commander buildCommanderObjectWithoutDB() {
    method buildCommanderObjectWithoutDB (line 264) | private Commander buildCommanderObjectWithoutDB(
    method testPlaceOrderVanilla (line 293) | @Test
    method testPlaceOrder (line 309) | @Test
    method testPlaceOrder2 (line 325) | @Test
    method testPlaceOrderNoException1 (line 341) | @Test
    method testPlaceOrderNoException2 (line 357) | @Test
    method testPlaceOrderNoException3 (line 373) | @Test
    method testPlaceOrderNoException4 (line 389) | @Test
    method testPlaceOrderUnknownException (line 407) | @Test
    method testPlaceOrderShortDuration (line 429) | @Test
    method testPlaceOrderShortDuration2 (line 451) | @Test
    method testPlaceOrderNoExceptionShortMsgDuration (line 473) | @Test
    method testPlaceOrderNoExceptionShortQueueDuration (line 495) | @Test
    method testPlaceOrderWithDatabase (line 517) | @Test
    method testPlaceOrderWithDatabaseAndExceptions (line 539) | @Test
    method testPlaceOrderWithoutDatabase (line 586) | @Test
    method testPlaceOrderWithoutDatabaseAndExceptions (line 608) | @Test
    method testAllSuccessCases (line 655) | @Test
    method testAllUnavailableCase (line 664) | @Test
    method testAllNotPossibleCase (line 678) | @Test

FILE: commander/src/test/java/com/iluwatar/commander/RetryTest.java
  class RetryTest (line 37) | class RetryTest {
    method performTest (line 41) | @Test

FILE: component/src/main/java/com/iluwatar/component/App.java
  class App (line 44) | @Slf4j
    method main (line 51) | public static void main(String[] args) {

FILE: component/src/main/java/com/iluwatar/component/GameObject.java
  class GameObject (line 41) | @Getter
    method createPlayer (line 57) | public static GameObject createPlayer() {
    method createNpc (line 70) | public static GameObject createNpc() {
    method demoUpdate (line 81) | public void demoUpdate() {
    method update (line 92) | public void update(int e) {
    method updateVelocity (line 103) | public void updateVelocity(int acceleration) {
    method updateCoordinate (line 108) | public void updateCoordinate() {

FILE: component/src/main/java/com/iluwatar/component/component/graphiccomponent/GraphicComponent.java
  type GraphicComponent (line 30) | public interface GraphicComponent {
    method update (line 31) | void update(GameObject gameObject);

FILE: component/src/main/java/com/iluwatar/component/component/graphiccomponent/ObjectGraphicComponent.java
  class ObjectGraphicComponent (line 31) | @Slf4j
    method update (line 39) | @Override

FILE: component/src/main/java/com/iluwatar/component/component/inputcomponent/DemoInputComponent.java
  class DemoInputComponent (line 37) | @Slf4j
    method update (line 47) | @Override

FILE: component/src/main/java/com/iluwatar/component/component/inputcomponent/InputComponent.java
  type InputComponent (line 30) | public interface InputComponent {
    method update (line 31) | void update(GameObject gameObject, int e);

FILE: component/src/main/java/com/iluwatar/component/component/inputcomponent/PlayerInputComponent.java
  class PlayerInputComponent (line 35) | @Slf4j
    method update (line 45) | @Override

FILE: component/src/main/java/com/iluwatar/component/component/physiccomponent/ObjectPhysicComponent.java
  class ObjectPhysicComponent (line 31) | @Slf4j
    method update (line 39) | @Override

FILE: component/src/main/java/com/iluwatar/component/component/physiccomponent/PhysicComponent.java
  type PhysicComponent (line 30) | public interface PhysicComponent {
    method update (line 31) | void update(GameObject gameObject);

FILE: component/src/test/java/com/iluwatar/component/AppTest.java
  class AppTest (line 35) | class AppTest {
    method shouldExecuteComponentWithoutException (line 37) | @Test

FILE: component/src/test/java/com/iluwatar/component/GameObjectTest.java
  class GameObjectTest (line 35) | @Slf4j
    method initEach (line 40) | @BeforeEach
    method objectTest (line 49) | @Test
    method eventInputTest (line 57) | @Test
    method npcDemoTest (line 80) | @Test

FILE: composite-entity/src/main/java/com/iluwatar/compositeentity/App.java
  class App (line 35) | @Slf4j
    method App (line 39) | public App(String message, String signal) {
    method main (line 53) | public static void main(String[] args) {

FILE: composite-entity/src/main/java/com/iluwatar/compositeentity/CoarseGrainedObject.java
  class CoarseGrainedObject (line 35) | public abstract class CoarseGrainedObject<T> {
    method setData (line 39) | public void setData(T... data) {
    method getData (line 43) | public T[] getData() {

FILE: composite-entity/src/main/java/com/iluwatar/compositeentity/CompositeEntity.java
  class CompositeEntity (line 31) | public class CompositeEntity {
    method setData (line 35) | public void setData(String message, String signal) {
    method getData (line 39) | public String[] getData() {
    method init (line 43) | public void init() {

FILE: composite-entity/src/main/java/com/iluwatar/compositeentity/ConsoleCoarseGrainedObject.java
  class ConsoleCoarseGrainedObject (line 28) | public class ConsoleCoarseGrainedObject extends CoarseGrainedObject<Stri...
    method getData (line 30) | @Override
    method init (line 35) | public void init() {

FILE: composite-entity/src/main/java/com/iluwatar/compositeentity/DependentObject.java
  class DependentObject (line 35) | @Setter

FILE: composite-entity/src/main/java/com/iluwatar/compositeentity/MessageDependentObject.java
  class MessageDependentObject (line 28) | public class MessageDependentObject extends DependentObject<String> {}

FILE: composite-entity/src/main/java/com/iluwatar/compositeentity/SignalDependentObject.java
  class SignalDependentObject (line 28) | public class SignalDependentObject extends DependentObject<String> {}

FILE: composite-entity/src/test/java/com/iluwatar/compositeentity/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 40) | @Test

FILE: composite-entity/src/test/java/com/iluwatar/compositeentity/PersistenceTest.java
  class PersistenceTest (line 31) | class PersistenceTest {
    method dependentObjectChangedForPersistenceTest (line 35) | @Test
    method coarseGrainedObjectChangedForPersistenceTest (line 46) | @Test

FILE: composite-view/src/main/java/com/iluwatar/compositeview/AppServlet.java
  class AppServlet (line 36) | @Slf4j
    method doGet (line 53) | @Override
    method doPost (line 65) | @Override
    method doDelete (line 75) | @Override
    method doPut (line 85) | @Override

FILE: composite-view/src/main/java/com/iluwatar/compositeview/ClientPropertiesBean.java
  class ClientPropertiesBean (line 41) | @Getter
    method ClientPropertiesBean (line 64) | public ClientPropertiesBean(HttpServletRequest req) {

FILE: composite-view/src/test/java/com/iluwatar/compositeview/AppServletTest.java
  class AppServletTest (line 37) | class AppServletTest {
    method testDoGet (line 51) | @Test
    method testDoPost (line 69) | @Test
    method testDoPut (line 85) | @Test
    method testDoDelete (line 101) | @Test

FILE: composite-view/src/test/java/com/iluwatar/compositeview/JavaBeansTest.java
  class JavaBeansTest (line 33) | class JavaBeansTest {
    method testDefaultConstructor (line 35) | @Test
    method testNameGetterSetter (line 45) | @Test
    method testBusinessSetterGetter (line 54) | @Test
    method testScienceSetterGetter (line 63) | @Test
    method testSportsSetterGetter (line 72) | @Test
    method testWorldSetterGetter (line 81) | @Test
    method testRequestConstructor (line 90) | @Test

FILE: composite/src/main/java/com/iluwatar/composite/App.java
  class App (line 39) | @Slf4j
    method main (line 47) | public static void main(String[] args) {

FILE: composite/src/main/java/com/iluwatar/composite/Letter.java
  class Letter (line 30) | @RequiredArgsConstructor
    method printThisBefore (line 35) | @Override

FILE: composite/src/main/java/com/iluwatar/composite/LetterComposite.java
  class LetterComposite (line 31) | public abstract class LetterComposite {
    method add (line 35) | public void add(LetterComposite letter) {
    method count (line 39) | public int count() {
    method printThisBefore (line 43) | protected void printThisBefore() {}
    method printThisAfter (line 45) | protected void printThisAfter() {}
    method print (line 48) | public void print() {

FILE: composite/src/main/java/com/iluwatar/composite/Messenger.java
  class Messenger (line 30) | public class Messenger {
    method messageFromOrcs (line 32) | LetterComposite messageFromOrcs() {
    method messageFromElves (line 49) | LetterComposite messageFromElves() {

FILE: composite/src/main/java/com/iluwatar/composite/Sentence.java
  class Sentence (line 30) | public class Sentence extends LetterComposite {
    method Sentence (line 33) | public Sentence(List<Word> words) {
    method printThisAfter (line 37) | @Override

FILE: composite/src/main/java/com/iluwatar/composite/Word.java
  class Word (line 30) | public class Word extends LetterComposite {
    method Word (line 33) | public Word(List<Letter> letters) {
    method Word (line 42) | public Word(char... letters) {
    method printThisBefore (line 48) | @Override

FILE: composite/src/test/java/com/iluwatar/composite/AppTest.java
  class AppTest (line 31) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 39) | @Test

FILE: composite/src/test/java/com/iluwatar/composite/MessengerTest.java
  class MessengerTest (line 37) | class MessengerTest {
    method setUp (line 48) | @BeforeEach
    method tearDown (line 55) | @AfterEach
    method testMessageFromOrcs (line 61) | @Test
    method testMessageFromElves (line 68) | @Test
    method testMessage (line 80) | private void testMessage(final LetterComposite composedMessage, final ...

FILE: context-object/src/main/java/com/iluwatar/context/object/App.java
  class App (line 39) | @Slf4j
    method main (line 49) | public static void main(String[] args) {
    method logContext (line 71) | private static void logContext(ServiceContext context) {

FILE: context-object/src/main/java/com/iluwatar/context/object/LayerA.java
  class LayerA (line 30) | @Getter
    method LayerA (line 35) | public LayerA() {
    method addAccountInfo (line 39) | public void addAccountInfo(String accountService) {

FILE: context-object/src/main/java/com/iluwatar/context/object/LayerB.java
  class LayerB (line 30) | @Getter
    method LayerB (line 35) | public LayerB(LayerA layerA) {
    method addSessionInfo (line 39) | public void addSessionInfo(String sessionService) {

FILE: context-object/src/main/java/com/iluwatar/context/object/LayerC.java
  class LayerC (line 30) | @Getter
    method LayerC (line 35) | public LayerC(LayerB layerB) {
    method addSearchInfo (line 39) | public void addSearchInfo(String searchService) {

FILE: context-object/src/main/java/com/iluwatar/context/object/ServiceContext.java
  class ServiceContext (line 31) | @Getter

FILE: context-object/src/main/java/com/iluwatar/context/object/ServiceContextFactory.java
  class ServiceContextFactory (line 28) | public class ServiceContextFactory {
    method createContext (line 30) | public static ServiceContext createContext() {

FILE: context-object/src/test/java/com/iluwatar/contect/object/AppTest.java
  class AppTest (line 32) | public class AppTest {
    method shouldExecuteWithoutException (line 35) | @Test

FILE: context-object/src/test/java/com/iluwatar/contect/object/ServiceContextTest.java
  class ServiceContextTest (line 40) | public class ServiceContextTest {
    method initiateLayerA (line 46) | @BeforeEach
    method testSameContextPassedBetweenLayers (line 51) | @Test
    method testScopedDataPassedBetweenLayers (line 64) | @Test
    method testLayerContexts (line 77) | @Test

FILE: converter/src/main/java/com/iluwatar/converter/App.java
  class App (line 36) | @Slf4j
    method main (line 44) | public static void main(String[] args) {

FILE: converter/src/main/java/com/iluwatar/converter/Converter.java
  class Converter (line 40) | @RequiredArgsConstructor
    method convertFromDto (line 53) | public final U convertFromDto(final T dto) {
    method convertFromEntity (line 64) | public final T convertFromEntity(final U entity) {
    method createFromDtos (line 75) | public final List<U> createFromDtos(final Collection<T> dtos) {
    method createFromEntities (line 86) | public final List<T> createFromEntities(final Collection<U> entities) {

FILE: converter/src/main/java/com/iluwatar/converter/UserConverter.java
  class UserConverter (line 28) | public class UserConverter extends Converter<UserDto, User> {
    method UserConverter (line 30) | public UserConverter() {
    method convertToDto (line 34) | private static UserDto convertToDto(User user) {
    method convertToEntity (line 38) | private static User convertToEntity(UserDto dto) {

FILE: converter/src/test/java/com/iluwatar/converter/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 38) | @Test

FILE: converter/src/test/java/com/iluwatar/converter/ConverterTest.java
  class ConverterTest (line 34) | class ConverterTest {
    method testConversionsStartingFromDomain (line 39) | @Test
    method testConversionsStartingFromDto (line 47) | @Test
    method testCustomConverter (line 58) | @Test
    method testCollectionConversion (line 85) | @Test

FILE: curiously-recurring-template-pattern/src/main/java/crtp/App.java
  class App (line 33) | @Slf4j
    method main (line 41) | public static void main(String[] args) {

FILE: curiously-recurring-template-pattern/src/main/java/crtp/Fighter.java
  type Fighter (line 32) | public interface Fighter<T> {
    method fight (line 34) | void fight(T t);

FILE: curiously-recurring-template-pattern/src/main/java/crtp/MmaBantamweightFighter.java
  class MmaBantamweightFighter (line 28) | class MmaBantamweightFighter extends MmaFighter<MmaBantamweightFighter> {
    method MmaBantamweightFighter (line 30) | public MmaBantamweightFighter(String name, String surname, String nick...

FILE: curiously-recurring-template-pattern/src/main/java/crtp/MmaFighter.java
  class MmaFighter (line 35) | @Slf4j
    method fight (line 44) | @Override

FILE: curiously-recurring-template-pattern/src/main/java/crtp/MmaHeavyweightFighter.java
  class MmaHeavyweightFighter (line 28) | public class MmaHeavyweightFighter extends MmaFighter<MmaHeavyweightFigh...
    method MmaHeavyweightFighter (line 30) | public MmaHeavyweightFighter(String name, String surname, String nickN...

FILE: curiously-recurring-template-pattern/src/main/java/crtp/MmaLightweightFighter.java
  class MmaLightweightFighter (line 28) | class MmaLightweightFighter extends MmaFighter<MmaLightweightFighter> {
    method MmaLightweightFighter (line 30) | public MmaLightweightFighter(String name, String surname, String nickN...

FILE: curiously-recurring-template-pattern/src/test/java/crtp/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 34) | @Test

FILE: curiously-recurring-template-pattern/src/test/java/crtp/FightTest.java
  class FightTest (line 35) | @Slf4j
    method testFighterCanFightOnlyAgainstSameWeightOpponents (line 43) | @Test
    method getOpponents (line 64) | private static List<MmaFighter<?>> getOpponents() {

FILE: currying/src/main/java/com/iluwatar/currying/App.java
  class App (line 39) | @Slf4j
    method main (line 42) | public static void main(String[] args) {

FILE: currying/src/main/java/com/iluwatar/currying/Book.java
  class Book (line 33) | @AllArgsConstructor
    method equals (line 40) | @Override
    method hashCode (line 55) | @Override
    method toString (line 60) | @Override
    method builder (line 89) | public static AddGenre builder() {
    type AddGenre (line 95) | public interface AddGenre {
      method withGenre (line 96) | Book.AddAuthor withGenre(Genre genre);
    type AddAuthor (line 100) | public interface AddAuthor {
      method withAuthor (line 101) | Book.AddTitle withAuthor(String author);
    type AddTitle (line 105) | public interface AddTitle {
      method withTitle (line 106) | Book.AddPublicationDate withTitle(String title);
    type AddPublicationDate (line 110) | public interface AddPublicationDate {
      method withPublicationDate (line 111) | Book withPublicationDate(LocalDate publicationDate);

FILE: currying/src/main/java/com/iluwatar/currying/Genre.java
  type Genre (line 28) | public enum Genre {

FILE: currying/src/test/java/com/iluwatar/currying/AppTest.java
  class AppTest (line 32) | class AppTest {
    method executesWithoutExceptions (line 33) | @Test

FILE: currying/src/test/java/com/iluwatar/currying/BookCurryingTest.java
  class BookCurryingTest (line 34) | class BookCurryingTest {
    method initialiseBook (line 37) | @BeforeAll
    method createsExpectedBook (line 43) | @Test
    method functionCreatesExpectedBook (line 64) | @Test

FILE: dao-factory/src/main/java/com/iluwatar/daofactory/App.java
  class App (line 32) | @Slf4j
    method main (line 35) | public static void main(String[] args) {
    method deleteSchema (line 92) | public static void deleteSchema(CustomerDAO customerDAO) {
    method performCreateCustomer (line 96) | public static <T extends Serializable> void performCreateCustomer(
    method performUpdateCustomer (line 107) | public static <T extends Serializable> void performUpdateCustomer(
    method performDeleteCustomer (line 116) | public static <T extends Serializable> void performDeleteCustomer(

FILE: dao-factory/src/main/java/com/iluwatar/daofactory/CustomException.java
  class CustomException (line 28) | public class CustomException extends RuntimeException {
    method CustomException (line 29) | public CustomException(String message) {
    method CustomException (line 33) | public CustomException(String message, Throwable cause) {

FILE: dao-factory/src/main/java/com/iluwatar/daofactory/Customer.java
  class Customer (line 39) | @Getter

FILE: dao-factory/src/main/java/com/iluwatar/daofactory/CustomerDAO.java
  type CustomerDAO (line 43) | public interface CustomerDAO<T extends Serializable> {
    method save (line 49) | void save(Customer<T> customer);
    method update (line 56) | void update(Customer<T> customer);
    method delete (line 63) | void delete(T id);
    method findAll (line 70) | List<Customer<T>> findAll();
    method findById (line 78) | Optional<Customer<T>> findById(T id);
    method deleteSchema (line 84) | void deleteSchema();

FILE: dao-factory/src/main/java/com/iluwatar/daofactory/DAOFactory.java
  class DAOFactory (line 38) | public abstract class DAOFactory {
    method createCustomerDAO (line 44) | public abstract CustomerDAO createCustomerDAO();

FILE: dao-factory/src/main/java/com/iluwatar/daofactory/DAOFactoryProvider.java
  class DAOFactoryProvider (line 42) | public class DAOFactoryProvider {
    method DAOFactoryProvider (line 44) | private DAOFactoryProvider() {}
    method getDataSource (line 54) | public static DAOFactory getDataSource(DataSourceType dataSourceType) {

FILE: dao-factory/src/main/java/com/iluwatar/daofactory/DataSourceType.java
  type DataSourceType (line 28) | public enum DataSourceType {

FILE: dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileCustomerDAO.java
  class FlatFileCustomerDAO (line 47) | @Slf4j
    method createReader (line 54) | protected Reader createReader(Path filePath) throws IOException {
    method createWriter (line 58) | protected Writer createWriter(Path filePath) throws IOException {
    method save (line 63) | @Override
    method update (line 82) | @Override
    method delete (line 109) | @Override
    method findAll (line 134) | @Override
    method findById (line 149) | @Override
    method deleteSchema (line 164) | @Override

FILE: dao-factory/src/main/java/com/iluwatar/daofactory/FlatFileDataSourceFactory.java
  class FlatFileDataSourceFactory (line 33) | public class FlatFileDataSourceFactory extends DAOFactory {
    method createCustomerDAO (line 37) | @Override

FILE: dao-factory/src/main/java/com/iluwatar/daofactory/H2CustomerDAO.java
  class H2CustomerDAO (line 44) | @Slf4j
    method save (line 59) | @Override
    method update (line 72) | @Override
    method delete (line 95) | @Override
    method findAll (line 117) | @Override
    method findById (line 136) | @Override
    method createSchema (line 160) | public void createSchema() {
    method deleteSchema (line 170) | @Override

FILE: dao-factory/src/main/java/com/iluwatar/daofactory/H2DataSourceFactory.java
  class H2DataSourceFactory (line 31) | public class H2DataSourceFactory extends DAOFactory {
    method createCustomerDAO (line 36) | @Override
    method createDataSource (line 41) | private DataSource createDataSource() {

FILE: dao-factory/src/main/java/com/iluwatar/daofactory/MongoCustomerDAO.java
  class MongoCustomerDAO (line 42) | @Slf4j
    method save (line 48) | @Override
    method update (line 56) | @Override
    method delete (line 64) | @Override
    method findAll (line 74) | @Override
    method findById (line 88) | @Override
    method deleteSchema (line 102) | @Override

FILE: dao-factory/src/main/java/com/iluwatar/daofactory/MongoDataSourceFactory.java
  class MongoDataSourceFactory (line 35) | public class MongoDataSourceFactory extends DAOFactory {
    method createCustomerDAO (line 40) | @Override

FILE: dao-factory/src/test/java/com/iluwatar/daofactory/AppTest.java
  class AppTest (line 37) | class AppTest {
    method setUp (line 43) | @BeforeEach
    method testPerformCreateCustomerWithLongId (line 49) | @Test
    method testPerformUpdateCustomerWithObjectId (line 63) | @Test
    method testPerformDeleteCustomerWithLongId (line 76) | @Test
    method testDeleteSchema (line 89) | @Test

FILE: dao-factory/src/test/java/com/iluwatar/daofactory/DAOFactoryTest.java
  class DAOFactoryTest (line 32) | class DAOFactoryTest {
    method verifyH2CustomerDAOCreation (line 34) | @Test
    method verifyMongoCustomerDAOCreation (line 41) | @Test
    method verifyFlatFileCustomerDAOCreation (line 48) | @Test

FILE: dao-factory/src/test/java/com/iluwatar/daofactory/FlatFileCustomerDAOTest.java
  class FlatFileCustomerDAOTest (line 59) | class FlatFileCustomerDAOTest {
    method setUp (line 70) | @BeforeEach
    class Save (line 93) | @Nested
      method giveFilePathNotExist_whenSaveCustomer_thenCreateNewFileWithCustomer (line 95) | @Test
      method givenEmptyFileExist_whenSaveCustomer_thenAddCustomer (line 108) | @Test
      method givenFileWithCustomerExist_whenSaveCustomer_thenShouldAppendCustomer (line 123) | @Test
      method whenReadFails_thenThrowException (line 137) | @Test
      method whenWriteFails_thenThrowException (line 155) | @Test
    class Update (line 176) | @Nested
      method givenFilePathNotExist_whenUpdateCustomer_thenThrowException (line 178) | @Test
      method whenReadFails_thenThrowException (line 184) | @Test
      method whenWriteFails_thenThrowException (line 202) | @Test
      method givenValidCustomer_whenUpdateCustomer_thenUpdateSucceed (line 227) | @Test
      method givenIdCustomerNotExist_whenUpdateCustomer_thenThrowException (line 256) | @Test
    class Delete (line 279) | @Nested
      method givenFilePathNotExist_whenDeleteCustomer_thenThrowException (line 281) | @Test
      method whenReadFails_thenThrowException (line 287) | @Test
      method whenWriteFails_thenThrowException (line 305) | @Test
      method givenValidId_whenDeleteCustomer_thenDeleteSucceed (line 326) | @Test
      method givenIdNotExist_whenDeleteCustomer_thenThrowException (line 357) | @Test
    class FindAll (line 381) | @Nested
      method givenFileNotExist_thenThrowException (line 383) | @Test
      method whenReadFails_thenThrowException (line 389) | @Test
      method givenEmptyCustomer_thenReturnEmptyList (line 407) | @Test
      method givenCustomerExist_thenReturnCustomerList (line 416) | @Test
    class FindById (line 429) | @Nested
      method givenFilePathNotExist_whenFindById_thenThrowException (line 432) | @Test
      method whenReadFails_thenThrowException (line 438) | @Test
      method givenIdCustomerExist_whenFindById_thenReturnCustomer (line 456) | @Test
      method givenIdCustomerNotExist_whenFindById_thenReturnEmpty (line 468) | @Test
    class DeleteSchema (line 478) | @Nested
      method givenFilePathExist_thenDeleteFile (line 480) | @Test
      method givenFilePathNotExist_thenThrowException (line 490) | @Test

FILE: dao-factory/src/test/java/com/iluwatar/daofactory/H2CustomerDAOTest.java
  class H2CustomerDAOTest (line 48) | class H2CustomerDAOTest {
    method createSchema (line 58) | @BeforeEach
    method deleteSchema (line 66) | @AfterEach
    class ConnectionSucceed (line 75) | @Nested
      method setUp (line 78) | @BeforeEach
      class SaveCustomer (line 92) | @Nested
        method givenValidCustomer_whenSaveCustomer_thenAddSucceed (line 94) | @Test
        method givenIdCustomerDuplicated_whenSaveCustomer_thenThrowException (line 106) | @Test
      class UpdateCustomer (line 115) | @Nested
        method givenValidCustomer_whenUpdateCustomer_thenUpdateSucceed (line 117) | @Test
        method givenIdCustomerNotExist_whenUpdateCustomer_thenThrowException (line 126) | @Test
        method givenNull_whenUpdateCustomer_thenThrowException (line 134) | @Test
      class DeleteCustomer (line 142) | @Nested
        method givenValidId_whenDeleteCustomer_thenDeleteSucceed (line 144) | @Test
        method givenIdCustomerNotExist_whenDeleteCustomer_thenThrowException (line 153) | @Test
        method givenNull_whenDeleteCustomer_thenThrowException (line 164) | @Test
      class FindAllCustomers (line 173) | @Nested
        method givenNonCustomerInDb_whenFindAllCustomer_thenReturnEmptyList (line 175) | @Test
        method givenCustomerExistInDb_whenFindAllCustomer_thenReturnCustomers (line 182) | @Test
      class FindCustomerById (line 191) | @Nested
        method givenValidId_whenFindById_thenReturnCustomer (line 193) | @Test
        method givenIdCustomerNotExist_whenFindById_thenReturnEmpty (line 201) | @Test
        method givenNull_whenFindById_thenThrowException (line 207) | @Test
      class CreateSchema (line 213) | @Nested
        method whenCreateSchema_thenNotThrowException (line 215) | @Test
      class DeleteSchema (line 221) | @Nested
        method whenDeleteSchema_thenNotThrowException (line 223) | @Test
    class ConnectionFailed (line 231) | @Nested
      method setUp (line 235) | @BeforeEach
      method mockedDataSource (line 240) | private DataSource mockedDataSource() throws SQLException {
      method givenValidCustomer_whenSaveCustomer_thenThrowException (line 250) | @Test
      method givenValidCustomer_whenUpdateCustomer_thenThrowException (line 258) | @Test
      method givenValidId_whenDeleteCustomer_thenThrowException (line 266) | @Test
      method whenFindAll_thenThrowException (line 274) | @Test
      method whenFindById_thenThrowException (line 280) | @Test
      method whenCreateSchema_thenThrowException (line 288) | @Test
      method whenDeleteSchema_thenThrowException (line 294) | @Test

FILE: dao-factory/src/test/java/com/iluwatar/daofactory/MongoCustomerDAOTest.java
  class MongoCustomerDAOTest (line 51) | class MongoCustomerDAOTest {
    method givenValidCustomer_whenSaveCustomer_thenSaveSucceed (line 55) | @Test
    method givenValidCustomer_whenUpdateCustomer_thenUpdateSucceed (line 67) | @Test
    method givenValidObjectId_whenDeleteCustomer_thenDeleteSucceed (line 89) | @Test
    method givenIdNotExist_whenDeleteCustomer_thenThrowException (line 103) | @Test
    method findAll_thenReturnAllCustomers (line 117) | @Test
    method givenValidId_whenFindById_thenReturnCustomer (line 132) | @Test
    method givenNotExistingId_whenFindById_thenReturnEmpty (line 147) | @Test
    method whenDeleteSchema_thenDeleteCollection (line 158) | @Test

FILE: data-access-object/src/main/java/com/iluwatar/dao/App.java
  class App (line 45) | @Slf4j
    method main (line 56) | public static void main(final String[] args) throws Exception {
    method deleteSchema (line 67) | private static void deleteSchema(DataSource dataSource) throws SQLExce...
    method createSchema (line 74) | private static void createSchema(DataSource dataSource) throws SQLExce...
    method createDataSource (line 81) | private static DataSource createDataSource() {
    method performOperationsUsing (line 87) | private static void performOperationsUsing(final CustomerDao customerD...
    method addCustomers (line 108) | private static void addCustomers(CustomerDao customerDao) throws Excep...
    method generateSampleCustomers (line 119) | public static List<Customer> generateSampleCustomers() {

FILE: data-access-object/src/main/java/com/iluwatar/dao/CustomException.java
  class CustomException (line 30) | public class CustomException extends Exception {
    method CustomException (line 34) | public CustomException(String message, Throwable cause) {

FILE: data-access-object/src/main/java/com/iluwatar/dao/Customer.java
  class Customer (line 34) | @Setter

FILE: data-access-object/src/main/java/com/iluwatar/dao/CustomerDao.java
  type CustomerDao (line 45) | public interface CustomerDao {
    method getAll (line 54) | Stream<Customer> getAll() throws Exception;
    method getById (line 64) | Optional<Customer> getById(int id) throws Exception;
    method add (line 73) | boolean add(Customer customer) throws Exception;
    method update (line 82) | boolean update(Customer customer) throws Exception;
    method delete (line 91) | boolean delete(Customer customer) throws Exception;

FILE: data-access-object/src/main/java/com/iluwatar/dao/CustomerSchemaSql.java
  class CustomerSchemaSql (line 28) | public final class CustomerSchemaSql {
    method CustomerSchemaSql (line 30) | private CustomerSchemaSql() {}

FILE: data-access-object/src/main/java/com/iluwatar/dao/DbCustomerDao.java
  class DbCustomerDao (line 42) | @Slf4j
    method getAll (line 55) | @Override
    method getConnection (line 84) | private Connection getConnection() throws SQLException {
    method mutedClose (line 88) | private void mutedClose(Connection connection, PreparedStatement state...
    method createCustomer (line 98) | private Customer createCustomer(ResultSet resultSet) throws SQLExcepti...
    method getById (line 104) | @Override
    method add (line 129) | @Override
    method update (line 148) | @Override
    method delete (line 163) | @Override

FILE: data-access-object/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java
  class InMemoryCustomerDao (line 37) | public class InMemoryCustomerDao implements CustomerDao {
    method getAll (line 42) | @Override
    method getById (line 47) | @Override
    method add (line 52) | @Override
    method update (line 62) | @Override
    method delete (line 67) | @Override

FILE: data-access-object/src/test/java/com/iluwatar/dao/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteDaoWithoutException (line 38) | @Test

FILE: data-access-object/src/test/java/com/iluwatar/dao/CustomerTest.java
  class CustomerTest (line 34) | class CustomerTest {
    method setUp (line 41) | @BeforeEach
    method getAndSetId (line 46) | @Test
    method getAndSetFirstname (line 53) | @Test
    method getAndSetLastname (line 60) | @Test
    method notEqualWithDifferentId (line 67) | @Test
    method equalsWithSameObjectValues (line 75) | @Test
    method equalsWithSameObjects (line 82) | @Test
    method testToString (line 88) | @Test

FILE: data-access-object/src/test/java/com/iluwatar/dao/DbCustomerDaoTest.java
  class DbCustomerDaoTest (line 48) | class DbCustomerDaoTest {
    method createSchema (line 59) | @BeforeEach
    class ConnectionSuccess (line 68) | @Nested
      method setUp (line 76) | @BeforeEach
      class NonExistingCustomer (line 88) | @Nested
        method addingShouldResultInSuccess (line 91) | @Test
        method deletionShouldBeFailureAndNotAffectExistingCustomers (line 105) | @Test
        method updationShouldBeFailureAndNotAffectExistingCustomers (line 114) | @Test
        method retrieveShouldReturnNoCustomer (line 126) | @Test
      class ExistingCustomer (line 136) | @Nested
        method addingShouldResultInFailureAndNotAffectExistingCustomers (line 139) | @Test
        method deletionShouldBeSuccessAndCustomerShouldBeNonAccessible (line 149) | @Test
        method updationShouldBeSuccessAndAccessingTheSameCustomerShouldReturnUpdatedInformation (line 158) | @Test
    class ConnectivityIssue (line 179) | @Nested
      method setUp (line 189) | @BeforeEach
      method mockedDatasource (line 194) | private DataSource mockedDatasource() throws SQLException {
      method addingACustomerFailsWithExceptionAsFeedbackToClient (line 203) | @Test
      method deletingACustomerFailsWithExceptionAsFeedbackToTheClient (line 208) | @Test
      method updatingACustomerFailsWithFeedbackToTheClient (line 213) | @Test
      method retrievingACustomerByIdFailsWithExceptionAsFeedbackToClient (line 222) | @Test
      method retrievingAllCustomersFailsWithExceptionAsFeedbackToClient (line 227) | @Test
    method deleteSchema (line 238) | @AfterEach
    method assertCustomerCountIs (line 246) | private void assertCustomerCountIs(int count) throws Exception {
    method getNonExistingCustomerId (line 257) | private int getNonExistingCustomerId() {

FILE: data-access-object/src/test/java/com/iluwatar/dao/InMemoryCustomerDaoTest.java
  class InMemoryCustomerDaoTest (line 37) | class InMemoryCustomerDaoTest {
    method setUp (line 42) | @BeforeEach
    class NonExistingCustomer (line 51) | @Nested
      method addingShouldResultInSuccess (line 54) | @Test
      method deletionShouldBeFailureAndNotAffectExistingCustomers (line 68) | @Test
      method updateShouldBeFailureAndNotAffectExistingCustomers (line 77) | @Test
      method retrieveShouldReturnNoCustomer (line 89) | @Test
    class ExistingCustomer (line 99) | @Nested
      method addingShouldResultInFailureAndNotAffectExistingCustomers (line 102) | @Test
      method deletionShouldBeSuccessAndCustomerShouldBeNonAccessible (line 111) | @Test
      method updationShouldBeSuccessAndAccessingTheSameCustomerShouldReturnUpdatedInformation (line 120) | @Test
      method retriveShouldReturnTheCustomer (line 135) | @Test
    method getNonExistingCustomerId (line 149) | private int getNonExistingCustomerId() {
    method assertCustomerCountIs (line 153) | private void assertCustomerCountIs(int count) throws Exception {

FILE: data-bus/src/main/java/com/iluwatar/databus/AbstractDataType.java
  class AbstractDataType (line 55) | @Getter

FILE: data-bus/src/main/java/com/iluwatar/databus/App.java
  class App (line 58) | class App {
    method main (line 60) | public static void main(String[] args) {

FILE: data-bus/src/main/java/com/iluwatar/databus/DataBus.java
  class DataBus (line 35) | public class DataBus {
    method getInstance (line 41) | public static DataBus getInstance() {
    method subscribe (line 50) | public void subscribe(final Member member) {
    method unsubscribe (line 59) | public void unsubscribe(final Member member) {
    method publish (line 68) | public void publish(final DataType event) {

FILE: data-bus/src/main/java/com/iluwatar/databus/DataType.java
  type DataType (line 52) | public interface DataType {
    method getDataBus (line 59) | DataBus getDataBus();
    method setDataBus (line 66) | void setDataBus(DataBus dataBus);

FILE: data-bus/src/main/java/com/iluwatar/databus/Member.java
  type Member (line 54) | public interface Member extends Consumer<DataType> {
    method accept (line 56) | void accept(DataType event);

FILE: data-bus/src/main/java/com/iluwatar/databus/data/MessageData.java
  class MessageData (line 33) | @Getter
    method of (line 39) | public static DataType of(final String message) {

FILE: data-bus/src/main/java/com/iluwatar/databus/data/StartingData.java
  class StartingData (line 34) | @RequiredArgsConstructor
    method of (line 40) | public static DataType of(final LocalDateTime when) {

FILE: data-bus/src/main/java/com/iluwatar/databus/data/StoppingData.java
  class StoppingData (line 34) | @RequiredArgsConstructor
    method of (line 40) | public static DataType of(final LocalDateTime when) {

FILE: data-bus/src/main/java/com/iluwatar/databus/members/MessageCollectorMember.java
  class MessageCollectorMember (line 35) | @Slf4j
    method MessageCollectorMember (line 42) | public MessageCollectorMember(String name) {
    method accept (line 46) | @Override
    method handleEvent (line 53) | private void handleEvent(MessageData data) {
    method getMessages (line 58) | public List<String> getMessages() {

FILE: data-bus/src/main/java/com/iluwatar/databus/members/StatusMember.java
  class StatusMember (line 38) | @Getter
    method accept (line 49) | @Override
    method handleEvent (line 58) | private void handleEvent(StartingData data) {
    method handleEvent (line 63) | private void handleEvent(StoppingData data) {

FILE: data-bus/src/test/java/com/iluwatar/databus/DataBusTest.java
  class DataBusTest (line 36) | class DataBusTest {
    method setUp (line 42) | @BeforeEach
    method publishedEventIsReceivedBySubscribedMember (line 47) | @Test
    method publishedEventIsNotReceivedByMemberAfterUnsubscribing (line 58) | @Test

FILE: data-bus/src/test/java/com/iluwatar/databus/members/MessageCollectorMemberTest.java
  class MessageCollectorMemberTest (line 36) | class MessageCollectorMemberTest {
    method collectMessageFromMessageData (line 38) | @Test
    method collectIgnoresMessageFromOtherDataTypes (line 50) | @Test

FILE: data-bus/src/test/java/com/iluwatar/databus/members/StatusMemberTest.java
  class StatusMemberTest (line 39) | class StatusMemberTest {
    method statusRecordsTheStartTime (line 41) | @Test
    method statusRecordsTheStopTime (line 53) | @Test
    method statusIgnoresMessageData (line 66) | @Test

FILE: data-locality/src/main/java/com/iluwatar/data/locality/Application.java
  class Application (line 38) | @Slf4j
    method main (line 44) | public static void main(String[] args) {

FILE: data-locality/src/main/java/com/iluwatar/data/locality/game/GameEntity.java
  class GameEntity (line 42) | @Slf4j
    method GameEntity (line 50) | public GameEntity(int numEntities) {
    method start (line 58) | public void start() {
    method update (line 66) | public void update() {

FILE: data-locality/src/main/java/com/iluwatar/data/locality/game/component/AiComponent.java
  class AiComponent (line 30) | @Slf4j
    method update (line 34) | @Override
    method render (line 39) | @Override

FILE: data-locality/src/main/java/com/iluwatar/data/locality/game/component/Component.java
  type Component (line 28) | public interface Component {
    method update (line 30) | void update();
    method render (line 32) | void render();

FILE: data-locality/src/main/java/com/iluwatar/data/locality/game/component/PhysicsComponent.java
  class PhysicsComponent (line 30) | @Slf4j
    method update (line 34) | @Override
    method render (line 39) | @Override

FILE: data-locality/src/main/java/com/iluwatar/data/locality/game/component/RenderComponent.java
  class RenderComponent (line 30) | @Slf4j
    method update (line 33) | @Override
    method render (line 39) | @Override

FILE: data-locality/src/main/java/com/iluwatar/data/locality/game/component/manager/AiComponentManager.java
  class AiComponentManager (line 33) | @Slf4j
    method AiComponentManager (line 42) | public AiComponentManager(int numEntities) {
    method start (line 47) | public void start() {
    method update (line 53) | public void update() {

FILE: data-locality/src/main/java/com/iluwatar/data/locality/game/component/manager/PhysicsComponentManager.java
  class PhysicsComponentManager (line 33) | @Slf4j
    method PhysicsComponentManager (line 42) | public PhysicsComponentManager(int numEntities) {
    method start (line 47) | public void start() {
    method update (line 53) | public void update() {

FILE: data-locality/src/main/java/com/iluwatar/data/locality/game/component/manager/RenderComponentManager.java
  class RenderComponentManager (line 33) | @Slf4j
    method RenderComponentManager (line 42) | public RenderComponentManager(int numEntities) {
    method start (line 47) | public void start() {
    method render (line 53) | public void render() {

FILE: data-locality/src/test/java/com/iluwatar/data/locality/ApplicationTest.java
  class ApplicationTest (line 32) | class ApplicationTest {
    method shouldExecuteGameApplicationWithoutException (line 39) | @Test

FILE: data-mapper/src/main/java/com/iluwatar/datamapper/App.java
  class App (line 39) | @Slf4j
    method main (line 49) | public static void main(final String... args) {
    method App (line 80) | private App() {}

FILE: data-mapper/src/main/java/com/iluwatar/datamapper/DataMapperException.java
  class DataMapperException (line 33) | public final class DataMapperException extends RuntimeException {
    method DataMapperException (line 44) | public DataMapperException(final String message) {

FILE: data-mapper/src/main/java/com/iluwatar/datamapper/Student.java
  class Student (line 36) | @EqualsAndHashCode(onlyExplicitlyIncluded = true)

FILE: data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapper.java
  type StudentDataMapper (line 30) | public interface StudentDataMapper {
    method find (line 32) | Optional<Student> find(int studentId);
    method insert (line 34) | void insert(Student student) throws DataMapperException;
    method update (line 36) | void update(Student student) throws DataMapperException;
    method delete (line 38) | void delete(Student student) throws DataMapperException;

FILE: data-mapper/src/main/java/com/iluwatar/datamapper/StudentDataMapperImpl.java
  class StudentDataMapperImpl (line 33) | @Getter
    method find (line 39) | @Override
    method update (line 44) | @Override
    method insert (line 56) | @Override
    method delete (line 67) | @Override

FILE: data-mapper/src/test/java/com/iluwatar/datamapper/AppTest.java
  class AppTest (line 33) | final class AppTest {
    method shouldExecuteApplicationWithoutException (line 39) | @Test

FILE: data-mapper/src/test/java/com/iluwatar/datamapper/DataMapperTest.java
  class DataMapperTest (line 42) | class DataMapperTest {
    method testFirstDataMapper (line 45) | @Test

FILE: data-mapper/src/test/java/com/iluwatar/datamapper/StudentTest.java
  class StudentTest (line 33) | final class StudentTest {
    method testEquality (line 41) | @Test

FILE: data-transfer-object/src/main/java/com/iluwatar/datatransfer/App.java
  class App (line 52) | @Slf4j
    method main (line 60) | public static void main(String[] args) {
    method printCustomerDetails (line 140) | private static void printCustomerDetails(List<CustomerDto> allCustomer...

FILE: data-transfer-object/src/main/java/com/iluwatar/datatransfer/customer/CustomerResource.java
  method save (line 39) | public void save(CustomerDto customer) {
  method delete (line 48) | public void delete(String customerId) {

FILE: data-transfer-object/src/main/java/com/iluwatar/datatransfer/product/Product.java
  class Product (line 33) | @Data
    method toString (line 44) | @Override

FILE: data-transfer-object/src/main/java/com/iluwatar/datatransfer/product/ProductDto.java
  type ProductDto (line 33) | public enum ProductDto {
    type Request (line 40) | public enum Request {
      class Create (line 44) | public static final class Create implements Name, Price, Cost, Suppl...
        method getName (line 50) | @Override
        method setName (line 55) | public Create setName(String name) {
        method getPrice (line 60) | @Override
        method setPrice (line 65) | public Create setPrice(Double price) {
        method getCost (line 70) | @Override
        method setCost (line 75) | public Create setCost(Double cost) {
        method getSupplier (line 80) | @Override
        method setSupplier (line 85) | public Create setSupplier(String supplier) {
    type Response (line 96) | public enum Response {
      class Public (line 100) | public static final class Public implements Id, Name, Price {
        method getId (line 105) | @Override
        method setId (line 110) | public Public setId(Long id) {
        method getName (line 115) | @Override
        method setName (line 120) | public Public setName(String name) {
        method getPrice (line 125) | @Override
        method setPrice (line 130) | public Public setPrice(Double price) {
        method toString (line 135) | @Override
      class Private (line 142) | public static final class Private implements Id, Name, Price, Cost {
        method getId (line 148) | @Override
        method setId (line 153) | public Private setId(Long id) {
        method getName (line 158) | @Override
        method setName (line 163) | public Private setName(String name) {
        method getPrice (line 168) | @Override
        method setPrice (line 173) | public Private setPrice(Double price) {
        method getCost (line 178) | @Override
        method setCost (line 183) | public Private setCost(Double cost) {
        method toString (line 188) | @Override
    type Id (line 206) | private interface Id {
      method getId (line 212) | Long getId();
    type Name (line 216) | private interface Name {
      method getName (line 222) | String getName();
    type Price (line 226) | private interface Price {
      method getPrice (line 232) | Double getPrice();
    type Cost (line 236) | private interface Cost {
      method getCost (line 243) | Double getCost();
    type Supplier (line 247) | private interface Supplier {
      method getSupplier (line 254) | String getSupplier();

FILE: data-transfer-object/src/main/java/com/iluwatar/datatransfer/product/ProductResource.java
  method getAllProductsForAdmin (line 39) | public List<ProductDto.Response.Private> getAllProductsForAdmin() {
  method getAllProductsForCustomer (line 56) | public List<ProductDto.Response.Public> getAllProductsForCustomer() {
  method save (line 72) | public void save(ProductDto.Request.Create createProductDto) {

FILE: data-transfer-object/src/test/java/com/iluwatar/datatransfer/AppTest.java
  class AppTest (line 31) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 39) | @Test

FILE: data-transfer-object/src/test/java/com/iluwatar/datatransfer/customer/CustomerResourceTest.java
  class CustomerResourceTest (line 35) | class CustomerResourceTest {
    method shouldGetAllCustomers (line 37) | @Test
    method shouldSaveCustomer (line 49) | @Test
    method shouldDeleteCustomer (line 62) | @Test

FILE: decorator/src/main/java/com/iluwatar/decorator/App.java
  class App (line 39) | @Slf4j
    method main (line 47) | public static void main(String[] args) {

FILE: decorator/src/main/java/com/iluwatar/decorator/ClubbedTroll.java
  class ClubbedTroll (line 31) | @Slf4j
    method attack (line 37) | @Override
    method getAttackPower (line 43) | @Override
    method fleeBattle (line 48) | @Override

FILE: decorator/src/main/java/com/iluwatar/decorator/SimpleTroll.java
  class SimpleTroll (line 30) | @Slf4j
    method attack (line 33) | @Override
    method getAttackPower (line 38) | @Override
    method fleeBattle (line 43) | @Override

FILE: decorator/src/main/java/com/iluwatar/decorator/Troll.java
  type Troll (line 28) | public interface Troll {
    method attack (line 30) | void attack();
    method getAttackPower (line 32) | int getAttackPower();
    method fleeBattle (line 34) | void fleeBattle();

FILE: decorator/src/test/java/com/iluwatar/decorator/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 38) | @Test

FILE: decorator/src/test/java/com/iluwatar/decorator/ClubbedTrollTest.java
  class ClubbedTrollTest (line 36) | class ClubbedTrollTest {
    method testClubbedTroll (line 38) | @Test

FILE: decorator/src/test/java/com/iluwatar/decorator/SimpleTrollTest.java
  class SimpleTrollTest (line 40) | class SimpleTrollTest {
    method setUp (line 44) | @BeforeEach
    method tearDown (line 49) | @AfterEach
    method testTrollActions (line 54) | @Test
    class InMemoryAppender (line 68) | private static class InMemoryAppender extends AppenderBase<ILoggingEve...
      method InMemoryAppender (line 72) | InMemoryAppender(Class clazz) {
      method append (line 77) | @Override
      method getLastMessage (line 82) | String getLastMessage() {
      method getLogSize (line 86) | int getLogSize() {

FILE: delegation/src/main/java/com/iluwatar/delegation/simple/App.java
  class App (line 45) | public class App {
    method main (line 54) | public static void main(String[] args) {

FILE: delegation/src/main/java/com/iluwatar/delegation/simple/Printer.java
  type Printer (line 38) | public interface Printer {
    method print (line 47) | void print(final String message);

FILE: delegation/src/main/java/com/iluwatar/delegation/simple/PrinterController.java
  class PrinterController (line 33) | public class PrinterController implements Printer {
    method PrinterController (line 37) | public PrinterController(Printer printer) {
    method print (line 49) | @Override

FILE: delegation/src/main/java/com/iluwatar/delegation/simple/printers/CanonPrinter.java
  class CanonPrinter (line 36) | @Slf4j
    method print (line 40) | @Override

FILE: delegation/src/main/java/com/iluwatar/delegation/simple/printers/EpsonPrinter.java
  class EpsonPrinter (line 36) | @Slf4j
    method print (line 40) | @Override

FILE: delegation/src/main/java/com/iluwatar/delegation/simple/printers/HpPrinter.java
  class HpPrinter (line 36) | @Slf4j
    method print (line 40) | @Override

FILE: delegation/src/test/java/com/iluwatar/delegation/simple/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 38) | @Test

FILE: delegation/src/test/java/com/iluwatar/delegation/simple/DelegateTest.java
  class DelegateTest (line 43) | class DelegateTest {
    method setUp (line 47) | @BeforeEach
    method tearDown (line 52) | @AfterEach
    method testCanonPrinter (line 59) | @Test
    method testHpPrinter (line 67) | @Test
    method testEpsonPrinter (line 75) | @Test
    class InMemoryAppender (line 84) | private static class InMemoryAppender extends AppenderBase<ILoggingEve...
      method InMemoryAppender (line 88) | public InMemoryAppender() {
      method append (line 93) | @Override
      method getLastMessage (line 98) | public String getLastMessage() {
      method getLogSize (line 102) | public int getLogSize() {

FILE: dependency-injection/src/main/java/com/iluwatar/dependency/injection/AdvancedSorceress.java
  class AdvancedSorceress (line 33) | @Setter
    method smoke (line 38) | @Override

FILE: dependency-injection/src/main/java/com/iluwatar/dependency/injection/AdvancedWizard.java
  class AdvancedWizard (line 33) | @RequiredArgsConstructor
    method smoke (line 38) | @Override

FILE: dependency-injection/src/main/java/com/iluwatar/dependency/injection/App.java
  class App (line 49) | public class App {
    method main (line 56) | public static void main(String[] args) {

FILE: dependency-injection/src/main/java/com/iluwatar/dependency/injection/GuiceWizard.java
  class GuiceWizard (line 33) | public class GuiceWizard implements Wizard {
    method GuiceWizard (line 37) | @Inject
    method smoke (line 42) | @Override

FILE: dependency-injection/src/main/java/com/iluwatar/dependency/injection/OldTobyTobacco.java
  class OldTobyTobacco (line 28) | public class OldTobyTobacco extends Tobacco {}

FILE: dependency-injection/src/main/java/com/iluwatar/dependency/injection/RivendellTobacco.java
  class RivendellTobacco (line 28) | public class RivendellTobacco extends Tobacco {}

FILE: dependency-injection/src/main/java/com/iluwatar/dependency/injection/SecondBreakfastTobacco.java
  class SecondBreakfastTobacco (line 28) | public class SecondBreakfastTobacco extends Tobacco {}

FILE: dependency-injection/src/main/java/com/iluwatar/dependency/injection/SimpleWizard.java
  class SimpleWizard (line 31) | public class SimpleWizard implements Wizard {
    method smoke (line 35) | public void smoke() {

FILE: dependency-injection/src/main/java/com/iluwatar/dependency/injection/Tobacco.java
  class Tobacco (line 30) | @Slf4j
    method smoke (line 33) | public void smoke(Wizard wizard) {

FILE: dependency-injection/src/main/java/com/iluwatar/dependency/injection/TobaccoModule.java
  class TobaccoModule (line 30) | public class TobaccoModule extends AbstractModule {
    method configure (line 32) | @Override

FILE: dependency-injection/src/main/java/com/iluwatar/dependency/injection/Wizard.java
  type Wizard (line 28) | public interface Wizard {
    method smoke (line 30) | void smoke();

FILE: dependency-injection/src/test/java/com/iluwatar/dependency/injection/AdvancedSorceressTest.java
  class AdvancedSorceressTest (line 36) | class AdvancedSorceressTest {
    method setUp (line 40) | @BeforeEach
    method tearDown (line 45) | @AfterEach
    method testSmokeEveryThing (line 54) | @Test

FILE: dependency-injection/src/test/java/com/iluwatar/dependency/injection/AdvancedWizardTest.java
  class AdvancedWizardTest (line 36) | class AdvancedWizardTest {
    method setUp (line 40) | @BeforeEach
    method tearDown (line 45) | @AfterEach
    method testSmokeEveryThing (line 54) | @Test

FILE: dependency-injection/src/test/java/com/iluwatar/dependency/injection/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 38) | @Test

FILE: dependency-injection/src/test/java/com/iluwatar/dependency/injection/GuiceWizardTest.java
  class GuiceWizardTest (line 38) | class GuiceWizardTest {
    method setUp (line 42) | @BeforeEach
    method tearDown (line 47) | @AfterEach
    method testSmokeEveryThingThroughConstructor (line 56) | @Test
    method testSmokeEveryThingThroughInjectionFramework (line 79) | @Test

FILE: dependency-injection/src/test/java/com/iluwatar/dependency/injection/SimpleWizardTest.java
  class SimpleWizardTest (line 35) | class SimpleWizardTest {
    method setUp (line 39) | @BeforeEach
    method tearDown (line 44) | @AfterEach
    method testSmoke (line 53) | @Test

FILE: dependency-injection/src/test/java/com/iluwatar/dependency/injection/utils/InMemoryAppender.java
  class InMemoryAppender (line 35) | public class InMemoryAppender extends AppenderBase<ILoggingEvent> {
    method InMemoryAppender (line 39) | public InMemoryAppender(Class clazz) {
    method append (line 44) | @Override
    method getLastMessage (line 49) | public String getLastMessage() {
    method getLogSize (line 53) | public int getLogSize() {

FILE: dirty-flag/src/main/java/com/iluwatar/dirtyflag/App.java
  class App (line 54) | @Slf4j
    method run (line 58) | public void run() {
    method main (line 91) | public static void main(String[] args) {

FILE: dirty-flag/src/main/java/com/iluwatar/dirtyflag/DataFetcher.java
  class DataFetcher (line 36) | @Slf4j
    method DataFetcher (line 42) | public DataFetcher() {
    method isDirty (line 46) | private boolean isDirty(long fileLastModified) {
    method fetch (line 59) | public List<String> fetch() {

FILE: dirty-flag/src/main/java/com/iluwatar/dirtyflag/World.java
  class World (line 31) | public class World {
    method World (line 36) | public World() {
    method fetch (line 46) | public List<String> fetch() {

FILE: dirty-flag/src/test/java/org/dirty/flag/AppTest.java
  class AppTest (line 33) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 39) | @Test

FILE: dirty-flag/src/test/java/org/dirty/flag/DirtyFlagTest.java
  class DirtyFlagTest (line 32) | class DirtyFlagTest {
    method testIsDirty (line 34) | @Test
    method testIsNotDirty (line 41) | @Test

FILE: domain-model/src/main/java/com/iluwatar/domainmodel/App.java
  class App (line 49) | public class App {
    method main (line 71) | public static void main(String[] args) throws Exception {
    method createDataSource (line 149) | private static DataSource createDataSource() {
    method deleteSchema (line 155) | private static void deleteSchema(DataSource dataSource) throws SQLExce...
    method createSchema (line 162) | private static void createSchema(DataSource dataSource) throws SQLExce...

FILE: domain-model/src/main/java/com/iluwatar/domainmodel/Customer.java
  class Customer (line 42) | @Slf4j
    method save (line 54) | public void save() {
    method buyProduct (line 72) | public void buyProduct(Product product) {
    method returnProduct (line 98) | public void returnProduct(Product product) {
    method showPurchases (line 118) | public void showPurchases() {
    method showBalance (line 132) | public void showBalance() {
    method withdraw (line 136) | private void withdraw(Money amount) throws IllegalArgumentException {
    method receiveMoney (line 143) | private void receiveMoney(Money amount) {

FILE: domain-model/src/main/java/com/iluwatar/domainmodel/CustomerDao.java
  type CustomerDao (line 31) | public interface CustomerDao {
    method findByName (line 33) | Optional<Customer> findByName(String name) throws SQLException;
    method update (line 35) | void update(Customer customer) throws SQLException;
    method save (line 37) | void save(Customer customer) throws SQLException;
    method addProduct (line 39) | void addProduct(Product product, Customer customer) throws SQLException;
    method deleteProduct (line 41) | void deleteProduct(Product product, Customer customer) throws SQLExcep...

FILE: domain-model/src/main/java/com/iluwatar/domainmodel/CustomerDaoImpl.java
  class CustomerDaoImpl (line 36) | public class CustomerDaoImpl implements CustomerDao {
    method CustomerDaoImpl (line 40) | public CustomerDaoImpl(final DataSource userDataSource) {
    method findByName (line 44) | @Override
    method update (line 67) | @Override
    method save (line 78) | @Override
    method addProduct (line 89) | @Override
    method deleteProduct (line 100) | @Override

FILE: domain-model/src/main/java/com/iluwatar/domainmodel/Product.java
  class Product (line 46) | @Slf4j
    method save (line 62) | public void save() {
    method getSalePrice (line 76) | public Money getSalePrice() {
    method calculateDiscount (line 80) | private Money calculateDiscount() {

FILE: domain-model/src/main/java/com/iluwatar/domainmodel/ProductDao.java
  type ProductDao (line 31) | public interface ProductDao {
    method findByName (line 33) | Optional<Product> findByName(String name) throws SQLException;
    method save (line 35) | void save(Product product) throws SQLException;
    method update (line 37) | void update(Product product) throws SQLException;

FILE: domain-model/src/main/java/com/iluwatar/domainmodel/ProductDaoImpl.java
  class ProductDaoImpl (line 37) | public class ProductDaoImpl implements ProductDao {
    method ProductDaoImpl (line 41) | public ProductDaoImpl(final DataSource userDataSource) {
    method findByName (line 45) | @Override
    method save (line 69) | @Override
    method update (line 81) | @Override

FILE: domain-model/src/test/java/com/iluwatar/domainmodel/AppTest.java
  class AppTest (line 32) | final class AppTest {
    method shouldExecuteApplicationWithoutException (line 34) | @Test

FILE: domain-model/src/test/java/com/iluwatar/domainmodel/CustomerDaoImplTest.java
  class CustomerDaoImplTest (line 40) | class CustomerDaoImplTest {
    method setUp (line 54) | @BeforeEach
    method tearDown (line 81) | @AfterEach
    method shouldFindCustomerByName (line 86) | @Test
    method shouldSaveCustomer (line 101) | @Test
    method shouldUpdateCustomer (line 117) | @Test
    method shouldAddProductToPurchases (line 136) | @Test
    method shouldDeleteProductFromPurchases (line 154) | @Test

FILE: domain-model/src/test/java/com/iluwatar/domainmodel/CustomerTest.java
  class CustomerTest (line 41) | class CustomerTest {
    method setUp (line 47) | @BeforeEach
    method shouldSaveCustomer (line 67) | @Test
    method shouldAddProductToPurchases (line 82) | @Test
    method shouldRemoveProductFromPurchases (line 99) | @Test

FILE: domain-model/src/test/java/com/iluwatar/domainmodel/ProductDaoImplTest.java
  class ProductDaoImplTest (line 39) | class ProductDaoImplTest {
    method setUp (line 50) | @BeforeEach
    method tearDown (line 70) | @AfterEach
    method shouldFindProductByName (line 75) | @Test
    method shouldSaveProduct (line 91) | @Test
    method shouldUpdateProduct (line 109) | @Test

FILE: domain-model/src/test/java/com/iluwatar/domainmodel/ProductTest.java
  class ProductTest (line 38) | class ProductTest {
    method setUp (line 43) | @BeforeEach
    method shouldSaveProduct (line 56) | @Test
    method shouldGetSalePriceOfProduct (line 71) | @Test

FILE: domain-model/src/test/java/com/iluwatar/domainmodel/TestUtils.java
  class TestUtils (line 31) | public class TestUtils {
    method executeSQL (line 33) | public static void executeSQL(String sql, DataSource dataSource) throw...
    method createSchema (line 40) | public static void createSchema(DataSource dataSource) throws SQLExcep...
    method deleteSchema (line 44) | public static void deleteSchema(DataSource dataSource) throws SQLExcep...
    method createDataSource (line 48) | public static DataSource createDataSource() {

FILE: double-buffer/src/main/java/com/iluwatar/doublebuffer/App.java
  class App (line 38) | @Slf4j
    method main (line 46) | public static void main(String[] args) {
    method printBlackPixelCoordinate (line 60) | private static void printBlackPixelCoordinate(Buffer buffer) {

FILE: double-buffer/src/main/java/com/iluwatar/doublebuffer/Buffer.java
  type Buffer (line 28) | public interface Buffer {
    method clear (line 36) | void clear(int x, int y);
    method draw (line 44) | void draw(int x, int y);
    method clearAll (line 47) | void clearAll();
    method getPixels (line 54) | Pixel[] getPixels();

FILE: double-buffer/src/main/java/com/iluwatar/doublebuffer/FrameBuffer.java
  class FrameBuffer (line 30) | public class FrameBuffer implements Buffer {
    method FrameBuffer (line 37) | public FrameBuffer() {
    method clear (line 41) | @Override
    method draw (line 46) | @Override
    method clearAll (line 51) | @Override
    method getPixels (line 56) | @Override
    method getIndex (line 61) | private int getIndex(int x, int y) {

FILE: double-buffer/src/main/java/com/iluwatar/doublebuffer/Pixel.java
  type Pixel (line 28) | public enum Pixel {

FILE: double-buffer/src/main/java/com/iluwatar/doublebuffer/Scene.java
  class Scene (line 32) | @Slf4j
    method Scene (line 42) | public Scene() {
    method draw (line 55) | public void draw(List<? extends Pair<Integer, Integer>> coordinateList) {
    method getBuffer (line 71) | public Buffer getBuffer() {
    method swap (line 76) | private void swap() {

FILE: double-buffer/src/test/java/com/iluwatar/doublebuffer/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 40) | @Test

FILE: double-buffer/src/test/java/com/iluwatar/doublebuffer/FrameBufferTest.java
  class FrameBufferTest (line 34) | class FrameBufferTest {
    method testClearAll (line 36) | @Test
    method testClear (line 53) | @Test
    method testDraw (line 70) | @Test
    method testGetPixels (line 77) | @Test

FILE: double-buffer/src/test/java/com/iluwatar/doublebuffer/SceneTest.java
  class SceneTest (line 34) | class SceneTest {
    method testGetBuffer (line 36) | @Test
    method testDraw (line 56) | @Test

FILE: double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/App.java
  class App (line 42) | @Slf4j
    method main (line 50) | public static void main(String[] args) {

FILE: double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/Inventory.java
  class Inventory (line 34) | @Slf4j
    method Inventory (line 42) | public Inventory(int inventorySize) {
    method addItem (line 49) | public boolean addItem(Item item) {
    method getItems (line 71) | public final List<Item> getItems() {

FILE: double-checked-locking/src/main/java/com/iluwatar/doublechecked/locking/Item.java
  class Item (line 28) | public class Item {}

FILE: double-checked-locking/src/test/java/com/iluwatar/doublechecked/locking/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 38) | @Test

FILE: double-checked-locking/src/test/java/com/iluwatar/doublechecked/locking/InventoryTest.java
  class InventoryTest (line 47) | class InventoryTest {
    method setUp (line 51) | @BeforeEach
    method tearDown (line 56) | @AfterEach
    method testAddItem (line 76) | @Test
    class InMemoryAppender (line 114) | private static class InMemoryAppender extends AppenderBase<ILoggingEve...
      method InMemoryAppender (line 117) | public InMemoryAppender(Class clazz) {
      method append (line 122) | @Override
      method getLogSize (line 127) | public int getLogSize() {

FILE: double-dispatch/src/main/java/com/iluwatar/doubledispatch/App.java
  class App (line 49) | @Slf4j
    method main (line 57) | public static void main(String[] args) {

FILE: double-dispatch/src/main/java/com/iluwatar/doubledispatch/FlamingAsteroid.java
  class FlamingAsteroid (line 28) | public class FlamingAsteroid extends Meteoroid {
    method FlamingAsteroid (line 30) | public FlamingAsteroid(int left, int top, int right, int bottom) {
    method collision (line 35) | @Override

FILE: double-dispatch/src/main/java/com/iluwatar/doubledispatch/GameObject.java
  class GameObject (line 31) | @Getter
    method GameObject (line 38) | public GameObject(int left, int top, int right, int bottom) {
    method toString (line 42) | @Override
    method collision (line 49) | public abstract void collision(GameObject gameObject);
    method collisionResolve (line 51) | public abstract void collisionResolve(FlamingAsteroid asteroid);
    method collisionResolve (line 53) | public abstract void collisionResolve(Meteoroid meteoroid);
    method collisionResolve (line 55) | public abstract void collisionResolve(SpaceStationMir mir);
    method collisionResolve (line 57) | public abstract void collisionResolve(SpaceStationIss iss);

FILE: double-dispatch/src/main/java/com/iluwatar/doubledispatch/Meteoroid.java
  class Meteoroid (line 31) | @Slf4j
    method Meteoroid (line 34) | public Meteoroid(int left, int top, int right, int bottom) {
    method collision (line 38) | @Override
    method collisionResolve (line 43) | @Override
    method collisionResolve (line 49) | @Override
    method collisionResolve (line 55) | @Override
    method collisionResolve (line 60) | @Override

FILE: double-dispatch/src/main/java/com/iluwatar/doubledispatch/Rectangle.java
  class Rectangle (line 31) | @Getter
    method intersectsWith (line 40) | boolean intersectsWith(Rectangle r) {
    method toString (line 47) | @Override

FILE: double-dispatch/src/main/java/com/iluwatar/doubledispatch/SpaceStationIss.java
  class SpaceStationIss (line 28) | public class SpaceStationIss extends SpaceStationMir {
    method SpaceStationIss (line 30) | public SpaceStationIss(int left, int top, int right, int bottom) {
    method collision (line 34) | @Override

FILE: double-dispatch/src/main/java/com/iluwatar/doubledispatch/SpaceStationMir.java
  class SpaceStationMir (line 31) | @Slf4j
    method SpaceStationMir (line 34) | public SpaceStationMir(int left, int top, int right, int bottom) {
    method collision (line 38) | @Override
    method collisionResolve (line 43) | @Override
    method collisionResolve (line 55) | @Override
    method collisionResolve (line 61) | @Override
    method collisionResolve (line 67) | @Override
    method logHits (line 73) | private void logHits(GameObject gameObject) {

FILE: double-dispatch/src/main/java/com/iluwatar/doubledispatch/constants/AppConstants.java
  class AppConstants (line 28) | public class AppConstants {

FILE: double-dispatch/src/test/java/com/iluwatar/doubledispatch/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 38) | @Test

FILE: double-dispatch/src/test/java/com/iluwatar/doubledispatch/CollisionTest.java
  class CollisionTest (line 36) | public abstract class CollisionTest<O extends GameObject> {
    method getTestedObject (line 43) | abstract O getTestedObject();
    method testCollision (line 55) | void testCollision(
    method testOnFire (line 84) | private void testOnFire(
    method testDamaged (line 113) | private void testDamaged(

FILE: double-dispatch/src/test/java/com/iluwatar/doubledispatch/FlamingAsteroidTest.java
  class FlamingAsteroidTest (line 34) | class FlamingAsteroidTest extends CollisionTest<FlamingAsteroid> {
    method getTestedObject (line 36) | @Override
    method testConstructor (line 42) | @Test
    method testCollideFlamingAsteroid (line 55) | @Test
    method testCollideMeteoroid (line 61) | @Test
    method testCollideSpaceStationIss (line 67) | @Test
    method testCollideSpaceStationMir (line 73) | @Test

FILE: double-dispatch/src/test/java/com/iluwatar/doubledispatch/MeteoroidTest.java
  class MeteoroidTest (line 33) | class MeteoroidTest extends CollisionTest<Meteoroid> {
    method getTestedObject (line 35) | @Override
    method testConstructor (line 41) | @Test
    method testCollideFlamingAsteroid (line 54) | @Test
    method testCollideMeteoroid (line 60) | @Test
    method testCollideSpaceStationIss (line 66) | @Test
    method testCollideSpaceStationMir (line 72) | @Test

FILE: double-dispatch/src/test/java/com/iluwatar/doubledispatch/RectangleTest.java
  class RectangleTest (line 34) | class RectangleTest {
    method testConstructor (line 39) | @Test
    method testToString (line 51) | @Test
    method testIntersection (line 58) | @Test

FILE: double-dispatch/src/test/java/com/iluwatar/doubledispatch/SpaceStationIssTest.java
  class SpaceStationIssTest (line 33) | class SpaceStationIssTest extends CollisionTest<SpaceStationIss> {
    method getTestedObject (line 35) | @Override
    method testConstructor (line 41) | @Test
    method testCollideFlamingAsteroid (line 54) | @Test
    method testCollideMeteoroid (line 60) | @Test
    method testCollideSpaceStationIss (line 66) | @Test
    method testCollideSpaceStationMir (line 72) | @Test

FILE: double-dispatch/src/test/java/com/iluwatar/doubledispatch/SpaceStationMirTest.java
  class SpaceStationMirTest (line 33) | class SpaceStationMirTest extends CollisionTest<SpaceStationMir> {
    method getTestedObject (line 35) | @Override
    method testConstructor (line 41) | @Test
    method testCollideFlamingAsteroid (line 54) | @Test
    method testCollideMeteoroid (line 60) | @Test
    method testCollideSpaceStationIss (line 66) | @Test
    method testCollideSpaceStationMir (line 72) | @Test

FILE: dynamic-proxy/src/main/java/com/iluwatar/dynamicproxy/Album.java
  class Album (line 36) | @Data

FILE: dynamic-proxy/src/main/java/com/iluwatar/dynamicproxy/AlbumInvocationHandler.java
  class AlbumInvocationHandler (line 37) | @Slf4j
    method AlbumInvocationHandler (line 48) | public AlbumInvocationHandler(String baseUrl, HttpClient httpClient) {
    method invoke (line 52) | @Override

FILE: dynamic-proxy/src/main/java/com/iluwatar/dynamicproxy/AlbumService.java
  type AlbumService (line 40) | public interface AlbumService {
    method readAlbums (line 47) | @Get("/albums")
    method readAlbum (line 56) | @Get("/albums/{albumId}")
    method createAlbum (line 65) | @Post("/albums")
    method updateAlbum (line 75) | @Put("/albums/{albumId}")
    method deleteAlbum (line 84) | @Delete("/albums/{albumId}")

FILE: dynamic-proxy/src/main/java/com/iluwatar/dynamicproxy/App.java
  class App (line 42) | @Slf4j
    method App (line 57) | public App(String baseUrl, HttpClient httpClient) {
    method main (line 67) | public static void main(String[] args) {
    method createDynamicProxy (line 77) | public void createDynamicProxy() {
    method callMethods (line 92) | public void callMethods() {

FILE: dynamic-proxy/src/main/java/com/iluwatar/dynamicproxy/tinyrestclient/JsonUtil.java
  class JsonUtil (line 36) | @Slf4j
    method JsonUtil (line 41) | private JsonUtil() {}
    method objectToJson (line 50) | public static <T> String objectToJson(T object) {
    method jsonToObject (line 67) | public static <T> T jsonToObject(String json, Class<T> clazz) {
    method jsonToList (line 84) | public static <T> List<T> jsonToList(String json, Class<T> clazz) {

FILE: dynamic-proxy/src/main/java/com/iluwatar/dynamicproxy/tinyrestclient/TinyRestClient.java
  class TinyRestClient (line 51) | @Slf4j
    method TinyRestClient (line 65) | public TinyRestClient(String baseUrl, HttpClient httpClient) {
    method send (line 79) | public Object send(Method method, Object[] args) throws IOException, I...
    method buildUrl (line 103) | private String buildUrl(Method method, Object[] args, Annotation httpM...
    method buildBodyPublisher (line 121) | private HttpRequest.BodyPublisher buildBodyPublisher(Method method, Ob...
    method getResponse (line 134) | private Object getResponse(Method method, HttpResponse<String> httpRes...
    method getHttpAnnotation (line 153) | private Annotation getHttpAnnotation(Method method) {
    method getAnnotationOf (line 163) | private Annotation getAnnotationOf(Annotation[] annotations, Class<?> ...
    method annotationValue (line 170) | private String annotationValue(Annotation annotation) {

FILE: dynamic-proxy/src/test/java/com/iluwatar/dynamicproxy/AppTest.java
  class AppTest (line 31) | class AppTest {
    method shouldRunAppWithoutExceptions (line 33) | @Test

FILE: event-aggregator/src/main/java/com/iluwatar/event/aggregator/App.java
  class App (line 43) | public class App {
    method main (line 50) | public static void main(String[] args) {

FILE: event-aggregator/src/main/java/com/iluwatar/event/aggregator/Event.java
  type Event (line 30) | @RequiredArgsConstructor
    method toString (line 39) | @Override

FILE: event-aggregator/src/main/java/com/iluwatar/event/aggregator/EventEmitter.java
  class EventEmitter (line 33) | public abstract class EventEmitter {
    method EventEmitter (line 37) | public EventEmitter() {
    method EventEmitter (line 41) | public EventEmitter(EventObserver obs, Event e) {
    method registerObserver (line 52) | public final void registerObserver(EventObserver obs, Event e) {
    method notifyObservers (line 61) | protected void notifyObservers(Event e) {
    method timePasses (line 67) | public abstract void timePasses(Weekday day);

FILE: event-aggregator/src/main/java/com/iluwatar/event/aggregator/EventObserver.java
  type EventObserver (line 28) | public interface EventObserver {
    method onEvent (line 30) | void onEvent(Event e);

FILE: event-aggregator/src/main/java/com/iluwatar/event/aggregator/KingJoffrey.java
  class KingJoffrey (line 30) | @Slf4j
    method onEvent (line 33) | @Override

FILE: event-aggregator/src/main/java/com/iluwatar/event/aggregator/KingsHand.java
  class KingsHand (line 28) | public class KingsHand extends EventEmitter implements EventObserver {
    method KingsHand (line 30) | public KingsHand() {}
    method KingsHand (line 32) | public KingsHand(EventObserver obs, Event e) {
    method onEvent (line 36) | @Override
    method timePasses (line 41) | @Override

FILE: event-aggregator/src/main/java/com/iluwatar/event/aggregator/LordBaelish.java
  class LordBaelish (line 28) | public class LordBaelish extends EventEmitter {
    method LordBaelish (line 30) | public LordBaelish() {}
    method LordBaelish (line 32) | public LordBaelish(EventObserver obs, Event e) {
    method timePasses (line 36) | @Override

FILE: event-aggregator/src/main/java/com/iluwatar/event/aggregator/LordVarys.java
  class LordVarys (line 30) | @Slf4j
    method LordVarys (line 33) | public LordVarys() {}
    method LordVarys (line 35) | public LordVarys(EventObserver obs, Event e) {
    method timePasses (line 39) | @Override
    method onEvent (line 46) | @Override

FILE: event-aggregator/src/main/java/com/iluwatar/event/aggregator/Scout.java
  class Scout (line 28) | public class Scout extends EventEmitter {
    method Scout (line 30) | public Scout() {}
    method Scout (line 32) | public Scout(EventObserver obs, Event e) {
    method timePasses (line 36) | @Override

FILE: event-aggregator/src/main/java/com/iluwatar/event/aggregator/Weekday.java
  type Weekday (line 30) | @RequiredArgsConstructor
    method toString (line 42) | @Override

FILE: event-aggregator/src/test/java/com/iluwatar/event/aggregator/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 38) | @Test

FILE: event-aggregator/src/test/java/com/iluwatar/event/aggregator/EventEmitterTest.java
  class EventEmitterTest (line 43) | abstract class EventEmitterTest<E extends EventEmitter> {
    method EventEmitterTest (line 60) | EventEmitterTest(
    method testAllDays (line 76) | @Test
    method testAllDays (line 91) | private void testAllDays(
    method testAllDaysWithoutDefaultObserver (line 123) | private void testAllDaysWithoutDefaultObserver(final Weekday specialDa...
    method testAllDaysWithDefaultObserver (line 140) | private void testAllDaysWithDefaultObserver(final Weekday specialDay, ...

FILE: event-aggregator/src/test/java/com/iluwatar/event/aggregator/EventTest.java
  class EventTest (line 34) | class EventTest {
    method testToString (line 37) | @Test

FILE: event-aggregator/src/test/java/com/iluwatar/event/aggregator/KingJoffreyTest.java
  class KingJoffreyTest (line 41) | class KingJoffreyTest {
    method setUp (line 45) | @BeforeEach
    method tearDown (line 50) | @AfterEach
    method testOnEvent (line 56) | @Test
    class InMemoryAppender (line 72) | private static class InMemoryAppender extends AppenderBase<ILoggingEve...
      method InMemoryAppender (line 75) | public InMemoryAppender(Class<?> clazz) {
      method append (line 80) | @Override
      method getLastMessage (line 85) | public String getLastMessage() {
      method getLogSize (line 89) | public int getLogSize() {

FILE: event-aggregator/src/test/java/com/iluwatar/event/aggregator/KingsHandTest.java
  class KingsHandTest (line 37) | class KingsHandTest extends EventEmitterTest<KingsHand> {
    method KingsHandTest (line 40) | public KingsHandTest() {
    method testPassThrough (line 49) | @Test

FILE: event-aggregator/src/test/java/com/iluwatar/event/aggregator/LordBaelishTest.java
  class LordBaelishTest (line 28) | class LordBaelishTest extends EventEmitterTest<LordBaelish> {
    method LordBaelishTest (line 31) | public LordBaelishTest() {

FILE: event-aggregator/src/test/java/com/iluwatar/event/aggregator/LordVarysTest.java
  class LordVarysTest (line 28) | class LordVarysTest extends EventEmitterTest<LordVarys> {
    method LordVarysTest (line 31) | public LordVarysTest() {

FILE: event-aggregator/src/test/java/com/iluwatar/event/aggregator/ScoutTest.java
  class ScoutTest (line 28) | class ScoutTest extends EventEmitterTest<Scout> {
    method ScoutTest (line 31) | public ScoutTest() {

FILE: event-aggregator/src/test/java/com/iluwatar/event/aggregator/WeekdayTest.java
  class WeekdayTest (line 34) | class WeekdayTest {
    method testToString (line 36) | @Test

FILE: event-based-asynchronous/src/main/java/com/iluwatar/event/asynchronous/App.java
  class App (line 59) | @Slf4j
    method main (line 71) | public static void main(String[] args) {
    method setUp (line 82) | public void setUp() {
    method run (line 101) | public void run() {
    method quickRun (line 110) | public void quickRun() {
    method runInteractiveMode (line 143) | public void runInteractiveMode() {
    method processOption3 (line 174) | private void processOption3(EventManager eventManager, Scanner s) {
    method processOption2 (line 192) | private void processOption2(EventManager eventManager, Scanner s) {
    method processOption1 (line 203) | private void processOption1(EventManager eventManager, Scanner s) {

FILE: event-based-asynchronous/src/main/java/com/iluwatar/event/asynchronous/AsyncEvent.java
  class AsyncEvent (line 36) | @Slf4j
    method start (line 47) | @Override
    method stop (line 53) | @Override
    method status (line 61) | @Override
    method run (line 70) | @Override
    method addListener (line 88) | public final void addListener(final ThreadCompleteListener listener) {
    method completed (line 92) | private void completed() {

FILE: event-based-asynchronous/src/main/java/com/iluwatar/event/asynchronous/Event.java
  type Event (line 30) | public interface Event {
    method start (line 32) | void start();
    method stop (line 34) | void stop();
    method status (line 36) | void status();

FILE: event-based-asynchronous/src/main/java/com/iluwatar/event/asynchronous/EventDoesNotExistException.java
  class EventDoesNotExistException (line 30) | public class EventDoesNotExistException extends Exception {
    method EventDoesNotExistException (line 34) | public EventDoesNotExistException(String message) {

FILE: event-based-asynchronous/src/main/java/com/iluwatar/event/asynchronous/EventManager.java
  class EventManager (line 41) | public class EventManager implements ThreadCompleteListener {
    method EventManager (line 56) | public EventManager() {
    method create (line 71) | public int create(Duration eventTime)
    method createAsync (line 95) | public int createAsync(Duration eventTime)
    method createEvent (line 100) | private int createEvent(Duration eventTime, boolean isSynchronous)
    method start (line 131) | public void start(int eventId) throws EventDoesNotExistException {
    method cancel (line 145) | public void cancel(int eventId) throws EventDoesNotExistException {
    method status (line 164) | public void status(int eventId) throws EventDoesNotExistException {
    method statusOfAllEvents (line 173) | @SuppressWarnings("rawtypes")
    method shutdown (line 179) | @SuppressWarnings("rawtypes")
    method generateId (line 188) | private int generateId() {
    method completedEventHandler (line 203) | @Override
    method numOfCurrentlyRunningSyncEvent (line 213) | public int numOfCurrentlyRunningSyncEvent() {

FILE: event-based-asynchronous/src/main/java/com/iluwatar/event/asynchronous/InvalidOperationException.java
  class InvalidOperationException (line 30) | public class InvalidOperationException extends Exception {
    method InvalidOperationException (line 34) | public InvalidOperationException(String message) {

FILE: event-based-asynchronous/src/main/java/com/iluwatar/event/asynchronous/LongRunningEventException.java
  class LongRunningEventException (line 30) | public class LongRunningEventException extends Exception {
    method LongRunningEventException (line 34) | public LongRunningEventException(String message) {

FILE: event-based-asynchronous/src/main/java/com/iluwatar/event/asynchronous/MaxNumOfEventsAllowedException.java
  class MaxNumOfEventsAllowedException (line 30) | public class MaxNumOfEventsAllowedException extends Exception {
    method MaxNumOfEventsAllowedException (line 34) | public MaxNumOfEventsAllowedException(String message) {

FILE: event-based-asynchronous/src/main/java/com/iluwatar/event/asynchronous/ThreadCompleteListener.java
  type ThreadCompleteListener (line 28) | public interface ThreadCompleteListener {
    method completedEventHandler (line 29) | void completedEventHandler(final int eventId);

FILE: event-based-asynchronous/src/test/java/com/iluwatar/event/asynchronous/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 38) | @Test

FILE: event-based-asynchronous/src/test/java/com/iluwatar/event/asynchronous/EventAsynchronousTest.java
  class EventAsynchronousTest (line 39) | class EventAsynchronousTest {
    method testAsynchronousEvent (line 41) | @Test
    method testSynchronousEvent (line 57) | @Test
    method testFullSynchronousEvent (line 72) | @Test
    method testUnsuccessfulSynchronousEvent (line 87) | @Test
    method testFullAsynchronousEvent (line 102) | @Test
    method testLongRunningEventException (line 120) | @Test
    method testMaxNumOfEventsAllowedException (line 130) | @Test

FILE: event-driven-architecture/src/main/java/com/iluwatar/eda/App.java
  class App (line 44) | public class App {
    method main (line 54) | public static void main(String[] args) {

FILE: event-driven-architecture/src/main/java/com/iluwatar/eda/event/AbstractEvent.java
  class AbstractEvent (line 41) | public abstract class AbstractEvent implements Event {
    method getType (line 49) | public Class<? extends Event> getType() {

FILE: event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java
  class UserCreatedEvent (line 36) | @RequiredArgsConstructor

FILE: event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java
  class UserUpdatedEvent (line 36) | @RequiredArgsConstructor

FILE: event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Event.java
  type Event (line 31) | public interface Event {
    method getType (line 39) | Class<? extends Event> getType();

FILE: event-driven-architecture/src/main/java/com/iluwatar/eda/framework/EventDispatcher.java
  class EventDispatcher (line 34) | public class EventDispatcher {
    method EventDispatcher (line 38) | public EventDispatcher() {
    method registerHandler (line 48) | public <E extends Event> void registerHandler(Class<E> eventType, Hand...
    method dispatch (line 57) | @SuppressWarnings("unchecked")

FILE: event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Handler.java
  type Handler (line 33) | public interface Handler<E extends Event> {
    method onEvent (line 42) | void onEvent(E event);

FILE: event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java
  class UserCreatedEventHandler (line 32) | @Slf4j
    method onEvent (line 35) | @Override

FILE: event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java
  class UserUpdatedEventHandler (line 32) | @Slf4j
    method onEvent (line 35) | @Override

FILE: event-driven-architecture/src/test/java/com/iluwatar/eda/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 40) | @Test

FILE: event-driven-architecture/src/test/java/com/iluwatar/eda/event/UserCreatedEventTest.java
  class UserCreatedEventTest (line 33) | class UserCreatedEventTest {
    method testGetEventType (line 39) | @Test

FILE: event-driven-architecture/src/test/java/com/iluwatar/eda/framework/EventDispatcherTest.java
  class EventDispatcherTest (line 38) | class EventDispatcherTest {
    method testEventDriverPattern (line 44) | @Test

FILE: event-queue/src/main/java/com/iluwatar/event/queue/App.java
  class App (line 43) | @Slf4j
    method main (line 53) | public static void main(String[] args)

FILE: event-queue/src/main/java/com/iluwatar/event/queue/Audio.java
  class Audio (line 37) | @Slf4j
    method Audio (line 52) | Audio() {}
    method getInstance (line 54) | public static Audio getInstance() {
    method stopService (line 59) | public synchronized void stopService() throws InterruptedException {
    method isServiceRunning (line 72) | public synchronized boolean isServiceRunning() {
    method init (line 80) | public void init() {
    method startThread (line 94) | private synchronized void startThread() {
    method playSound (line 108) | public void playSound(AudioInputStream stream, float volume) {
    method update (line 126) | private void update() {
    method getAudioStream (line 154) | public AudioInputStream getAudioStream(String filePath)

FILE: event-queue/src/main/java/com/iluwatar/event/queue/PlayMessage.java
  class PlayMessage (line 33) | @Getter

FILE: event-queue/src/test/java/com/iluwatar/event/queue/AudioTest.java
  class AudioTest (line 36) | class AudioTest {
    method createAudioInstance (line 40) | @BeforeEach
    method testPlaySound (line 52) | @Test
    method testQueue (line 72) | @Test

FILE: event-sourcing/src/main/java/com/iluwatar/event/sourcing/app/App.java
  class App (line 53) | @Slf4j
    method main (line 67) | public static void main(String[] args) {

FILE: event-sourcing/src/main/java/com/iluwatar/event/sourcing/domain/Account.java
  class Account (line 44) | @Setter
    method copy (line 62) | public Account copy() {
    method toString (line 68) | @Override
    method depositMoney (line 81) | private void depositMoney(BigDecimal money) {
    method withdrawMoney (line 85) | private void withdrawMoney(BigDecimal money) {
    method handleDeposit (line 89) | private void handleDeposit(BigDecimal money, boolean realTime) {
    method handleWithdrawal (line 97) | private void handleWithdrawal(BigDecimal money, boolean realTime) {
    method handleEvent (line 114) | public void handleEvent(MoneyDepositEvent moneyDepositEvent) {
    method handleEvent (line 123) | public void handleEvent(AccountCreateEvent accountCreateEvent) {
    method handleTransferFromEvent (line 135) | public void handleTransferFromEvent(MoneyTransferEvent moneyTransferEv...
    method handleTransferToEvent (line 144) | public void handleTransferToEvent(MoneyTransferEvent moneyTransferEven...

FILE: event-sourcing/src/main/java/com/iluwatar/event/sourcing/event/AccountCreateEvent.java
  class AccountCreateEvent (line 40) | @Getter
    method AccountCreateEvent (line 54) | @JsonCreator
    method process (line 65) | @Override

FILE: event-sourcing/src/main/java/com/iluwatar/event/sourcing/event/DomainEvent.java
  class DomainEvent (line 37) | @Setter
    method process (line 48) | public abstract void process();

FILE: event-sourcing/src/main/java/com/iluwatar/event/sourcing/event/MoneyDepositEvent.java
  class MoneyDepositEvent (line 41) | @Getter
    method MoneyDepositEvent (line 55) | @JsonCreator
    method process (line 66) | @Override

FILE: event-sourcing/src/main/java/com/iluwatar/event/sourcing/event/MoneyTransferEvent.java
  class MoneyTransferEvent (line 41) | @Getter
    method MoneyTransferEvent (line 57) | @JsonCreator
    method process (line 70) | @Override

FILE: event-sourcing/src/main/java/com/iluwatar/event/sourcing/processor/DomainEventProcessor.java
  class DomainEventProcessor (line 35) | public class DomainEventProcessor {
    method DomainEventProcessor (line 39) | public DomainEventProcessor(EventJournal eventJournal) {
    method process (line 48) | public void process(DomainEvent domainEvent) {
    method reset (line 54) | public void reset() {
    method recover (line 59) | public void recover() {

FILE: event-sourcing/src/main/java/com/iluwatar/event/sourcing/processor/EventJournal.java
  class EventJournal (line 32) | @Slf4j
    method write (line 42) | abstract void write(DomainEvent domainEvent);
    method reset (line 45) | void reset() {
    method readNext (line 56) | abstract DomainEvent readNext();

FILE: event-sourcing/src/main/java/com/iluwatar/event/sourcing/processor/JsonFileJournal.java
  class JsonFileJournal (line 51) | public class JsonFileJournal extends EventJournal {
    method JsonFileJournal (line 57) | public JsonFileJournal() {
    method write (line 80) | @Override
    method readNext (line 98) | public DomainEvent readNext() {

FILE: event-sourcing/src/main/java/com/iluwatar/event/sourcing/state/AccountAggregate.java
  class AccountAggregate (line 37) | public class AccountAggregate {
    method AccountAggregate (line 41) | private AccountAggregate() {}
    method putAccount (line 48) | public static void putAccount(Account account) {
    method getAccount (line 58) | public static Account getAccount(int accountNo) {
    method resetState (line 63) | public static void resetState() {

FILE: event-sourcing/src/test/java/IntegrationTest.java
  class IntegrationTest (line 46) | class IntegrationTest {
    method initialize (line 52) | @BeforeEach
    method testStateRecovery (line 58) | @Test

FILE: execute-around/src/main/java/com/iluwatar/execute/around/App.java
  class App (line 41) | @Slf4j
    method main (line 45) | public static void main(String[] args) throws IOException {

FILE: execute-around/src/main/java/com/iluwatar/execute/around/FileWriterAction.java
  type FileWriterAction (line 31) | @FunctionalInterface
    method writeFile (line 34) | void writeFile(FileWriter writer) throws IOException;

FILE: execute-around/src/main/java/com/iluwatar/execute/around/SimpleFileWriter.java
  class SimpleFileWriter (line 35) | @Slf4j
    method SimpleFileWriter (line 39) | public SimpleFileWriter(String filename, FileWriterAction action) thro...

FILE: execute-around/src/test/java/com/iluwatar/execute/around/AppTest.java
  class AppTest (line 35) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 37) | @Test
    method cleanup (line 42) | @BeforeEach

FILE: execute-around/src/test/java/com/iluwatar/execute/around/SimpleFileWriterTest.java
  class SimpleFileWriterTest (line 42) | @EnableRuleMigrationSupport
    method testWriterNotNull (line 47) | @Test
    method testCreatesNonExistentFile (line 53) | @Test
    method testContentsAreWrittenToFile (line 62) | @Test
    method testRipplesIoExceptionOccurredWhileWriting (line 73) | @Test

FILE: extension-objects/src/main/java/App.java
  class App (line 40) | public class App {
    method main (line 47) | public static void main(String[] args) {
    method checkExtensionsForUnit (line 60) | private static void checkExtensionsForUnit(Unit unit) {

FILE: extension-objects/src/main/java/abstractextensions/CommanderExtension.java
  type CommanderExtension (line 28) | public interface CommanderExtension extends UnitExtension {
    method commanderReady (line 30) | void commanderReady();

FILE: extension-objects/src/main/java/abstractextensions/SergeantExtension.java
  type SergeantExtension (line 28) | public interface SergeantExtension extends UnitExtension {
    method sergeantReady (line 30) | void sergeantReady();

FILE: extension-objects/src/main/java/abstractextensions/SoldierExtension.java
  type SoldierExtension (line 28) | public interface SoldierExtension extends UnitExtension {
    method soldierReady (line 29) | void soldierReady();

FILE: extension-objects/src/main/java/abstractextensions/UnitExtension.java
  type UnitExtension (line 28) | public interface UnitExtension {}

FILE: extension-objects/src/main/java/concreteextensions/Commander.java
  method commanderReady (line 35) | @Override

FILE: extension-objects/src/main/java/concreteextensions/Sergeant.java
  method sergeantReady (line 35) | @Override

FILE: extension-objects/src/main/java/concreteextensions/Soldier.java
  method soldierReady (line 35) | @Override

FILE: extension-objects/src/main/java/units/CommanderUnit.java
  class CommanderUnit (line 32) | public class CommanderUnit extends Unit {
    method CommanderUnit (line 34) | public CommanderUnit(String name) {
    method getUnitExtension (line 38) | @Override

FILE: extension-objects/src/main/java/units/SergeantUnit.java
  class SergeantUnit (line 32) | public class SergeantUnit extends Unit {
    method SergeantUnit (line 34) | public SergeantUnit(String name) {
    method getUnitExtension (line 38) | @Override

FILE: extension-objects/src/main/java/units/SoldierUnit.java
  class SoldierUnit (line 32) | public class SoldierUnit extends Unit {
    method SoldierUnit (line 34) | public SoldierUnit(String name) {
    method getUnitExtension (line 38) | @Override

FILE: extension-objects/src/main/java/units/Unit.java
  class Unit (line 32) | @Setter
    method Unit (line 39) | public Unit(String name) {
    method getUnitExtension (line 43) | public UnitExtension getUnitExtension(String extensionName) {

FILE: extension-objects/src/test/java/AppTest.java
  class AppTest (line 30) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 32) | @Test

FILE: extension-objects/src/test/java/concreteextensions/CommanderTest.java
  class CommanderTest (line 39) | class CommanderTest {
    method shouldExecuteCommanderReady (line 41) | @Test

FILE: extension-objects/src/test/java/concreteextensions/SergeantTest.java
  class SergeantTest (line 39) | class SergeantTest {
    method sergeantReady (line 41) | @Test

FILE: extension-objects/src/test/java/concreteextensions/SoldierTest.java
  class SoldierTest (line 39) | class SoldierTest {
    method soldierReady (line 41) | @Test

FILE: extension-objects/src/test/java/units/CommanderUnitTest.java
  class CommanderUnitTest (line 33) | class CommanderUnitTest {
    method getUnitExtension (line 35) | @Test

FILE: extension-objects/src/test/java/units/SergeantUnitTest.java
  class SergeantUnitTest (line 33) | class SergeantUnitTest {
    method getUnitExtension (line 35) | @Test

FILE: extension-objects/src/test/java/units/SoldierUnitTest.java
  class SoldierUnitTest (line 33) | class SoldierUnitTest {
    method getUnitExtension (line 35) | @Test

FILE: extension-objects/src/test/java/units/UnitTest.java
  class UnitTest (line 33) | class UnitTest {
    method testConstGetSet (line 35) | @Test

FILE: facade/src/main/java/com/iluwatar/facade/App.java
  class App (line 38) | public class App {
    method main (line 45) | public static void main(String[] args) {

FILE: facade/src/main/java/com/iluwatar/facade/DwarvenCartOperator.java
  class DwarvenCartOperator (line 30) | @Slf4j
    method work (line 33) | @Override
    method name (line 38) | @Override

FILE: facade/src/main/java/com/iluwatar/facade/DwarvenGoldDigger.java
  class DwarvenGoldDigger (line 30) | @Slf4j
    method work (line 33) | @Override
    method name (line 38) | @Override

FILE: facade/src/main/java/com/iluwatar/facade/DwarvenGoldmineFacade.java
  class DwarvenGoldmineFacade (line 36) | public class DwarvenGoldmineFacade {
    method DwarvenGoldmineFacade (line 41) | public DwarvenGoldmineFacade() {
    method startNewDay (line 46) | public void startNewDay() {
    method digOutGold (line 50) | public void digOutGold() {
    method endDay (line 54) | public void endDay() {
    method makeActions (line 58) | private static void makeActions(

FILE: facade/src/main/java/com/iluwatar/facade/DwarvenMineWorker.java
  class DwarvenMineWorker (line 31) | @Slf4j
    method goToSleep (line 34) | public void goToSleep() {
    method wakeUp (line 38) | public void wakeUp() {
    method goHome (line 42) | public void goHome() {
    method goToMine (line 46) | public void goToMine() {
    method action (line 50) | private void action(Action action) {
    method action (line 62) | public void action(Action... actions) {
    method work (line 66) | public abstract void work();
    method name (line 68) | public abstract String name();
    type Action (line 70) | enum Action {

FILE: facade/src/main/java/com/iluwatar/facade/DwarvenTunnelDigger.java
  class DwarvenTunnelDigger (line 30) | @Slf4j
    method work (line 33) | @Override
    method name (line 38) | @Override

FILE: facade/src/test/java/com/iluwatar/facade/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 34) | @Test

FILE: facade/src/test/java/com/iluwatar/facade/DwarvenGoldmineFacadeTest.java
  class DwarvenGoldmineFacadeTest (line 41) | class DwarvenGoldmineFacadeTest {
    method setUp (line 45) | @BeforeEach
    method tearDown (line 50) | @AfterEach
    method testFullWorkDay (line 62) | @Test
    class InMemoryAppender (line 108) | private static class InMemoryAppender extends AppenderBase<ILoggingEve...
      method InMemoryAppender (line 112) | public InMemoryAppender() {
      method append (line 117) | @Override
      method getLogSize (line 122) | public int getLogSize() {
      method logContains (line 126) | public boolean logContains(String message) {

FILE: factory-kit/src/main/java/com/iluwatar/factorykit/App.java
  class App (line 42) | @Slf4j
    method main (line 50) | public static void main(String[] args) {

FILE: factory-kit/src/main/java/com/iluwatar/factorykit/Axe.java
  class Axe (line 28) | public class Axe implements Weapon {
    method toString (line 29) | @Override

FILE: factory-kit/src/main/java/com/iluwatar/factorykit/Bow.java
  class Bow (line 28) | public class Bow implements Weapon {
    method toString (line 29) | @Override

FILE: factory-kit/src/main/java/com/iluwatar/factorykit/Builder.java
  type Builder (line 30) | public interface Builder {
    method add (line 31) | void add(WeaponType name, Supplier<Weapon> supplier);

FILE: factory-kit/src/main/java/com/iluwatar/factorykit/Spear.java
  class Spear (line 28) | public class Spear implements Weapon {
    method toString (line 29) | @Override

FILE: factory-kit/src/main/java/com/iluwatar/factorykit/Sword.java
  class Sword (line 28) | public class Sword implements Weapon {
    method toString (line 29) | @Override

FILE: factory-kit/src/main/java/com/iluwatar/factorykit/Weapon.java
  type Weapon (line 28) | public interface Weapon {}

FILE: factory-kit/src/main/java/com/iluwatar/factorykit/WeaponFactory.java
  type WeaponFactory (line 38) | public interface WeaponFactory {
    method create (line 46) | Weapon create(WeaponType name);
    method factory (line 54) | static WeaponFactory factory(Consumer<Builder> consumer) {

FILE: factory-kit/src/main/java/com/iluwatar/factorykit/WeaponType.java
  type WeaponType (line 28) | public enum WeaponType {

FILE: factory-kit/src/test/java/com/iluwatar/factorykit/app/AppTest.java
  class AppTest (line 33) | class AppTest {
    method shouldExecuteApplicationWithoutException (line 35) | @Test

FILE: factory-kit/src/test/java/com/iluwatar/factorykit/factorykit/FactoryKitTest.java
  class FactoryKitTest (line 39) | class FactoryKitTest {
    method init (line 43) | @BeforeEach
    method testSpearWeapon (line 58) | @Test
    method testAxeWeapon (line 68) | @Test
    method testWeapon (line 78) | @Test
    method verifyWeapon (line 90) | private void verifyWeapon(Weapon weapon, Class<?> clazz) {

FILE: factory-method/src/main/java/com/iluwatar/factory/method/App.java
  class App (line 41) | @Slf4j
    method main (line 51) | public static void main(String[] args) {

FILE: factory-method/src/main/java/com/iluwatar/factory/method/Blacksmith.java
  type Blacksmith (line 28) | public interface Blacksmith {
    method manufactureWeapon (line 30) | Weapon manufactureWeapon(WeaponType weaponType);

FILE: factory-method/src/main/java/com/iluwatar/factory/method/ElfBlacksmith.java
  class ElfBlacksmith (line 32) | public class ElfBlacksmith implements Blacksmith {
    method manufactureWeapon (line 41) | @Override
    method toString (line 46) | @Override

FILE: factory-method/src/main/java/com/iluwatar/factory/method/ElfWeapon.java
  method toString (line 30) | @Override

FILE: factory-method/src/main/java/com/iluwatar/factory/method/OrcBlacksmith.java
  class OrcBlacksmith (line 32) | public class OrcBlacksmith implements Blacksmith {
    method manufactureWeapon (line 41) | @Override
    method toString (line 46) | @Override

FILE: factory-method/src/main/java/com/iluwatar/factory/method/OrcWeapon.java
  method toString (line 30) | @Override

FILE: factory-method/src/main/java/com/iluwatar/factory/method/Weapon.java
  type Weapon (line 28) | public interface Weapon {
    method weaponType (line 30) | WeaponType weaponType();

FILE: factory-method/src/main/java/com/iluwatar/factory/method/WeaponType.java
  type WeaponType (line 30) | @RequiredArgsConstructor
    method toString (line 39) | @Override

FILE: factory-method/src/test/java/com/iluwatar/factory/method/AppTest.java
  class AppTest (line 32) | class AppTest {
    method shouldExecuteWithoutException (line 34) | @Test

FILE: factory-method/src/test/java/com/iluwatar/factory/method/FactoryMethodTest.java
  class FactoryMethodTest (line 42) | class FactoryMethodTest {
    method testOrcBlacksmithWithSpear (line 48) | @Test
    method testOrcBlacksmithWithAxe (line 59) | @Test
    method testElfBlacksmithWithShortSword (line 70) | @Test
    method testElfBlacksmithWithSpear (line 81) | @Test
    method verifyWeapon (line 96) | private void verifyWeapon(Weapon weapon, WeaponType expectedWeaponType...

FILE: factory/src/main/java/com/iluwatar/factory/App.java
  class App (line 37) | @Slf4j
    method main (line 41) | public static void main(String[] args) {

FILE: factory/src/main/java/com/iluwatar/factory/Coin.java
  type Coin (line 28) | public interface Coin {
    method getDescription (line 30) | String getDescription();

FILE: factory/src/main/java/com/iluwatar/factory/CoinFactory.java
  class CoinFactory (line 28) | public class CoinFactory {
    method getCoin (line 31) | public static Coin getCoin(CoinType type) {

FILE: factory/src/main/java/com/iluwatar/factory/CoinType.java
  type CoinType (line 32) | @RequiredArgsConstructor

FILE: factory/src/main/java/com/iluwatar/factory/CopperCoin.java
  class CopperCoin (line 28) | public class CopperCoin implements Coin {
    method getDescription (line 32) | @Override

FILE: factory/src/main/java/com/iluwatar/factory/GoldCoin.java
  class GoldCoin (line 28) | public class GoldCoin implements Coin {
    method getDescription (line 32) | @Override

FILE: factory/src/test/java/com/iluwatar/factory/AppTest.java
  class AppTest (line 31) | class AppTest {
    method shouldExecuteWithoutExceptions (line 33) | @Test

FILE: factory/src/test/java/com/iluwatar/factory/CoinFactoryTest.java
  class CoinFactoryTest (line 31) | class CoinFactoryTest {
    method shouldReturnGoldCoinInstance (line 33) | @Test

FILE: fanout-fanin/src/main/java/com/iluwatar/fanout/fanin/App.java
  class App (line 42) | @Slf4j
    method main (line 55) | public static void main(String[] args) {

FILE: fanout-fanin/src/main/java/com/iluwatar/fanout/fanin/Consumer.java
  class Consumer (line 34) | @Getter
    method Consumer (line 39) | Consumer(Long init) {
    method add (line 43) | public Long add(final Long num) {

FILE: fanout-fanin/src/main/java/com/iluwatar/fanout/fanin/FanOutFanIn.java
  class FanOutFanIn (line 37) | public class FanOutFanIn {
    method fanOutFanIn (line 46) | public static Long fanOutFanIn(

FILE: fanout-fanin/src/main/java/com/iluwatar/fanout/fanin/SquareNumberRequest.java
  class SquareNumberRequest (line 35) | @Slf4j
    method delayedSquaring (line 47) | public void delayedSquaring(final Consumer consumer) {

FILE: fanout-fanin/src/test/java/com/iluwatar/fanout/fanin/AppTest.java
  class AppTest (line 31) | class AppTest {
    method shouldLaunchApp (line 33) | @Test

FILE: fanout-fanin/src/test/java/com/iluwatar/fanout/fanin/FanOutFanInTest.java
  class FanOutFanInTest (line 32) | class FanOutFanInTest {
    method fanOutFanInTest (line 34) | @Test

FILE: fanout-fanin/src/test/java/com/iluwatar/fanout/fanin/SquareNumberRequestTest.java
  class SquareNumberRequestTest (line 30) | class SquareNumberRequestTest {
    method delayedSquaringTest (line 32) | @Test

FILE: feature-toggle/src/main/java/com/iluwatar/featuretoggle/App.java
  class App (line 48) | @Slf4j
    method main (line 72) | public static void main(String[] args) {

FILE: feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/Service.java
  type Service (line 40) | public interface Service {
    method getWelcomeMessage (line 48) | String getWelcomeMessage(User user);
    method isEnhanced (line 55) | boolean isEnhanced();

FILE: feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersion.java
  class PropertiesFeatureToggleVersion (line 45) | @Getter
    method PropertiesFeatureToggleVersion (line 65) | public PropertiesFeatureToggleVersion(final Properties properties) {
    method getWelcomeMessage (line 89) | @Override

FILE: feature-toggle/src/main/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersion.java
  class TieredFeatureToggleVersion (line 44) | public class TieredFeatureToggleVersion implements Service {
    method getWelcomeMessage (line 58) | @Override
    method isEnhanced (line 74) | @Override

FILE: feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/User.java
  class User (line 33) | @RequiredArgsConstructor
    method toString (line 44) | @Override

FILE: feature-toggle/src/main/java/com/iluwatar/featuretoggle/user/UserGroup.java
  class UserGroup (line 37) | public class UserGroup {
    method addUserToFreeGroup (line 49) | public static void addUserToFreeGroup(final User user) throws IllegalA...
    method addUserToPaidGroup (line 66) | public static void addUserToPaidGroup(final User user) throws IllegalA...
    method isPaid (line 82) | public static boolean isPaid(User user) {

FILE: feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/propertiesversion/PropertiesFeatureToggleVersionTest.java
  class PropertiesFeatureToggleVersionTest (line 37) | class PropertiesFeatureToggleVersionTest {
    method testNullPropertiesPassed (line 39) | @Test
    method testNonBooleanProperty (line 44) | @Test
    method testFeatureTurnedOn (line 55) | @Test
    method testFeatureTurnedOff (line 66) | @Test

FILE: feature-toggle/src/test/java/com/iluwatar/featuretoggle/pattern/tieredversion/TieredFeatureToggleVersionTest.java
  class TieredFeatureToggleVersionTest (line 37) | class TieredFeatureToggleVersionTest {
    method setUp (line 43) | @BeforeEach
    method testGetWelcomeMessageForPaidUser (line 49) | @Test
    method testGetWelcomeMessageForFreeUser (line 56) | @Test
    method testIsEnhancedAlwaysTrueAsTiered (line 63) | @Test

FILE: feature-toggle/src/test/java/com/iluwatar/featuretoggle/user/UserGroupTest.java
  class UserGroupTest (line 34) | class UserGroupTest {
    method testAddUserToFreeGroup (line 36) | @Test
    method testAddUserToPaidGroup (line 43) | @Test
    method testAddUserToPaidWhenOnFree (line 50) | @Test
    method testAddUserToFreeWhenOnPaid (line 57) | @Test

FILE: filterer/src/main/java/com/iluwatar/filterer/App.java
  class App (line 47) | @Slf4j
    method main (line 50) | public static void main(String[] args) {
    method filteringSimpleProbableThreats (line 61) | private static void filteringSimpleProbableThreats() {
    method filteringSimpleThreats (line 89) | private static void filteringSimpleThreats() {

FILE: filterer/src/main/java/com/iluwatar/filterer/domain/Filterer.java
  type Filterer (line 35) | @FunctionalInterface
    method by (line 37) | G by(Predicate<? super E> predicate);

FILE: filterer/src/main/java/com/iluwatar/filterer/threat/ProbabilisticThreatAwareSystem.java
  type ProbabilisticThreatAwareSystem (line 31) | public interface ProbabilisticThreatAwareSystem extends ThreatAwareSystem {
    method threats (line 38) | @Override
    method filtered (line 46) | @Override

FILE: filterer/src/main/java/com/iluwatar/filterer/threat/ProbableThreat.java
  type ProbableThreat (line 28) | public interface ProbableThreat extends Threat {
    method probability (line 34) | double probability();

FILE: filterer/src/main/java/com/iluwatar/filterer/threat/SimpleProbabilisticThreatAwareSystem.java
  class SimpleProbabilisticThreatAwareSystem (line 35) | @ToString
    method systemId (line 44) | @Override
    method threats (line 50) | @Override
    method filtered (line 56) | @Override
    method filteredGroup (line 61) | private ProbabilisticThreatAwareSystem filteredGroup(
    method filteredItems (line 66) | private List<ProbableThreat> filteredItems(final Predicate<? super Pro...

FILE: filterer/src/main/java/com/iluwatar/filterer/threat/SimpleProbableThreat.java
  class SimpleProbableThreat (line 30) | @EqualsAndHashCode(callSuper = false)
    method SimpleProbableThreat (line 35) | public SimpleProbableThreat(
    method probability (line 42) | @Override
    method toString (line 47) | @Override

FILE: filterer/src/main/java/com/iluwatar/filterer/threat/SimpleThreat.java
  class SimpleThreat (line 32) | @ToString
    method name (line 42) | @Override
    method id (line 48) | @Override
    method type (line 54) | @Override

FILE: filterer/src/main/java/com/iluwatar/filterer/threat/SimpleThreatAwareSystem.java
  class SimpleThreatAwareSystem (line 36) | @ToString
    method systemId (line 45) | @Override
    method threats (line 51) | @Override
    method filtered (line 57) | @Override
    method filteredGroup (line 62) | private ThreatAwareSystem filteredGroup(Predicate<? super Threat> pred...
    method filteredItems (line 66) | private List<Threat> filteredIte
Copy disabled (too large) Download .json
Condensed preview — 2957 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (10,298K chars).
[
  {
    "path": ".all-contributorsrc",
    "chars": 98180,
    "preview": "{\n  \"files\": [\n    \"README.md\"\n  ],\n  \"imageSize\": 100,\n  \"commit\": false,\n  \"contributors\": [\n    {\n      \"login\": \"ilu"
  },
  {
    "path": ".editorconfig",
    "chars": 15296,
    "preview": "#\n# This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under LGP"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 19,
    "preview": "github: [iluwatar]\n"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 503,
    "preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
  },
  {
    "path": ".github/workflows/maven-ci.yml",
    "chars": 1499,
    "preview": "name: Java CI\n\non:\n  push:\n    branches: [ master ]\n\njobs:\n\n  build-and-analyze:\n\n    name: Build and Run Sonar analysis"
  },
  {
    "path": ".github/workflows/maven-pr-builder.yml",
    "chars": 1873,
    "preview": "name: Java PR Builder\n\non:\n  pull_request_target:\n    branches: [ master ]\n    types: [ opened, reopened, synchronize ]\n"
  },
  {
    "path": ".github/workflows/presubmit.yml",
    "chars": 758,
    "preview": "name: Presubmit.ai\n\npermissions:\n    contents: read\n    pull-requests: write\n    issues: write\n\non:\n    pull_request_tar"
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 801,
    "preview": "name: 'Comment on stale issues and PRs'\non:\n  schedule:\n    - cron: '30 1 * * *'\n\njobs:\n  stale:\n    runs-on: ubuntu-lat"
  },
  {
    "path": ".gitignore",
    "chars": 961,
    "preview": "################## Eclipse ######################\ntarget\n.metadata\n.settings\n.classpath\n.project\n*.class\ntmp/\n*.tmp\n*.ba"
  },
  {
    "path": ".mvn/wrapper/maven-wrapper.properties",
    "chars": 1019,
    "preview": "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE f"
  },
  {
    "path": "CONTRIBUTING.MD",
    "chars": 237,
    "preview": "The project guidelines can be found in [Java Design Patterns developer wiki](https://github.com/iluwatar/java-design-pat"
  },
  {
    "path": "LICENSE.md",
    "chars": 1215,
    "preview": "The MIT License (MIT)\n\nCopyright � 2014-2024 Ilkka Seppälä\n\nPermission is hereby granted, free of charge, to any person "
  },
  {
    "path": "PULL_REQUEST_TEMPLATE.md",
    "chars": 168,
    "preview": "# Pull Request Template\n\n## What does this PR do?\n\n<!-- Provide a short description of what this pull request does. -->\n"
  },
  {
    "path": "README.md",
    "chars": 146293,
    "preview": "# Design Patterns Implemented in Java\n\n[![Java CI](https://github.com/iluwatar/java-design-patterns/workflows/Java%20CI/"
  },
  {
    "path": "abstract-document/README.md",
    "chars": 11739,
    "preview": "---\ntitle: \"Abstract Document Pattern in Java: Simplifying Data Handling with Flexibility\"\nshortTitle: Abstract Document"
  },
  {
    "path": "abstract-document/etc/abstract-document.ucls",
    "chars": 8097,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<class-diagram version=\"1.2.2\" icons=\"true\" always-add-relationships=\"false\" gene"
  },
  {
    "path": "abstract-document/etc/abstract-document.urm.puml",
    "chars": 1628,
    "preview": "@startuml\npackage com.iluwatar.abstractdocument.domain.enums {\n  enum Property {\n    + MODEL {static}\n    + PARTS {stati"
  },
  {
    "path": "abstract-document/pom.xml",
    "chars": 2865,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    This project is licensed under the MIT license. Module model-view-viewm"
  },
  {
    "path": "abstract-document/src/main/java/com/iluwatar/abstractdocument/AbstractDocument.java",
    "chars": 3480,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-document/src/main/java/com/iluwatar/abstractdocument/App.java",
    "chars": 3242,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-document/src/main/java/com/iluwatar/abstractdocument/Document.java",
    "chars": 2029,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/Car.java",
    "chars": 1589,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/HasModel.java",
    "chars": 1692,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/HasParts.java",
    "chars": 1679,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/HasPrice.java",
    "chars": 1692,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/HasType.java",
    "chars": 1687,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/Part.java",
    "chars": 1591,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-document/src/main/java/com/iluwatar/abstractdocument/domain/enums/Property.java",
    "chars": 1435,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-document/src/test/java/com/iluwatar/abstractdocument/AbstractDocumentTest.java",
    "chars": 4294,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-document/src/test/java/com/iluwatar/abstractdocument/AppTest.java",
    "chars": 1775,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-document/src/test/java/com/iluwatar/abstractdocument/DomainTest.java",
    "chars": 2945,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/.gitignore",
    "chars": 9,
    "preview": "/target/\n"
  },
  {
    "path": "abstract-factory/README.md",
    "chars": 9314,
    "preview": "---\ntitle: \"Abstract Factory Pattern in Java: Mastering Object Creation Elegantly\"\nshortTitle: Abstract Factory\ndescript"
  },
  {
    "path": "abstract-factory/etc/abstract-factory.urm.puml",
    "chars": 2424,
    "preview": "@startuml\npackage com.iluwatar.abstractfactory {\n  class App {\n    - LOGGER : Logger {static}\n    - army : Army\n    - ca"
  },
  {
    "path": "abstract-factory/pom.xml",
    "chars": 2863,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    This project is licensed under the MIT license. Module model-view-viewm"
  },
  {
    "path": "abstract-factory/src/main/java/com/iluwatar/abstractfactory/App.java",
    "chars": 3650,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/src/main/java/com/iluwatar/abstractfactory/Army.java",
    "chars": 1400,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/src/main/java/com/iluwatar/abstractfactory/Castle.java",
    "chars": 1404,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfArmy.java",
    "chars": 1520,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfCastle.java",
    "chars": 1528,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKing.java",
    "chars": 1520,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/src/main/java/com/iluwatar/abstractfactory/ElfKingdomFactory.java",
    "chars": 1649,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/src/main/java/com/iluwatar/abstractfactory/King.java",
    "chars": 1400,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/src/main/java/com/iluwatar/abstractfactory/Kingdom.java",
    "chars": 2018,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/src/main/java/com/iluwatar/abstractfactory/KingdomFactory.java",
    "chars": 1470,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcArmy.java",
    "chars": 1518,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcCastle.java",
    "chars": 1526,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKing.java",
    "chars": 1518,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/src/main/java/com/iluwatar/abstractfactory/OrcKingdomFactory.java",
    "chars": 1649,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/src/test/java/com/iluwatar/abstractfactory/AbstractFactoryTest.java",
    "chars": 4336,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "abstract-factory/src/test/java/com/iluwatar/abstractfactory/AppTest.java",
    "chars": 1658,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "active-object/README.md",
    "chars": 9681,
    "preview": "---\ntitle: \"Active Object Pattern in Java: Achieving Efficient Asynchronous Processing\"\nshortTitle: Active Object\ndescri"
  },
  {
    "path": "active-object/etc/active-object.urm.puml",
    "chars": 476,
    "preview": "@startuml\npackage com.iluwatar.activeobject {\n  abstract class ActiveCreature {\n    - logger : Logger\n    - name : Strin"
  },
  {
    "path": "active-object/pom.xml",
    "chars": 2857,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    This project is licensed under the MIT license. Module model-view-viewm"
  },
  {
    "path": "active-object/src/main/java/com/iluwatar/activeobject/ActiveCreature.java",
    "chars": 3704,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "active-object/src/main/java/com/iluwatar/activeobject/App.java",
    "chars": 2748,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "active-object/src/main/java/com/iluwatar/activeobject/Orc.java",
    "chars": 1468,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "active-object/src/test/java/com/iluwatar/activeobject/ActiveCreatureTest.java",
    "chars": 1679,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "active-object/src/test/java/com/iluwatar/activeobject/AppTest.java",
    "chars": 1564,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "actor-model/README.md",
    "chars": 5165,
    "preview": "---\ntitle: \"Actor Model Pattern in Java: Building Concurrent Systems with Elegance\"\nshortTitle: Actor Model\ndescription:"
  },
  {
    "path": "actor-model/etc/actor-model.urm.puml",
    "chars": 607,
    "preview": "@startuml actor-model\n\ntitle Actor Model - UML Class Diagram\n\nclass ActorSystem {\n  +actorOf(actor: Actor): Actor\n  +shu"
  },
  {
    "path": "actor-model/pom.xml",
    "chars": 4260,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    This project is licensed under the MIT license. Module model-view-viewm"
  },
  {
    "path": "actor-model/src/main/java/com/iluwatar/actormodel/Actor.java",
    "chars": 2389,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "actor-model/src/main/java/com/iluwatar/actormodel/ActorSystem.java",
    "chars": 2283,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "actor-model/src/main/java/com/iluwatar/actormodel/App.java",
    "chars": 3117,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "actor-model/src/main/java/com/iluwatar/actormodel/ExampleActor.java",
    "chars": 2186,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "actor-model/src/main/java/com/iluwatar/actormodel/ExampleActor2.java",
    "chars": 1870,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "actor-model/src/main/java/com/iluwatar/actormodel/Message.java",
    "chars": 1493,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "actor-model/src/test/java/com/iluwatar/actor/ActorModelTest.java",
    "chars": 2383,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "acyclic-visitor/README.md",
    "chars": 7542,
    "preview": "---\ntitle: \"Acyclic Visitor Pattern in Java: Streamlining Object Interactions\"\nshortTitle: Acyclic Visitor\ndescription: "
  },
  {
    "path": "acyclic-visitor/etc/acyclic-visitor.urm.puml",
    "chars": 1185,
    "preview": "@startuml\npackage com.iluwatar.acyclicvisitor {\n  interface AllModemVisitor {\n  }\n  class App {\n    + App()\n    + main(a"
  },
  {
    "path": "acyclic-visitor/pom.xml",
    "chars": 3007,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    This project is licensed under the MIT license. Module model-view-viewm"
  },
  {
    "path": "acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/AllModemVisitor.java",
    "chars": 1548,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/App.java",
    "chars": 2533,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForDosVisitor.java",
    "chars": 1755,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ConfigureForUnixVisitor.java",
    "chars": 1730,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Hayes.java",
    "chars": 1881,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/HayesVisitor.java",
    "chars": 1435,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Modem.java",
    "chars": 1448,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ModemVisitor.java",
    "chars": 1611,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/Zoom.java",
    "chars": 1871,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "acyclic-visitor/src/main/java/com/iluwatar/acyclicvisitor/ZoomVisitor.java",
    "chars": 1431,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/AppTest.java",
    "chars": 1837,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/HayesTest.java",
    "chars": 1910,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "acyclic-visitor/src/test/java/com/iluwatar/acyclicvisitor/ZoomTest.java",
    "chars": 1956,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "adapter/README.md",
    "chars": 6959,
    "preview": "---\ntitle: \"Adapter Pattern in Java: Seamless Integration of Incompatible Systems\"\nshortTitle: Adapter\ndescription: \"Lea"
  },
  {
    "path": "adapter/etc/adapter.urm.puml",
    "chars": 627,
    "preview": "@startuml\npackage com.iluwatar.adapter {\n  class App {\n    - App()\n    + main(args : String[]) {static}\n  }\n  class Capt"
  },
  {
    "path": "adapter/pom.xml",
    "chars": 2988,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    This project is licensed under the MIT license. Module model-view-viewm"
  },
  {
    "path": "adapter/src/main/java/com/iluwatar/adapter/App.java",
    "chars": 2907,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "adapter/src/main/java/com/iluwatar/adapter/Captain.java",
    "chars": 1658,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "adapter/src/main/java/com/iluwatar/adapter/FishingBoat.java",
    "chars": 1567,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "adapter/src/main/java/com/iluwatar/adapter/FishingBoatAdapter.java",
    "chars": 1640,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "adapter/src/main/java/com/iluwatar/adapter/RowingBoat.java",
    "chars": 1450,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "adapter/src/main/java/com/iluwatar/adapter/package-info.java",
    "chars": 1314,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "adapter/src/test/java/com/iluwatar/adapter/AdapterPatternTest.java",
    "chars": 2785,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "adapter/src/test/java/com/iluwatar/adapter/AppTest.java",
    "chars": 1707,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "ambassador/README.md",
    "chars": 11582,
    "preview": "---\ntitle: \"Ambassador Pattern in Java: Simplifying Remote Resource Management\"\nshortTitle: Ambassador\ndescription: \"Exp"
  },
  {
    "path": "ambassador/etc/ambassador.urm.puml",
    "chars": 1331,
    "preview": "@startuml\npackage com.iluwatar.ambassador.util {\n  interface RandomProvider {\n    + random() : double {abstract}\n  }\n}\np"
  },
  {
    "path": "ambassador/pom.xml",
    "chars": 2706,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    This project is licensed under the MIT license. Module model-view-viewm"
  },
  {
    "path": "ambassador/src/main/java/com/iluwatar/ambassador/App.java",
    "chars": 2505,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "ambassador/src/main/java/com/iluwatar/ambassador/Client.java",
    "chars": 1650,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "ambassador/src/main/java/com/iluwatar/ambassador/RemoteService.java",
    "chars": 2941,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "ambassador/src/main/java/com/iluwatar/ambassador/RemoteServiceInterface.java",
    "chars": 1476,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "ambassador/src/main/java/com/iluwatar/ambassador/RemoteServiceStatus.java",
    "chars": 1859,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "ambassador/src/main/java/com/iluwatar/ambassador/ServiceAmbassador.java",
    "chars": 2995,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "ambassador/src/main/java/com/iluwatar/ambassador/util/RandomProvider.java",
    "chars": 1443,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "ambassador/src/test/java/com/iluwatar/ambassador/AppTest.java",
    "chars": 1790,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "ambassador/src/test/java/com/iluwatar/ambassador/ClientTest.java",
    "chars": 1681,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "ambassador/src/test/java/com/iluwatar/ambassador/RemoteServiceTest.java",
    "chars": 2240,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "ambassador/src/test/java/com/iluwatar/ambassador/ServiceAmbassadorTest.java",
    "chars": 1692,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "anti-corruption-layer/README.md",
    "chars": 8845,
    "preview": "---\ntitle: \"Anti-Corruption Layer Pattern in Java: Ensuring System Integrity Amidst Legacy Systems\"\nshortTitle: Anti-Cor"
  },
  {
    "path": "anti-corruption-layer/etc/anti-corruption-layer.urm.puml",
    "chars": 524,
    "preview": "@startuml\npackage com.iluwatar.corruption {\nclass LegacyShop {\n    private Store store;\n    private AntiCorruptionLayer "
  },
  {
    "path": "anti-corruption-layer/pom.xml",
    "chars": 2816,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    This project is licensed under the MIT license. Module model-view-viewm"
  },
  {
    "path": "anti-corruption-layer/src/main/java/com/iluwatar/corruption/App.java",
    "chars": 1769,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "anti-corruption-layer/src/main/java/com/iluwatar/corruption/package-info.java",
    "chars": 2884,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/AntiCorruptionLayer.java",
    "chars": 2710,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/DataStore.java",
    "chars": 1849,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/ShopException.java",
    "chars": 2063,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/legacy/LegacyOrder.java",
    "chars": 1678,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/legacy/LegacyShop.java",
    "chars": 2183,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/legacy/LegacyStore.java",
    "chars": 1626,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/modern/Customer.java",
    "chars": 1526,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/modern/ModernOrder.java",
    "chars": 1606,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/modern/ModernShop.java",
    "chars": 2655,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/modern/ModernStore.java",
    "chars": 1561,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "anti-corruption-layer/src/main/java/com/iluwatar/corruption/system/modern/Shipment.java",
    "chars": 1628,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "anti-corruption-layer/src/main/resources/application.properties",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "anti-corruption-layer/src/test/java/com/iluwatar/corruption/system/AntiCorruptionLayerTest.java",
    "chars": 4608,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "arrange-act-assert/README.md",
    "chars": 5658,
    "preview": "---\ntitle: \"Arrange/Act/Assert Pattern in Java: Enhance Testing Clarity and Simplicity\"\nshortTitle: Arrange/Act/Assert\nd"
  },
  {
    "path": "arrange-act-assert/etc/arrange-act-assert.urm.puml",
    "chars": 207,
    "preview": "@startuml\npackage com.iluwatar.arrangeactassert {\n  class Cash {\n    - amount : int\n    ~ Cash(amount : int)\n    ~ count"
  },
  {
    "path": "arrange-act-assert/pom.xml",
    "chars": 1975,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    This project is licensed under the MIT license. Module model-view-viewm"
  },
  {
    "path": "arrange-act-assert/src/main/java/com/iluwatar/arrangeactassert/Cash.java",
    "chars": 1862,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "arrange-act-assert/src/test/java/com/iluwatar/arrangeactassert/CashAAATest.java",
    "chars": 3597,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "arrange-act-assert/src/test/java/com/iluwatar/arrangeactassert/CashAntiAAATest.java",
    "chars": 2439,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "async-method-invocation/README.md",
    "chars": 11936,
    "preview": "---\ntitle: \"Async Method Invocation Pattern in Java: Elevate Performance with Asynchronous Programming\"\nshortTitle: Asyn"
  },
  {
    "path": "async-method-invocation/etc/async-method-invocation.urm.puml",
    "chars": 1706,
    "preview": "@startuml\npackage com.iluwatar.async.method.invocation {\n  class App {\n    - LOGGER : Logger {static}\n    + App()\n    - "
  },
  {
    "path": "async-method-invocation/pom.xml",
    "chars": 2874,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    This project is licensed under the MIT license. Module model-view-viewm"
  },
  {
    "path": "async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/App.java",
    "chars": 5737,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncCallback.java",
    "chars": 1805,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncExecutor.java",
    "chars": 2610,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/AsyncResult.java",
    "chars": 2191,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "async-method-invocation/src/main/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutor.java",
    "chars": 4809,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "async-method-invocation/src/test/java/com/iluwatar/async/method/invocation/AppTest.java",
    "chars": 1803,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "async-method-invocation/src/test/java/com/iluwatar/async/method/invocation/ThreadAsyncExecutorTest.java",
    "chars": 12787,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "backpressure/README.md",
    "chars": 7460,
    "preview": "---\ntitle: \"Backpressure Pattern in Java: Gracefully regulate producer-to-consumer data flow to prevent overload.\"\nshort"
  },
  {
    "path": "backpressure/pom.xml",
    "chars": 3263,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    This project is licensed under the MIT license. Module model-view-viewm"
  },
  {
    "path": "backpressure/src/main/java/com/iluwatar/backpressure/App.java",
    "chars": 3236,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "backpressure/src/main/java/com/iluwatar/backpressure/Publisher.java",
    "chars": 1934,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "backpressure/src/main/java/com/iluwatar/backpressure/Subscriber.java",
    "chars": 2293,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "backpressure/src/test/java/com/iluwatar/backpressure/AppTest.java",
    "chars": 1571,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "backpressure/src/test/java/com/iluwatar/backpressure/LoggerExtension.java",
    "chars": 2470,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "backpressure/src/test/java/com/iluwatar/backpressure/PublisherTest.java",
    "chars": 1948,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "backpressure/src/test/java/com/iluwatar/backpressure/SubscriberTest.java",
    "chars": 2336,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "balking/README.md",
    "chars": 8424,
    "preview": "---\ntitle: \"Balking Pattern in Java: Smart Control Over Java Execution\"\nshortTitle: Balking\ndescription: \"Learn the Balk"
  },
  {
    "path": "balking/etc/balking.ucls",
    "chars": 3107,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<class-diagram version=\"1.1.13\" icons=\"true\" automaticImage=\"PNG\" always-add-rela"
  },
  {
    "path": "balking/etc/balking.urm.puml",
    "chars": 848,
    "preview": "@startuml\npackage com.iluwatar.balking {\n  class App {\n    - LOGGER : Logger {static}\n    + App()\n    + main(args : Stri"
  },
  {
    "path": "balking/pom.xml",
    "chars": 2700,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    This project is licensed under the MIT license. Module model-view-viewm"
  },
  {
    "path": "balking/src/main/java/com/iluwatar/balking/App.java",
    "chars": 2807,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "balking/src/main/java/com/iluwatar/balking/DelayProvider.java",
    "chars": 1529,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "balking/src/main/java/com/iluwatar/balking/WashingMachine.java",
    "chars": 3222,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "balking/src/main/java/com/iluwatar/balking/WashingMachineState.java",
    "chars": 1511,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "balking/src/test/java/com/iluwatar/balking/AppTest.java",
    "chars": 1827,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "balking/src/test/java/com/iluwatar/balking/WashingMachineTest.java",
    "chars": 2538,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bloc/README.md",
    "chars": 8244,
    "preview": "---\ntitle: \"Bloc Pattern in Java: State Management Simplified\"\nshortTitle: Bloc\ndescription: \"Learn how the Bloc pattern"
  },
  {
    "path": "bloc/etc/bloc.puml",
    "chars": 955,
    "preview": "@startuml\npackage com.iluwatar.bloc {\n\n    class State {\n        - value : int\n        + State(value : int)\n        + ge"
  },
  {
    "path": "bloc/etc/bloc.urm.puml",
    "chars": 792,
    "preview": "@startuml\npackage com.iluwatar.bloc {\n  class Bloc {\n    - currentState : State\n    - listeners : List<StateListener<Sta"
  },
  {
    "path": "bloc/pom.xml",
    "chars": 3113,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    This project is licensed under the MIT license. Module model-view-viewm"
  },
  {
    "path": "bloc/src/main/java/com/iluwatar/bloc/Bloc.java",
    "chars": 3362,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bloc/src/main/java/com/iluwatar/bloc/BlocUi.java",
    "chars": 3451,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bloc/src/main/java/com/iluwatar/bloc/ListenerManager.java",
    "chars": 2056,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bloc/src/main/java/com/iluwatar/bloc/Main.java",
    "chars": 2603,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bloc/src/main/java/com/iluwatar/bloc/State.java",
    "chars": 1497,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bloc/src/main/java/com/iluwatar/bloc/StateListener.java",
    "chars": 1775,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bloc/src/test/java/com/iluwatar/bloc/BlocTest.java",
    "chars": 3002,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bloc/src/test/java/com/iluwatar/bloc/BlocUiTest.java",
    "chars": 4236,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bridge/README.md",
    "chars": 9890,
    "preview": "---\ntitle: \"Bridge Pattern in Java: Decouple Abstraction from Implementation\"\nshortTitle: Bridge\ndescription: \"Learn abo"
  },
  {
    "path": "bridge/etc/bridge.urm.puml",
    "chars": 1308,
    "preview": "@startuml\npackage com.iluwatar.bridge {\n  class App {\n    - LOGGER : Logger {static}\n    + App()\n    + main(args : Strin"
  },
  {
    "path": "bridge/pom.xml",
    "chars": 2840,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    This project is licensed under the MIT license. Module model-view-viewm"
  },
  {
    "path": "bridge/src/main/java/com/iluwatar/bridge/App.java",
    "chars": 2572,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bridge/src/main/java/com/iluwatar/bridge/Enchantment.java",
    "chars": 1430,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bridge/src/main/java/com/iluwatar/bridge/FlyingEnchantment.java",
    "chars": 1765,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bridge/src/main/java/com/iluwatar/bridge/Hammer.java",
    "chars": 1931,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bridge/src/main/java/com/iluwatar/bridge/SoulEatingEnchantment.java",
    "chars": 1735,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bridge/src/main/java/com/iluwatar/bridge/Sword.java",
    "chars": 1926,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bridge/src/main/java/com/iluwatar/bridge/Weapon.java",
    "chars": 1443,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bridge/src/test/java/com/iluwatar/bridge/AppTest.java",
    "chars": 1785,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bridge/src/test/java/com/iluwatar/bridge/HammerTest.java",
    "chars": 1786,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bridge/src/test/java/com/iluwatar/bridge/SwordTest.java",
    "chars": 1780,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "bridge/src/test/java/com/iluwatar/bridge/WeaponTest.java",
    "chars": 2196,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "builder/.gitignore",
    "chars": 9,
    "preview": "/target/\n"
  },
  {
    "path": "builder/README.md",
    "chars": 9534,
    "preview": "---\ntitle: \"Builder Pattern in Java: Crafting Custom Objects with Clarity\"\nshortTitle: Builder\ndescription: \"Discover th"
  },
  {
    "path": "builder/etc/builder.urm.puml",
    "chars": 2526,
    "preview": "@startuml\npackage com.iluwatar.builder {\n  class App {\n    - LOGGER : Logger {static}\n    + App()\n    + main(args : Stri"
  },
  {
    "path": "builder/pom.xml",
    "chars": 2700,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    This project is licensed under the MIT license. Module model-view-viewm"
  },
  {
    "path": "builder/src/main/java/com/iluwatar/builder/App.java",
    "chars": 3728,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "builder/src/main/java/com/iluwatar/builder/Armor.java",
    "chars": 1613,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "builder/src/main/java/com/iluwatar/builder/HairColor.java",
    "chars": 1493,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "builder/src/main/java/com/iluwatar/builder/HairType.java",
    "chars": 1633,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "builder/src/main/java/com/iluwatar/builder/Hero.java",
    "chars": 3393,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "builder/src/main/java/com/iluwatar/builder/Profession.java",
    "chars": 1490,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  },
  {
    "path": "builder/src/main/java/com/iluwatar/builder/Weapon.java",
    "chars": 1490,
    "preview": "/*\n * This project is licensed under the MIT license. Module model-view-viewmodel is using ZK framework licensed under L"
  }
]

// ... and 2757 more files (download for full content)

About this extraction

This page contains the full source code of the iluwatar/java-design-patterns GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2957 files (9.3 MB), approximately 2.6M tokens, and a symbol index with 6874 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!