# manuelmaslonka/validation-utils architecture

> Architecture diagram of the GitHub repository manuelmaslonka/validation-utils, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/manuelmaslonka/validation-utils
- Repository: https://github.com/manuelmaslonka/validation-utils

## Overview

Validation Utils is a dependency-light Java library for composing reusable validation rules and turning failures into application-specific exceptions. The main workflow is: an application configures a provider and category, creates an executor for input, adds reusable steps, and validates; the executor applies the selected strategy, gathers results, and throws an exception on failure. The library also provides required, forbidden, and exact-shape property checks. Some core implementations are not sampled, so their internal wiring is shown only where documented or supported by the excerpts.

Main entry points: [`src/main/java/com/maslonka/validation/core/ValidationExecutor.java`](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationExecutor.java) (Validation executor), [`src/main/java/com/maslonka/validation/core/ValidationStep.java`](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationStep.java) (Validation step), [`src/main/java/com/maslonka/validation/core/ValidationExecutorProvider.java`](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationExecutorProvider.java) (Executor provider), [`src/main/java/com/maslonka/validation/steps/RequiredParamsValidationStepCreator.java`](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/steps/RequiredParamsValidationStepCreator.java) (Required fields)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_configuration["Configuration"]
  node_provider["Executor provider"]
  node_category["Failure category"]
  node_exception_factory["Exception factory"]
end

subgraph group_rules["Validation rules"]
  node_step["Validation step"]
  node_required["Required fields"]
  node_forbidden["Forbidden fields"]
  node_strict["Exact field shape"]
  node_value_utils["Empty-value checks"]
end

subgraph group_execution["Execution and results"]
  node_executor["Validation executor"]
  node_strategy["Execution strategy"]
  node_collect_all["Collect all"]
  node_fail_fast["Fail fast"]
  node_result["Validation result"]
  node_status["Result status"]
end

node_application(("Java application"))

node_application -->|"configures"| node_provider
node_provider -->|"uses defaults"| node_category
node_provider -->|"registers factories"| node_exception_factory
node_provider -->|"creates"| node_executor
node_application -->|"adds steps"| node_executor
node_executor -->|"validates with"| node_strategy
node_strategy -->|"dispatches"| node_collect_all
node_strategy -->|"dispatches"| node_fail_fast
node_executor -->|"evaluates"| node_step
node_collect_all -->|"evaluates steps"| node_step
node_fail_fast -->|"evaluates steps"| node_step
node_required -->|"creates"| node_step
node_forbidden -->|"creates"| node_step
node_strict -->|"combines"| node_required
node_strict -->|"combines"| node_forbidden
node_required -->|"checks emptiness"| node_value_utils
node_forbidden -->|"checks emptiness"| node_value_utils
node_step -->|"returns"| node_result
node_executor -->|"aggregates"| node_result
node_result -->|"records status"| node_status
node_executor -->|"creates failure exception"| node_exception_factory

click node_provider "https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationExecutorProvider.java"
click node_category "https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationCategory.java"
click node_exception_factory "https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationExceptionFactory.java"
click node_executor "https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationExecutor.java"
click node_strategy "https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationExecutionStrategy.java"
click node_collect_all "https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/CollectAllValidationExecutionStrategy.java"
click node_fail_fast "https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/FailFastValidationExecutionStrategy.java"
click node_step "https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationStep.java"
click node_required "https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/steps/RequiredParamsValidationStepCreator.java"
click node_forbidden "https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/steps/ForbiddenParamsValidationStepCreator.java"
click node_strict "https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/steps/RequiredStrictParamsValidationStepCreator.java"
click node_value_utils "https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/steps/ValidationValueUtils.java"
click node_result "https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationResult.java"
click node_status "https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationStatus.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_provider,node_category,node_exception_factory toneBlue
class node_step,node_required,node_forbidden,node_strict,node_value_utils toneAmber
class node_executor,node_strategy,node_collect_all,node_fail_fast,node_result,node_status toneMint
class node_application toneIndigo
```

## Components

### Configuration

- [Executor provider](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationExecutorProvider.java): `src/main/java/com/maslonka/validation/core/ValidationExecutorProvider.java`
- [Failure category](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationCategory.java): `src/main/java/com/maslonka/validation/core/ValidationCategory.java`
- [Exception factory](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationExceptionFactory.java): `src/main/java/com/maslonka/validation/core/ValidationExceptionFactory.java`

### Validation rules

- [Validation step](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationStep.java): `src/main/java/com/maslonka/validation/core/ValidationStep.java`
- [Required fields](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/steps/RequiredParamsValidationStepCreator.java): `src/main/java/com/maslonka/validation/steps/RequiredParamsValidationStepCreator.java`
- [Forbidden fields](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/steps/ForbiddenParamsValidationStepCreator.java): `src/main/java/com/maslonka/validation/steps/ForbiddenParamsValidationStepCreator.java`
- [Exact field shape](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/steps/RequiredStrictParamsValidationStepCreator.java): `src/main/java/com/maslonka/validation/steps/RequiredStrictParamsValidationStepCreator.java`
- [Empty-value checks](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/steps/ValidationValueUtils.java): `src/main/java/com/maslonka/validation/steps/ValidationValueUtils.java`

### Execution and results

- [Validation executor](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationExecutor.java): `src/main/java/com/maslonka/validation/core/ValidationExecutor.java`
- [Execution strategy](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationExecutionStrategy.java): `src/main/java/com/maslonka/validation/core/ValidationExecutionStrategy.java`
- [Collect all](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/CollectAllValidationExecutionStrategy.java): `src/main/java/com/maslonka/validation/core/CollectAllValidationExecutionStrategy.java`
- [Fail fast](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/FailFastValidationExecutionStrategy.java): `src/main/java/com/maslonka/validation/core/FailFastValidationExecutionStrategy.java`
- [Validation result](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationResult.java): `src/main/java/com/maslonka/validation/core/ValidationResult.java`
- [Result status](https://github.com/manuelmaslonka/validation-utils/blob/master/src/main/java/com/maslonka/validation/core/ValidationStatus.java): `src/main/java/com/maslonka/validation/core/ValidationStatus.java`

### Other components

- **Java application**

## Connections

- Java application → Executor provider: configures
- Executor provider → Failure category: uses defaults
- Executor provider → Exception factory: registers factories
- Executor provider → Validation executor: creates
- Java application → Validation executor: adds steps
- Validation executor → Execution strategy: validates with
- Execution strategy → Collect all: dispatches
- Execution strategy → Fail fast: dispatches
- Validation executor → Validation step: evaluates
- Collect all → Validation step: evaluates steps
- Fail fast → Validation step: evaluates steps
- Required fields → Validation step: creates
- Forbidden fields → Validation step: creates
- Exact field shape → Required fields: combines
- Exact field shape → Forbidden fields: combines
- Required fields → Empty-value checks: checks emptiness
- Forbidden fields → Empty-value checks: checks emptiness
- Validation step → Validation result: returns
- Validation executor → Validation result: aggregates
- Validation result → Result status: records status
- Validation executor → Exception factory: creates failure exception
