Showing preview only (909K chars total). Download the full file or copy to clipboard to get everything.
Repository: Devskiller/jfairy
Branch: master
Commit: 3123ff418b55
Files: 219
Total size: 807.4 KB
Directory structure:
gitextract_g7twkl10/
├── .editorconfig
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── feature_request.yml
│ │ └── new_locale.yml
│ └── workflows/
│ ├── build.yml
│ └── release.yml
├── .gitignore
├── .mvn/
│ └── wrapper/
│ └── maven-wrapper.properties
├── .sdkmanrc
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── devskiller/
│ │ └── jfairy/
│ │ ├── Bootstrap.java
│ │ ├── Fairy.java
│ │ ├── FairyFactory.java
│ │ ├── FairyFactoryImpl.java
│ │ ├── LocaleSpecificProviders.java
│ │ ├── LocaleSpecificProvidersFactory.java
│ │ ├── UniqueEnforcer.java
│ │ ├── UniqueFairy.java
│ │ ├── UniqueGenerationException.java
│ │ ├── data/
│ │ │ ├── DataMaster.java
│ │ │ └── MapBasedDataMaster.java
│ │ ├── package-info.java
│ │ └── producer/
│ │ ├── BaseProducer.java
│ │ ├── DateProducer.java
│ │ ├── RandomGenerator.java
│ │ ├── TimeProvider.java
│ │ ├── VATIdentificationNumberProvider.java
│ │ ├── company/
│ │ │ ├── Company.java
│ │ │ ├── CompanyFactory.java
│ │ │ ├── CompanyFactoryImpl.java
│ │ │ ├── CompanyProperties.java
│ │ │ ├── CompanyProvider.java
│ │ │ ├── DefaultCompanyProvider.java
│ │ │ └── locale/
│ │ │ ├── br/
│ │ │ │ └── BrVATIdentificationNumberProvider.java
│ │ │ ├── de/
│ │ │ │ └── DeVATIdentificationNumberProvider.java
│ │ │ ├── en/
│ │ │ │ └── EnVATIdentificationNumberProvider.java
│ │ │ ├── es/
│ │ │ │ └── EsVATIdentificationNumberProvider.java
│ │ │ ├── fr/
│ │ │ │ └── FrVATIdentificationNumberProvider.java
│ │ │ ├── ka/
│ │ │ │ └── KaVATIdentificationNumberProvider.java
│ │ │ ├── pl/
│ │ │ │ └── PlVATIdentificationNumberProvider.java
│ │ │ ├── sk/
│ │ │ │ └── SkVATIdentificationNumberProvider.java
│ │ │ ├── sv/
│ │ │ │ └── SvVATIdentificationNumberProvider.java
│ │ │ ├── tr/
│ │ │ │ └── TrVATIdentificationNumberProvider.java
│ │ │ └── zh/
│ │ │ └── ZhVATIdentificationNumberProvider.java
│ │ ├── net/
│ │ │ ├── IPNumberProducer.java
│ │ │ └── NetworkProducer.java
│ │ ├── payment/
│ │ │ ├── CreditCard.java
│ │ │ ├── CreditCardProvider.java
│ │ │ ├── DefaultIBANProvider.java
│ │ │ ├── IBAN.java
│ │ │ ├── IBANFactory.java
│ │ │ ├── IBANFactoryImpl.java
│ │ │ ├── IBANProperties.java
│ │ │ └── IBANProvider.java
│ │ ├── person/
│ │ │ ├── AbstractAddressProvider.java
│ │ │ ├── Address.java
│ │ │ ├── AddressProvider.java
│ │ │ ├── CompanyEmailProvider.java
│ │ │ ├── Country.java
│ │ │ ├── DefaultPersonProvider.java
│ │ │ ├── EmailProvider.java
│ │ │ ├── NationalIdentificationNumber.java
│ │ │ ├── NationalIdentificationNumberFactory.java
│ │ │ ├── NationalIdentificationNumberProperties.java
│ │ │ ├── NationalIdentificationNumberProvider.java
│ │ │ ├── NationalIdentityCardNumberProvider.java
│ │ │ ├── PassportNumberProvider.java
│ │ │ ├── Person.java
│ │ │ ├── PersonFactory.java
│ │ │ ├── PersonFactoryImpl.java
│ │ │ ├── PersonProperties.java
│ │ │ ├── PersonProvider.java
│ │ │ └── locale/
│ │ │ ├── AbstractAddress.java
│ │ │ ├── ContinentalAddress.java
│ │ │ ├── NoNationalIdentificationNumberFactory.java
│ │ │ ├── br/
│ │ │ │ ├── BrAddress.java
│ │ │ │ ├── BrAddressProvider.java
│ │ │ │ ├── BrNationalIdentityCardNumberProvider.java
│ │ │ │ └── BrPassportNumberProvider.java
│ │ │ ├── de/
│ │ │ │ ├── DeAddress.java
│ │ │ │ ├── DeAddressProvider.java
│ │ │ │ ├── DeNationalIdentityCardNumberProvider.java
│ │ │ │ └── DePassportNumberProvider.java
│ │ │ ├── en/
│ │ │ │ ├── EnAddress.java
│ │ │ │ ├── EnAddressProvider.java
│ │ │ │ ├── EnNationalIdentityCardNumberProvider.java
│ │ │ │ └── EnPassportNumberProvider.java
│ │ │ ├── es/
│ │ │ │ ├── EsAddress.java
│ │ │ │ ├── EsAddressProvider.java
│ │ │ │ ├── EsNationalIdentityCardNumberProvider.java
│ │ │ │ └── EsPassportNumberProvider.java
│ │ │ ├── fr/
│ │ │ │ ├── FrAddress.java
│ │ │ │ ├── FrAddressProvider.java
│ │ │ │ ├── FrNationalIdentityCardNumberProvider.java
│ │ │ │ └── FrPassportNumberProvider.java
│ │ │ ├── ka/
│ │ │ │ ├── KaAddress.java
│ │ │ │ ├── KaAddressProvider.java
│ │ │ │ ├── KaNationalIdentityCardNumberProvider.java
│ │ │ │ └── KaPassportNumberProvider.java
│ │ │ ├── pl/
│ │ │ │ ├── PlAddress.java
│ │ │ │ ├── PlAddressProvider.java
│ │ │ │ ├── PlNationalIdentificationNumberFactory.java
│ │ │ │ ├── PlNationalIdentificationNumberProvider.java
│ │ │ │ ├── PlNationalIdentityCardNumberProvider.java
│ │ │ │ └── PlPassportNumberProvider.java
│ │ │ ├── sk/
│ │ │ │ ├── SkAddress.java
│ │ │ │ ├── SkAddressProvider.java
│ │ │ │ ├── SkNationalIdentificationNumberFactory.java
│ │ │ │ ├── SkNationalIdentificationNumberProvider.java
│ │ │ │ ├── SkNationalIdentityCardNumberProvider.java
│ │ │ │ └── SkPassportNumberProvider.java
│ │ │ ├── sv/
│ │ │ │ ├── SvAddress.java
│ │ │ │ ├── SvAddressProvider.java
│ │ │ │ ├── SvNationalIdentificationNumberFactory.java
│ │ │ │ ├── SvNationalIdentificationNumberProvider.java
│ │ │ │ ├── SvNationalIdentityCardNumberProvider.java
│ │ │ │ └── SvPassportNumberProvider.java
│ │ │ ├── tr/
│ │ │ │ ├── TrAddress.java
│ │ │ │ ├── TrAddressProvider.java
│ │ │ │ ├── TrNationalIdentityCardNumberProvider.java
│ │ │ │ └── TrPassportNumberProvider.java
│ │ │ └── zh/
│ │ │ ├── ZhAddress.java
│ │ │ ├── ZhAddressProvider.java
│ │ │ ├── ZhNationalIdentityCardNumberProvider.java
│ │ │ └── ZhPassportNumberProvider.java
│ │ ├── text/
│ │ │ ├── TextProducer.java
│ │ │ └── TextProducerInternal.java
│ │ └── util/
│ │ ├── AlphaNumberSystem.java
│ │ ├── LanguageCode.java
│ │ ├── StringUtils.java
│ │ ├── ValidateUtils.java
│ │ ├── ZhFairyUtil.java
│ │ └── package-info.java
│ └── resources/
│ ├── jfairy.yml
│ ├── jfairy_br.yml
│ ├── jfairy_de.yml
│ ├── jfairy_en.yml
│ ├── jfairy_es.yml
│ ├── jfairy_fr.yml
│ ├── jfairy_it.yml
│ ├── jfairy_ka.yml
│ ├── jfairy_pl.yml
│ ├── jfairy_sk.yml
│ ├── jfairy_sv.yml
│ ├── jfairy_tr.yml
│ └── jfairy_zh.yml
└── test/
├── groovy/
│ ├── com/
│ │ └── devskiller/
│ │ └── jfairy/
│ │ ├── FairyDeSpec.groovy
│ │ ├── FairyFrSpec.groovy
│ │ ├── FairyKaSpec.groovy
│ │ ├── FairyModuleSpec.groovy
│ │ ├── FairySpec.groovy
│ │ ├── FairyZhSpec.groovy
│ │ ├── UniqueEnforcerSpec.groovy
│ │ ├── UniqueFairySpec.groovy
│ │ ├── data/
│ │ │ └── MapBasedDataMasterSpec.groovy
│ │ └── producer/
│ │ ├── BaseProducerSpec.groovy
│ │ ├── CompanySpec.groovy
│ │ ├── DateProducerSpec.groovy
│ │ ├── TextSpec.groovy
│ │ ├── company/
│ │ │ └── locale/
│ │ │ ├── CompanyProviderSpec.groovy
│ │ │ ├── br/
│ │ │ │ └── BrVATIdentificationNumberProviderSpec.groovy
│ │ │ ├── de/
│ │ │ │ └── DeVATIdentificationNumberProviderSpec.groovy
│ │ │ ├── en/
│ │ │ │ └── EnVATIdentificationNumberProviderSpec.groovy
│ │ │ ├── es/
│ │ │ │ └── EsVATIdentificationNumberProviderSpec.groovy
│ │ │ ├── ka/
│ │ │ │ └── KaVATIdentificationNumberProviderSpec.groovy
│ │ │ ├── pl/
│ │ │ │ └── PlVATIdentificationNumberProviderSpec.groovy
│ │ │ ├── se/
│ │ │ │ └── SvVATIdentificationNumberProviderSpec.groovy
│ │ │ ├── sk/
│ │ │ │ └── SkVATIdentificationNumberProviderSpec.groovy
│ │ │ └── tr/
│ │ │ └── TrVATIdentificationNumberProviderSpec.groovy
│ │ ├── net/
│ │ │ └── NetworkSpec.groovy
│ │ ├── payment/
│ │ │ ├── CreditCardProviderSpec.groovy
│ │ │ └── IBANSpec.groovy
│ │ ├── person/
│ │ │ ├── CompanyEmailProviderSpec.groovy
│ │ │ ├── EmailProviderSpec.groovy
│ │ │ ├── PersonSpec.groovy
│ │ │ └── locale/
│ │ │ ├── br/
│ │ │ │ ├── BrAddressSpec.groovy
│ │ │ │ └── BrNationalIdentityCardNumberProviderSpec.groovy
│ │ │ ├── de/
│ │ │ │ ├── DeAddressSpec.groovy
│ │ │ │ ├── DeNationalIdentityCardNumberProviderSpec.groovy
│ │ │ │ └── DePassportNumberProviderSpec.groovy
│ │ │ ├── en/
│ │ │ │ ├── EnAddressSpec.groovy
│ │ │ │ ├── EnNationalIdentityCardNumberProviderSpec.groovy
│ │ │ │ └── EnPassportNumberProviderSpec.groovy
│ │ │ ├── es/
│ │ │ │ ├── EsAddressSpec.groovy
│ │ │ │ ├── EsNationalIdentityCardNumberProviderSpec.groovy
│ │ │ │ └── EsPassportNumberProviderSpec.groovy
│ │ │ ├── ka/
│ │ │ │ ├── KaAddressSpec.groovy
│ │ │ │ ├── KaNationalIdentityCardNumberProviderSpec.groovy
│ │ │ │ └── KaPassportNumberProviderSpec.groovy
│ │ │ ├── pl/
│ │ │ │ ├── PlAddressSpec.groovy
│ │ │ │ ├── PlNationalIdentificationNumberSpec.groovy
│ │ │ │ ├── PlNationalIdentityCardNumberProviderSpec.groovy
│ │ │ │ ├── PlPassportNumberProviderSpec.groovy
│ │ │ │ └── PlPersonSpec.groovy
│ │ │ ├── sk/
│ │ │ │ ├── SkAddressSpec.groovy
│ │ │ │ └── SkPersonSpec.groovy
│ │ │ ├── sv/
│ │ │ │ ├── SvAddressSpec.groovy
│ │ │ │ ├── SvNationalIdentificationNumberProviderSpec.groovy
│ │ │ │ ├── SvNationalIdentityCardNumberProviderSpec.groovy
│ │ │ │ ├── SvPassportNumberProviderSpec.groovy
│ │ │ │ └── SvPersonSpec.groovy
│ │ │ └── tr/
│ │ │ ├── TrAddressSpec.groovy
│ │ │ └── TrNationalIdentityCardNumberProviderSpec.groovy
│ │ └── util/
│ │ └── AlphaNumberSystemSpec.groovy
│ └── snippets/
│ ├── Foo.groovy
│ ├── SampleSnippet.groovy
│ └── TextSnippet.groovy
├── java/
│ └── com/
│ └── devskiller/
│ └── jfairy/
│ └── producer/
│ ├── RandomGeneratorTest.java
│ └── util/
│ ├── AlphaNumberSystemTest.java
│ ├── StringUtilsTest.java
│ └── ValidateUtilsTest.java
└── resources/
├── simplelogger.properties
└── team/
└── checkstyle-rules.xml
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
# EditorConfig — https://editorconfig.org
root = true
# ── Defaults for all files ────────────────────────────────────────────────────
[*]
indent_style = tab
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
# ── Markdown ──────────────────────────────────────────────────────────────────
# Trailing spaces are significant in Markdown (line break); keep them.
[*.md]
trim_trailing_whitespace = false
max_line_length = off
# ── Shell scripts ─────────────────────────────────────────────────────────────
[*.sh]
indent_size = 2
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug Report
description: Report a bug in jFairy
labels: ["bug"]
body:
- type: input
id: version
attributes:
label: jFairy version
placeholder: "0.8.0"
validations:
required: true
- type: input
id: java-version
attributes:
label: Java version
placeholder: "17"
validations:
required: true
- type: textarea
id: description
attributes:
label: Description
description: What happened and what did you expect?
validations:
required: true
- type: textarea
id: reproduction
attributes:
label: How to reproduce
description: Minimal code to reproduce the issue
render: java
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: Feature Request
description: Suggest a new feature or improvement
labels: ["enhancement"]
body:
- type: textarea
id: description
attributes:
label: Description
description: What would you like to see added or changed?
validations:
required: true
- type: textarea
id: use-case
attributes:
label: Use case
description: Why do you need this? What problem does it solve?
================================================
FILE: .github/ISSUE_TEMPLATE/new_locale.yml
================================================
name: New Locale
description: Request or offer support for a new language/country
labels: ["locale"]
body:
- type: input
id: locale
attributes:
label: Language / Country
placeholder: "e.g. Turkish (TR)"
validations:
required: true
- type: checkboxes
id: willing
attributes:
label: Contribution
options:
- label: I'm willing to submit a PR for this locale
================================================
FILE: .github/workflows/build.yml
================================================
name: Build
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build and test
run: ./mvnw package
================================================
FILE: .github/workflows/release.yml
================================================
name: Release
on:
push:
tags:
- 'v*'
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: 'maven'
server-id: central
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
gpg-passphrase: GPG_PASSPHRASE
- name: Extract version from tag
id: get_version
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT
- name: Build and deploy to Maven Central
run: |
mvn -B clean deploy -P release \
-Drevision=${{ steps.get_version.outputs.VERSION }} \
-DskipTests
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
generate_release_notes: true
files: |
**/target/*.jar
!**/target/*-sources.jar
!**/target/*-javadoc.jar
================================================
FILE: .gitignore
================================================
### Maven ###
target/
### IntelliJ ###
*.iml
*.ipr
*.iws
.idea/
out/
### Eclipse ###
/.classpath
/.project
/.settings
/bin/
### Other ###
.flattened-pom.xml
================================================
FILE: .mvn/wrapper/maven-wrapper.properties
================================================
wrapperVersion=3.3.4
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.14/apache-maven-3.9.14-bin.zip
================================================
FILE: .sdkmanrc
================================================
# Enable auto-env through sdkman auto-answer
# sdkman_auto_env=true
java=17.0.18-tem
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at https://github.com/SkillPanel/jfairy/issues. All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of actions.
**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to jFairy
We welcome contributions! Here's how to get started.
## Getting Started
1. Fork the repository
2. Clone your fork: `git clone https://github.com/YOUR_USERNAME/jfairy.git`
3. Create a branch: `git checkout -b feat/your-feature`
4. Make your changes
5. Run tests: `./mvnw test`
6. Push and open a Pull Request
## Requirements
- Java 17+
- Maven 4 (included via `./mvnw` wrapper)
## Adding a New Locale
1. Create `src/main/resources/jfairy_XX.yml` with names, cities, streets, etc.
2. Add provider classes in `src/main/java/.../producer/person/locale/xx/`
- `XxAddress` + `XxAddressProvider`
- `XxNationalIdentityCardNumberProvider`
- `XxPassportNumberProvider`
3. Add VAT provider in `src/main/java/.../producer/company/locale/xx/`
4. Add `XX` to `LanguageCode` enum and `Country` enum
5. Wire in `LocaleSpecificProvidersFactory` (add case + factory method)
6. Add tests
See existing locales (e.g., `br`, `sk`) for reference.
## Guidelines
- Follow existing code style
- Write tests for new functionality
- Use `baseProducer` for random values (not `Math.random()` or `RandomStringUtils`) to keep seed determinism
- Keep commits focused — one logical change per commit
- Use [Conventional Commits](https://www.conventionalcommits.org/) format
## Running Tests
```bash
./mvnw test
```
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.
"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.
2. Grant of Copyright License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.
3. Grant of Patent License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed.
4. Redistribution.
You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of
this License; and
You must cause any modified files to carry prominent notices stating that You
changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License.
5. Submission of Contributions.
Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding
such Contributions.
6. Trademarks.
This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.
7. Disclaimer of Warranty.
Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of
permissions under this License.
8. Limitation of Liability.
In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability.
While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work
To apply the Apache License to your work, attach the following boilerplate
notice, with the fields enclosed by brackets "[]" replaced with your own
identifying information. (Don't include the brackets!) The text should be
enclosed in the appropriate comment syntax for the file format. We also
recommend that a file or class name and description of purpose be included on
the same "printed page" as the copyright notice for easier identification within
third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README.md
================================================
# jFairy by Devskiller
[](https://github.com/SkillPanel/jfairy/actions/workflows/build.yml)
[](https://central.sonatype.com/artifact/com.devskiller/jfairy)
[](https://javadoc.io/doc/com.devskiller/jfairy)
Java fake data generator. According to Wikipedia:
> Fairyland, in folklore, is the fabulous land or abode of fairies or fays.
## Installation
Add the following dependency to your `pom.xml`:
```xml
<dependency>
<groupId>com.devskiller</groupId>
<artifactId>jfairy</artifactId>
<version>0.8.2</version>
</dependency>
```
## Usage
### Creating simple objects
```java
Fairy fairy = Fairy.create();
Person person = fairy.person();
System.out.println(person.getFirstName());
// Chloe
System.out.println(person.getLastName());
// Barker
System.out.println(person.getEmail());
// barker@yahoo.com
System.out.println(person.getTelephoneNumber());
// 690-950-802
System.out.println(person.getJobTitle());
// Software Developer
Person adultMale = fairy.person(PersonProperties.male(), PersonProperties.minAge(21));
System.out.println(adultMale.isMale());
// true
System.out.println(adultMale.getDateOfBirth());
// at least 21 years earlier
```
### Creating related objects
```java
Fairy fairy = Fairy.create();
Company company = fairy.company();
System.out.println(company.getName());
// Robuten Associates
System.out.println(company.getUrl());
// http://www.robuteniaassociates.com
Person salesman = fairy.person(PersonProperties.withCompany(company));
System.out.println(salesman.getFullName());
// Juan Camacho
System.out.println(salesman.getCompanyEmail());
// juan.camacho@robuteniaassociates.com
```
## Supported locales
| Locale | Language tag |
|:---------------------|:------------:|
| English (default) | `en` |
| Polish | `pl` |
| German | `de` |
| French | `fr` |
| Spanish | `es` |
| Swedish | `sv` |
| Chinese | `zh` |
| Georgian | `ka` |
| Italian | `it` |
| Brazilian Portuguese | `br` |
| Slovak | `sk` |
| Turkish | `tr` |
```java
Fairy enFairy = Fairy.create();
// Locale.ENGLISH is default
Fairy plFairy = Fairy.create(Locale.forLanguageTag("pl"));
// Polish version
Fairy brFairy = Fairy.create(Locale.forLanguageTag("br"));
// Brazilian version
```
## Unique values
```java
UniqueFairy unique = fairy.unique();
Person p1 = unique.person(); // unique by email
Person p2 = unique.person(); // different email than p1
Company c = unique.company(); // unique by name
```
For custom uniqueness keys:
```java
UniqueEnforcer<Person> unique = UniqueEnforcer.of(fairy::person, Person::getFullName);
Person p = unique.next();
```
## Thread safety
`Fairy` objects are not designed for concurrent use by multiple threads.
It is recommended to create a separate `Fairy` instance for each thread.
While some methods might appear safe, the underlying `Random` implementation can lead to contention and poor performance. Creating dedicated instances ensures both thread safety and optimal execution speed.
## JUnit 5 Extension
If you use JUnit 5, check out [jfairy-junit-extension](https://github.com/SkillPanel/jfairy-junit-extension) — an extension that allows injecting jFairy-generated objects directly into test method parameters.
## Building
This project uses Maven and can be built using the provided wrapper:
```bash
./mvnw
```
================================================
FILE: mvnw
================================================
#!/bin/sh
# ----------------------------------------------------------------------------
# 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
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Apache Maven Wrapper startup batch script, version 3.3.4
#
# Optional ENV vars
# -----------------
# JAVA_HOME - location of a JDK home dir, required when download maven via java source
# MVNW_REPOURL - repo url base for downloading maven distribution
# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
# ----------------------------------------------------------------------------
set -euf
[ "${MVNW_VERBOSE-}" != debug ] || set -x
# OS specific support.
native_path() { printf %s\\n "$1"; }
case "$(uname)" in
CYGWIN* | MINGW*)
[ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
native_path() { cygpath --path --windows "$1"; }
;;
esac
# set JAVACMD and JAVACCMD
set_java_home() {
# For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
if [ -n "${JAVA_HOME-}" ]; then
if [ -x "$JAVA_HOME/jre/sh/java" ]; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
JAVACCMD="$JAVA_HOME/jre/sh/javac"
else
JAVACMD="$JAVA_HOME/bin/java"
JAVACCMD="$JAVA_HOME/bin/javac"
if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
return 1
fi
fi
else
JAVACMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v java
)" || :
JAVACCMD="$(
'set' +e
'unset' -f command 2>/dev/null
'command' -v javac
)" || :
if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
return 1
fi
fi
}
# hash string like Java String::hashCode
hash_string() {
str="${1:-}" h=0
while [ -n "$str" ]; do
char="${str%"${str#?}"}"
h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
str="${str#?}"
done
printf %x\\n $h
}
verbose() { :; }
[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
die() {
printf %s\\n "$1" >&2
exit 1
}
trim() {
# MWRAPPER-139:
# Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
# Needed for removing poorly interpreted newline sequences when running in more
# exotic environments such as mingw bash on Windows.
printf "%s" "${1}" | tr -d '[:space:]'
}
scriptDir="$(dirname "$0")"
scriptName="$(basename "$0")"
# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
while IFS="=" read -r key value; do
case "${key-}" in
distributionUrl) distributionUrl=$(trim "${value-}") ;;
distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
esac
done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties"
[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
case "${distributionUrl##*/}" in
maven-mvnd-*bin.*)
MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
*AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
:Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
:Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
:Linux*x86_64*) distributionPlatform=linux-amd64 ;;
*)
echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
distributionPlatform=linux-amd64
;;
esac
distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
;;
maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
esac
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
distributionUrlName="${distributionUrl##*/}"
distributionUrlNameMain="${distributionUrlName%.*}"
distributionUrlNameMain="${distributionUrlNameMain%-bin}"
MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
exec_maven() {
unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
}
if [ -d "$MAVEN_HOME" ]; then
verbose "found existing MAVEN_HOME at $MAVEN_HOME"
exec_maven "$@"
fi
case "${distributionUrl-}" in
*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
esac
# prepare tmp dir
if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
trap clean HUP INT TERM EXIT
else
die "cannot create temp dir"
fi
mkdir -p -- "${MAVEN_HOME%/*}"
# Download and Install Apache Maven
verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
verbose "Downloading from: $distributionUrl"
verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
# select .zip or .tar.gz
if ! command -v unzip >/dev/null; then
distributionUrl="${distributionUrl%.zip}.tar.gz"
distributionUrlName="${distributionUrl##*/}"
fi
# verbose opt
__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
# normalize http auth
case "${MVNW_PASSWORD:+has-password}" in
'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
esac
if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
verbose "Found wget ... using wget"
wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
verbose "Found curl ... using curl"
curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
elif set_java_home; then
verbose "Falling back to use Java to download"
javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
cat >"$javaSource" <<-END
public class Downloader extends java.net.Authenticator
{
protected java.net.PasswordAuthentication getPasswordAuthentication()
{
return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
}
public static void main( String[] args ) throws Exception
{
setDefault( new Downloader() );
java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
}
}
END
# For Cygwin/MinGW, switch paths to Windows format before running javac and java
verbose " - Compiling Downloader.java ..."
"$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
verbose " - Running Downloader.java ..."
"$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
fi
# If specified, validate the SHA-256 sum of the Maven distribution zip file
if [ -n "${distributionSha256Sum-}" ]; then
distributionSha256Result=false
if [ "$MVN_CMD" = mvnd.sh ]; then
echo "Checksum validation is not supported for maven-mvnd." >&2
echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
elif command -v sha256sum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then
distributionSha256Result=true
fi
elif command -v shasum >/dev/null; then
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
distributionSha256Result=true
fi
else
echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
exit 1
fi
if [ $distributionSha256Result = false ]; then
echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
exit 1
fi
fi
# unzip and move
if command -v unzip >/dev/null; then
unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
else
tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
fi
# Find the actual extracted directory name (handles snapshots where filename != directory name)
actualDistributionDir=""
# First try the expected directory name (for regular distributions)
if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then
if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then
actualDistributionDir="$distributionUrlNameMain"
fi
fi
# If not found, search for any directory with the Maven executable (for snapshots)
if [ -z "$actualDistributionDir" ]; then
# enable globbing to iterate over items
set +f
for dir in "$TMP_DOWNLOAD_DIR"/*; do
if [ -d "$dir" ]; then
if [ -f "$dir/bin/$MVN_CMD" ]; then
actualDistributionDir="$(basename "$dir")"
break
fi
fi
done
set -f
fi
if [ -z "$actualDistributionDir" ]; then
verbose "Contents of $TMP_DOWNLOAD_DIR:"
verbose "$(ls -la "$TMP_DOWNLOAD_DIR")"
die "Could not find Maven distribution directory in extracted archive"
fi
verbose "Found extracted Maven distribution directory: $actualDistributionDir"
printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url"
mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
clean || :
exec_maven "$@"
================================================
FILE: mvnw.cmd
================================================
<# : batch portion
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Apache Maven Wrapper startup batch script, version 3.3.4
@REM
@REM Optional ENV vars
@REM MVNW_REPOURL - repo url base for downloading maven distribution
@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
@REM ----------------------------------------------------------------------------
@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
@SET __MVNW_CMD__=
@SET __MVNW_ERROR__=
@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
@SET PSModulePath=
@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
)
@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
@SET __MVNW_PSMODULEP_SAVE=
@SET __MVNW_ARG0_NAME__=
@SET MVNW_USERNAME=
@SET MVNW_PASSWORD=
@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*)
@echo Cannot start maven from wrapper >&2 && exit /b 1
@GOTO :EOF
: end batch / begin powershell #>
$ErrorActionPreference = "Stop"
if ($env:MVNW_VERBOSE -eq "true") {
$VerbosePreference = "Continue"
}
# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
if (!$distributionUrl) {
Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
}
switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
"maven-mvnd-*" {
$USE_MVND = $true
$distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
$MVN_CMD = "mvnd.cmd"
break
}
default {
$USE_MVND = $false
$MVN_CMD = $script -replace '^mvnw','mvn'
break
}
}
# apply MVNW_REPOURL and calculate MAVEN_HOME
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
if ($env:MVNW_REPOURL) {
$MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" }
$distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')"
}
$distributionUrlName = $distributionUrl -replace '^.*/',''
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
$MAVEN_M2_PATH = "$HOME/.m2"
if ($env:MAVEN_USER_HOME) {
$MAVEN_M2_PATH = "$env:MAVEN_USER_HOME"
}
if (-not (Test-Path -Path $MAVEN_M2_PATH)) {
New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null
}
$MAVEN_WRAPPER_DISTS = $null
if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) {
$MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists"
} else {
$MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists"
}
$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain"
$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
exit $?
}
if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
}
# prepare tmp dir
$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
trap {
if ($TMP_DOWNLOAD_DIR.Exists) {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
}
New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
# Download and Install Apache Maven
Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
Write-Verbose "Downloading from: $distributionUrl"
Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
$webclient = New-Object System.Net.WebClient
if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
$webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
# If specified, validate the SHA-256 sum of the Maven distribution zip file
$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
if ($distributionSha256Sum) {
if ($USE_MVND) {
Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
}
Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
}
}
# unzip and move
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
# Find the actual extracted directory name (handles snapshots where filename != directory name)
$actualDistributionDir = ""
# First try the expected directory name (for regular distributions)
$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain"
$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD"
if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) {
$actualDistributionDir = $distributionUrlNameMain
}
# If not found, search for any directory with the Maven executable (for snapshots)
if (!$actualDistributionDir) {
Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object {
$testPath = Join-Path $_.FullName "bin/$MVN_CMD"
if (Test-Path -Path $testPath -PathType Leaf) {
$actualDistributionDir = $_.Name
}
}
}
if (!$actualDistributionDir) {
Write-Error "Could not find Maven distribution directory in extracted archive"
}
Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir"
Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null
try {
Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
} catch {
if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
Write-Error "fail to move MAVEN_HOME"
}
} finally {
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
}
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
================================================
FILE: pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.devskiller</groupId>
<artifactId>jfairy</artifactId>
<version>${revision}</version>
<name>jFairy</name>
<description>Java fake data generator</description>
<url>https://github.com/Devskiller/jfairy</url>
<inceptionYear>2013</inceptionYear>
<licenses>
<license>
<name>Apache 2</name>
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
<comments>A business-friendly OSS license</comments>
</license>
</licenses>
<developers>
<developer>
<id>jkubrynski</id>
<name>Jakub Kubrynski</name>
</developer>
<developer>
<id>mariuszs</id>
<name>Mariusz Smykuła</name>
</developer>
<developer>
<id>szpak</id>
<name>Marcin Zajączkowski</name>
</developer>
<developer>
<id>olga.maciaszek</id>
<name>Olga Maciaszek-Sharma</name>
</developer>
<developer>
<id>kdebski85</id>
<name>Krzysztof Dębski</name>
</developer>
<developer>
<id>spannm</id>
<name>Markus Spann</name>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/Devskiller/jfairy</connection>
<developerConnection>scm:git:git@github.com:Devskiller/jfairy</developerConnection>
<url>https://github.com/Devskiller/jfairy</url>
<tag>HEAD</tag>
</scm>
<issueManagement>
<system>GitHub Issues</system>
<url>https://github.com/Devskiller/jfairy/issues</url>
</issueManagement>
<ciManagement>
<system>GitHub Actions</system>
<url>https://github.com/SkillPanel/jfairy/actions</url>
</ciManagement>
<distributionManagement>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://central.sonatype.com/api/v1/publisher</url>
</repository>
<snapshotRepository>
<id>central</id>
<name>Central Repository Snapshots</name>
<url>https://central.sonatype.com/api/v1/publisher</url>
</snapshotRepository>
</distributionManagement>
<properties>
<revision>0.8.3-SNAPSHOT</revision>
<javaVersion>17</javaVersion>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss z</maven.build.timestamp.format>
<!-- Dependency versions (ordered by usage) -->
<dep.snakeyaml-engine.version>3.0.1</dep.snakeyaml-engine.version>
<dep.jspecify.version>1.0.0</dep.jspecify.version>
<dep.slf4j.version>2.0.17</dep.slf4j.version>
<dep.iban-commons.version>1.8.4</dep.iban-commons.version>
<dep.commons-validator.version>1.10.1</dep.commons-validator.version>
<dep.spock.version>2.4-groovy-4.0</dep.spock.version>
<dep.groovy.version>4.0.31</dep.groovy.version>
<dep.byte-buddy.version>1.18.8</dep.byte-buddy.version>
<dep.objenesis.version>3.5</dep.objenesis.version>
<dep.junit-jupiter.version>5.14.3</dep.junit-jupiter.version>
<!-- Plugin versions (ordered alphabetically) -->
<dep.plugin.build-helper.version>3.6.1</dep.plugin.build-helper.version>
<dep.plugin.central-publishing.version>0.10.0</dep.plugin.central-publishing.version>
<dep.plugin.checkstyle.version>3.6.0</dep.plugin.checkstyle.version>
<dep.plugin.compiler.version>3.15.0</dep.plugin.compiler.version>
<dep.plugin.coveralls.version>4.3.0</dep.plugin.coveralls.version>
<dep.plugin.deploy.version>3.1.4</dep.plugin.deploy.version>
<dep.plugin.enforcer.version>3.6.2</dep.plugin.enforcer.version>
<!-- last error-prone version compatible with Java 17; 2.43.0+ requires Java 21 -->
<dep.plugin.error-prone.version>2.42.0</dep.plugin.error-prone.version>
<dep.plugin.flatten.version>1.7.3</dep.plugin.flatten.version>
<dep.plugin.gmavenplus.version>4.3.1</dep.plugin.gmavenplus.version>
<dep.plugin.gpg.version>3.2.8</dep.plugin.gpg.version>
<dep.plugin.jacoco.version>0.8.14</dep.plugin.jacoco.version>
<dep.plugin.javadoc.version>3.12.0</dep.plugin.javadoc.version>
<dep.plugin.jar.version>3.5.0</dep.plugin.jar.version>
<dep.plugin.release.version>3.3.1</dep.plugin.release.version>
<dep.plugin.resources.version>3.5.0</dep.plugin.resources.version>
<dep.plugin.sortpom.version>4.0.0</dep.plugin.sortpom.version>
<dep.plugin.source.version>3.4.0</dep.plugin.source.version>
<dep.plugin.surefire.version>3.5.5</dep.plugin.surefire.version>
<dep.plugin.versions.version>2.21.0</dep.plugin.versions.version>
</properties>
<dependencies>
<dependency>
<groupId>org.snakeyaml</groupId>
<artifactId>snakeyaml-engine</artifactId>
<version>${dep.snakeyaml-engine.version}</version>
</dependency>
<dependency>
<groupId>org.jspecify</groupId>
<artifactId>jspecify</artifactId>
<version>${dep.jspecify.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${dep.slf4j.version}</version>
</dependency>
<dependency>
<groupId>de.speedbanking</groupId>
<artifactId>iban-commons</artifactId>
<version>${dep.iban-commons.version}</version>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>${dep.commons-validator.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>${dep.slf4j.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<version>${dep.spock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.groovy</groupId>
<artifactId>groovy</artifactId>
<version>${dep.groovy.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.bytebuddy</groupId>
<artifactId>byte-buddy</artifactId>
<version>${dep.byte-buddy.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.objenesis</groupId>
<artifactId>objenesis</artifactId>
<version>${dep.objenesis.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${dep.junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<defaultGoal>clean verify</defaultGoal>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.github.ekryd.sortpom</groupId>
<artifactId>sortpom-maven-plugin</artifactId>
<version>${dep.plugin.sortpom.version}</version>
<configuration>
<createBackupFile>false</createBackupFile>
<expandEmptyElements>false</expandEmptyElements>
<nrOfIndentSpace>-1</nrOfIndentSpace>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>${dep.plugin.resources.version}</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>${dep.plugin.build-helper.version}</version>
<executions>
<execution>
<id>add-test-source</id>
<goals>
<goal>add-test-source</goal>
</goals>
<phase>generate-test-sources</phase>
<configuration>
<sources>
<source>${project.basedir}/src/test/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${dep.plugin.compiler.version}</version>
<configuration>
<release>${javaVersion}</release>
<fork>true</fork>
<showWarnings>true</showWarnings>
<compilerArgs>
<arg>-XDcompilePolicy=simple</arg>
<arg>-XDaddTypeAnnotationsToSymbol=true</arg>
<arg>--should-stop=ifError=FLOW</arg>
<arg>-Xplugin:ErrorProne -Xep:MissingSummary:WARN -Xep:InvalidBlockTag:WARN</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED</arg>
<arg>-J--add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED</arg>
<arg>-J--add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED</arg>
</compilerArgs>
<annotationProcessorPaths>
<path>
<groupId>com.google.errorprone</groupId>
<artifactId>error_prone_core</artifactId>
<version>${dep.plugin.error-prone.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
<version>${dep.plugin.gmavenplus.version}</version>
<configuration>
<testSources>
<testSource>
<directory>${project.basedir}/src/test/groovy</directory>
<includes>
<include>**/*.groovy</include>
</includes>
</testSource>
</testSources>
</configuration>
<executions>
<execution>
<goals>
<goal>compileTests</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>${dep.plugin.enforcer.version}</version>
<configuration>
<rules>
<requireMavenVersion>
<version>[3.9.0,)</version>
</requireMavenVersion>
<requireJavaVersion>
<version>[${javaVersion},)</version>
</requireJavaVersion>
<requirePluginVersions>
<message>Please always define Maven plugin versions</message>
<banTimestamps>true</banTimestamps>
<unCheckedPluginList>
org.apache.maven.plugins:maven-clean-plugin,
org.apache.maven.plugins:maven-dependency-plugin,
org.apache.maven.plugins:maven-install-plugin,
org.apache.maven.plugins:maven-site-plugin
</unCheckedPluginList>
</requirePluginVersions>
</rules>
</configuration>
<executions>
<execution>
<id>default-enforce</id>
<goals>
<goal>enforce</goal>
</goals>
<phase>validate</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>${dep.plugin.checkstyle.version}</version>
<configuration>
<configLocation>${project.basedir}/src/test/resources/team/checkstyle-rules.xml</configLocation>
<consoleOutput>true</consoleOutput>
<failOnViolation>true</failOnViolation>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
<logViolationsToConsole>true</logViolationsToConsole>
</configuration>
<executions>
<execution>
<id>checkstyle-check</id>
<goals>
<goal>check</goal>
</goals>
<phase>verify</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${dep.plugin.surefire.version}</version>
<configuration>
<includes>
<include>**/*Spec.java</include>
<include>**/*Test.java</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>org.eluder.coveralls</groupId>
<artifactId>coveralls-maven-plugin</artifactId>
<version>${dep.plugin.coveralls.version}</version>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>${dep.plugin.jacoco.version}</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>${dep.plugin.flatten.version}</version>
<configuration>
<outputDirectory>${project.build.directory}</outputDirectory>
<updatePomFile>true</updatePomFile>
<flattenMode>oss</flattenMode>
</configuration>
<executions>
<execution>
<id>flatten</id>
<goals>
<goal>flatten</goal>
</goals>
<phase>prepare-package</phase>
</execution>
<execution>
<id>flatten-clean</id>
<goals>
<goal>clean</goal>
</goals>
<phase>clean</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${dep.plugin.jar.version}</version>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<compress>true</compress>
<index>false</index>
<manifest>
<addClasspath>false</addClasspath>
<addDefaultEntries>true</addDefaultEntries>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries> <!-- Implementation-Title/Version/Vendor -->
<addDefaultSpecificationEntries>false</addDefaultSpecificationEntries>
<addBuildEnvironmentEntries>true</addBuildEnvironmentEntries> <!-- Build-Jdk, Build-Os, Build-Tool -->
</manifest>
<manifestEntries>
<Build-Time>${maven.build.timestamp}</Build-Time>
<Project-Url>${project.url}</Project-Url>
<Project-Inception-Year>${project.inceptionYear}</Project-Inception-Year>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>${dep.plugin.deploy.version}</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>${dep.plugin.release.version}</version>
<configuration>
<releaseProfiles>release</releaseProfiles>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>${dep.plugin.versions.version}</version>
<configuration>
<ruleSet>
<ignoreVersions>
<ignoreVersion>
<type>regex</type>
<version>.*(?i)(alpha|beta|rc|cr|preview|milestone|[mb][0-9]+).*</version>
</ignoreVersion>
</ignoreVersions>
</ruleSet>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>fast</id>
<!-- profile to skip time-consuming steps -->
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<!-- skip _compiling_ the tests -->
<maven.test.skip>true</maven.test.skip>
<!-- skip execution of tests -->
<skipTests>true</skipTests>
<maven.javadoc.skip>true</maven.javadoc.skip>
</properties>
</profile>
<!-- profile to fail the build on Error Prone findings
mvn clean compile -D check.fail-errorprone=true
https://errorprone.info/bugpattern/IncompatibleModifiers -->
<profile>
<id>errorprone-fatal</id>
<activation>
<property>
<name>check.fail-errorprone</name>
<value>true</value>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgs combine.children="append">
<arg>-Werror</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>release</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>${dep.plugin.gpg.version}</version>
<executions>
<execution>
<id>sign-artifacts</id>
<goals>
<goal>sign</goal>
</goals>
<phase>verify</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>${dep.plugin.source.version}</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>${dep.plugin.javadoc.version}</version>
<configuration>
<doclint>none</doclint>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.central</groupId>
<artifactId>central-publishing-maven-plugin</artifactId>
<version>${dep.plugin.central-publishing.version}</version>
<extensions>true</extensions>
<configuration>
<publishingServerId>central</publishingServerId>
<autoPublish>true</autoPublish>
<waitUntil>published</waitUntil>
</configuration>
<executions>
<execution>
<id>central-publish</id>
<goals>
<goal>publish</goal>
</goals>
<phase>deploy</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
================================================
FILE: src/main/java/com/devskiller/jfairy/Bootstrap.java
================================================
package com.devskiller.jfairy;
import java.io.IOException;
import java.util.Locale;
import java.util.function.Supplier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.devskiller.jfairy.data.DataMaster;
import com.devskiller.jfairy.data.MapBasedDataMaster;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.DateProducer;
import com.devskiller.jfairy.producer.RandomGenerator;
import com.devskiller.jfairy.producer.TimeProvider;
import com.devskiller.jfairy.producer.company.CompanyFactory;
import com.devskiller.jfairy.producer.company.CompanyFactoryImpl;
import com.devskiller.jfairy.producer.net.IPNumberProducer;
import com.devskiller.jfairy.producer.payment.CreditCardProvider;
import com.devskiller.jfairy.producer.payment.IBANFactory;
import com.devskiller.jfairy.producer.payment.IBANFactoryImpl;
import com.devskiller.jfairy.producer.person.PersonFactory;
import com.devskiller.jfairy.producer.person.PersonFactoryImpl;
import com.devskiller.jfairy.producer.text.TextProducerInternal;
/**
* <p>
* Using a {@link #builder()}, you can configure the following fields:
* <p>
* <ul>
* <li><tt>locale</tt>: Specifies the locale for the random data file.</li>
* <li><tt>filePrefix</tt>: Specifies the file prefix.
* (So if you specify "jfairy" here and English for Locale, the data file will be
* "jfairy_en.yml" under the classpath.)
* </li>
* <li><tt>random</tt>: The Random object to use.</li>
* <li><tt>randomSeed</tt>: A specific random seed to use. Use this if you want the resulting
* data to be <strong>deterministic</strong> based on it, such as if you want the same test
* ID in a database to always result in the same fake name.
* </li>
* </ul>
* <p>
* Obviously, don't set both <tt>random</tt> and <tt>randomSeed</tt>, only the last one you set will
* actually take effect.
*
* @author Jakub Kubrynski
* @author Olga Maciaszek-Sharma
*/
public final class Bootstrap {
private static final Logger LOG = LoggerFactory.getLogger(Bootstrap.class);
private static final String DATA_FILE_PREFIX = "jfairy";
private Bootstrap() {
}
public static Fairy createFairy(DataMaster dataMaster, Locale locale, RandomGenerator randomGenerator) {
LOG.debug("Creating Fairy instance for locale {}", locale);
// Create base components
BaseProducer baseProducer = new BaseProducer(randomGenerator);
TimeProvider timeProvider = new TimeProvider();
DateProducer dateProducer = new DateProducer(baseProducer, timeProvider);
// Create locale-specific providers
LocaleSpecificProviders localeProviders = LocaleSpecificProvidersFactory.createProvidersForLocale(
locale, dataMaster, baseProducer, dateProducer);
// Create company factory first (needed by PersonFactory)
CompanyFactory companyFactory = new CompanyFactoryImpl(
baseProducer, dataMaster, localeProviders.vatIdentificationNumberProvider()
);
// Create person factory
PersonFactory personFactory = new PersonFactoryImpl(
dataMaster, dateProducer, baseProducer,
localeProviders.addressProvider(),
localeProviders.nationalIdentificationNumberFactory(),
localeProviders.nationalIdentityCardNumberProvider(),
localeProviders.passportNumberProvider(),
timeProvider,
companyFactory
);
IBANFactory ibanFactory = new IBANFactoryImpl(baseProducer, dataMaster);
// Create other producers
CreditCardProvider creditCardProvider = new CreditCardProvider(dataMaster, baseProducer, dateProducer);
TextProducerInternal textProducerInternal = new TextProducerInternal(dataMaster, baseProducer);
IPNumberProducer ipNumberProducer = new IPNumberProducer(baseProducer);
// Create fairy factory
FairyFactory fairyFactory = new FairyFactoryImpl(
textProducerInternal, baseProducer, personFactory,
ipNumberProducer, dateProducer, creditCardProvider,
companyFactory, ibanFactory
);
LOG.trace("Fairy components initialized");
return fairyFactory.createFairy();
}
private static void fillDefaultDataMaster(MapBasedDataMaster dataMaster, Locale locale, String filePrefix) {
try {
String baseFile = filePrefix + ".yml";
String localeFile = filePrefix + "_" + locale.getLanguage() + ".yml";
LOG.debug("Loading data resources: {}, {}", baseFile, localeFile);
dataMaster.readResources(baseFile);
dataMaster.readResources(localeFile);
} catch (IOException ex) {
LOG.error("Failed to load data resources for locale {}", locale);
throw new IllegalStateException(ex);
}
}
/**
* Creates a Builder that will let you configure a Fairy's fields one by one.
*
* @return a Builder instance.
*/
public static Builder builder() {
return new Builder();
}
/**
* Use this factory method to create dataset containing default jfairy.yml and jfairy_{langCode}.yml files
* merged with custom files with the same name
*
* @return Fairy instance
*/
public static Fairy create() {
return builder().build();
}
/**
* Use this factory method to create dataset containing default jfairy.yml and jfairy_{langCode}.yml files
* merged with custom files with the same name
*
* @param locale will be used to assess langCode for data file
* @return Fairy instance
*/
public static Fairy create(Locale locale) {
return builder().withLocale(locale).build();
}
/**
* Use this factory method to create your own dataset overriding bundled one
*
* @param locale will be used to assess langCode for data file
* @param dataFilePrefix prefix of the data file - final pattern will be jfairy.yml and dataFilePrefix_{langCode}.yml
* @return Fairy instance
*/
public static Fairy create(Locale locale, String dataFilePrefix) {
return builder().withLocale(locale)
.withFilePrefix(dataFilePrefix)
.build();
}
public static Fairy create(Supplier<DataMaster> dataMaster, Locale locale) {
return builder().withDataMasterProvider(dataMaster).withLocale(locale).build();
}
public static final class Builder {
private Locale locale = Locale.ENGLISH;
private String filePrefix = DATA_FILE_PREFIX;
private RandomGenerator randomGenerator = new RandomGenerator();
private DataMaster dataMaster;
private MapBasedDataMaster getDefaultDataMaster(BaseProducer baseProducer) {
return new MapBasedDataMaster(baseProducer);
}
private Builder() {
}
/**
* Sets the locale for the resulting Fairy.
*
* @param locale The Locale to set.
* @return the same Builder (for chaining).
*/
public Builder withLocale(Locale locale) {
this.locale = locale;
return this;
}
/**
* Sets the data file prefix for the resulting Fairy.
*
* @param filePrefix The prefix of the file (such as "jfairy" for "jfairy_en.yml").
* @return the same Builder (for chaining).
*/
public Builder withFilePrefix(String filePrefix) {
this.filePrefix = filePrefix;
return this;
}
/**
* Sets the random seed to use to pick things randomly. (If you set this, you will always
* get the same result when you generate things.)
*
* @param randomSeed The random seed to use.
* @return the same Builder (for chaining).
*/
public Builder withRandomSeed(int randomSeed) {
LOG.debug("Using fixed random seed: {}", randomSeed);
this.randomGenerator = new RandomGenerator(randomSeed);
return this;
}
/**
* Sets a custom DataMaster implementation.
*
* @param dataMasterProvider The DataMaster supplier to use.
* @return the same Builder (for chaining).
*/
public Builder withDataMasterProvider(Supplier<DataMaster> dataMasterProvider) {
this.dataMaster = dataMasterProvider.get();
return this;
}
/**
* Returns the completed Fairy.
*
* @return Fairy instance
*/
public Fairy build() {
if (dataMaster == null) {
BaseProducer baseProducer = new BaseProducer(randomGenerator);
dataMaster = getDefaultDataMaster(baseProducer);
fillDefaultDataMaster((MapBasedDataMaster) dataMaster, locale, filePrefix);
}
return createFairy(dataMaster, locale, randomGenerator);
}
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/Fairy.java
================================================
/*
* Copyright (c) 2013 Codearte
*/
package com.devskiller.jfairy;
import java.util.Locale;
import java.util.function.Supplier;
import com.devskiller.jfairy.data.DataMaster;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.DateProducer;
import com.devskiller.jfairy.producer.company.Company;
import com.devskiller.jfairy.producer.company.CompanyFactory;
import com.devskiller.jfairy.producer.company.CompanyProperties;
import com.devskiller.jfairy.producer.net.NetworkProducer;
import com.devskiller.jfairy.producer.payment.CreditCard;
import com.devskiller.jfairy.producer.payment.CreditCardProvider;
import com.devskiller.jfairy.producer.payment.IBAN;
import com.devskiller.jfairy.producer.payment.IBANFactory;
import com.devskiller.jfairy.producer.payment.IBANProperties;
import com.devskiller.jfairy.producer.person.Person;
import com.devskiller.jfairy.producer.person.PersonFactory;
import com.devskiller.jfairy.producer.person.PersonProperties;
import com.devskiller.jfairy.producer.text.TextProducer;
public final class Fairy {
private final TextProducer textProducer;
private final PersonFactory personFactory;
private final NetworkProducer networkProducer;
private final BaseProducer baseProducer;
private final DateProducer dateProducer;
private final CreditCardProvider creditCardProvider;
private final CompanyFactory companyFactory;
private final IBANFactory ibanFactory;
Fairy(TextProducer textProducer, PersonFactory personFactory, NetworkProducer networkProducer,
BaseProducer baseProducer, DateProducer dateProducer, CreditCardProvider creditCardProvider,
CompanyFactory companyFactory, IBANFactory ibanFactory) {
this.textProducer = textProducer;
this.personFactory = personFactory;
this.networkProducer = networkProducer;
this.baseProducer = baseProducer;
this.dateProducer = dateProducer;
this.creditCardProvider = creditCardProvider;
this.companyFactory = companyFactory;
this.ibanFactory = ibanFactory;
}
public static Fairy create() {
return Bootstrap.create();
}
public static Fairy create(Locale locale) {
return Bootstrap.create(locale);
}
public static Fairy create(Supplier<DataMaster> dataMasterProvider, Locale locale) {
return Bootstrap.create(dataMasterProvider, locale);
}
public static Bootstrap.Builder builder() {
return Bootstrap.builder();
}
/**
* Use this method for generating texts
*
* @return A {@link com.devskiller.jfairy.producer.text.TextProducer} instance
*/
public TextProducer textProducer() {
return textProducer;
}
/**
* Use this method for fake persons
*
* @param personProperties desired person features
* @return A {@link com.devskiller.jfairy.producer.person.Person} instance
*/
public Person person(PersonProperties.PersonProperty... personProperties) {
return personFactory.producePersonProvider(personProperties).get();
}
/**
* Use this method to generate fake company
*
* @param companyProperties desired company features
* @return A {@link com.devskiller.jfairy.producer.company.CompanyProvider} instance
*/
public Company company(CompanyProperties.CompanyProperty... companyProperties) {
return companyFactory.produceCompany(companyProperties).get();
}
/**
* Use this method for get standard tools
*
* @return A {@link com.devskiller.jfairy.producer.BaseProducer} instance
*/
public BaseProducer baseProducer() {
return baseProducer;
}
public DateProducer dateProducer() {
return dateProducer;
}
/**
* Use this method for generating IBAN (International Bank Account Number)
*
* @return A {@link com.devskiller.jfairy.producer.payment.IBAN} instance
*/
public IBAN iban() {
return ibanFactory.produceIBANProvider().get();
}
/**
* Use this method for generating IBAN (International Bank Account Number)
*
* @param properties desired IBAN features
* @return A {@link com.devskiller.jfairy.producer.payment.IBAN} instance
*/
public IBAN iban(IBANProperties.Property... properties) {
return ibanFactory.produceIBANProvider(properties).get();
}
public CreditCard creditCard() {
return creditCardProvider.get();
}
public NetworkProducer networkProducer() {
return networkProducer;
}
/**
* Returns a {@link UniqueFairy} that ensures generated objects are unique
* by their natural key (email for Person, name for Company, etc.).
*
* @return A {@link UniqueFairy} instance
*/
public UniqueFairy unique() {
return new UniqueFairy(this, UniqueEnforcer.DEFAULT_MAX_RETRIES);
}
/**
* Returns a {@link UniqueFairy} with custom max retries.
*
* @param maxRetries maximum generation attempts before throwing
* @return A {@link UniqueFairy} instance
*/
public UniqueFairy unique(int maxRetries) {
return new UniqueFairy(this, maxRetries);
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/FairyFactory.java
================================================
package com.devskiller.jfairy;
/**
* @author Jakub Kubrynski
*/
interface FairyFactory {
Fairy createFairy();
}
================================================
FILE: src/main/java/com/devskiller/jfairy/FairyFactoryImpl.java
================================================
package com.devskiller.jfairy;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.DateProducer;
import com.devskiller.jfairy.producer.company.CompanyFactory;
import com.devskiller.jfairy.producer.net.IPNumberProducer;
import com.devskiller.jfairy.producer.net.NetworkProducer;
import com.devskiller.jfairy.producer.payment.CreditCardProvider;
import com.devskiller.jfairy.producer.payment.IBANFactory;
import com.devskiller.jfairy.producer.person.PersonFactory;
import com.devskiller.jfairy.producer.text.TextProducer;
import com.devskiller.jfairy.producer.text.TextProducerInternal;
class FairyFactoryImpl implements FairyFactory {
private final TextProducerInternal textProducerInternal;
private final BaseProducer baseProducer;
private final PersonFactory personFactory;
private final IPNumberProducer ipNumberProducer;
private final DateProducer dateProducer;
private final CreditCardProvider creditCardProvider;
private final CompanyFactory companyFactory;
private final IBANFactory ibanFactory;
FairyFactoryImpl(TextProducerInternal textProducerInternal,
BaseProducer baseProducer,
PersonFactory personFactory,
IPNumberProducer ipNumberProducer,
DateProducer dateProducer,
CreditCardProvider creditCardProvider,
CompanyFactory companyFactory,
IBANFactory ibanFactory) {
this.textProducerInternal = textProducerInternal;
this.baseProducer = baseProducer;
this.personFactory = personFactory;
this.ipNumberProducer = ipNumberProducer;
this.dateProducer = dateProducer;
this.creditCardProvider = creditCardProvider;
this.companyFactory = companyFactory;
this.ibanFactory = ibanFactory;
}
@Override
public Fairy createFairy() {
TextProducer textProducer = new TextProducer(textProducerInternal, baseProducer);
NetworkProducer networkProducer = new NetworkProducer(ipNumberProducer);
return new Fairy(textProducer, personFactory, networkProducer, baseProducer,
dateProducer, creditCardProvider, companyFactory, ibanFactory);
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/LocaleSpecificProviders.java
================================================
package com.devskiller.jfairy;
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.person.AddressProvider;
import com.devskiller.jfairy.producer.person.NationalIdentificationNumberFactory;
import com.devskiller.jfairy.producer.person.NationalIdentityCardNumberProvider;
import com.devskiller.jfairy.producer.person.PassportNumberProvider;
/**
* Container for locale-specific provider implementations
*/
record LocaleSpecificProviders(
NationalIdentificationNumberFactory nationalIdentificationNumberFactory,
NationalIdentityCardNumberProvider nationalIdentityCardNumberProvider,
VATIdentificationNumberProvider vatIdentificationNumberProvider,
AddressProvider addressProvider,
PassportNumberProvider passportNumberProvider) {
}
================================================
FILE: src/main/java/com/devskiller/jfairy/LocaleSpecificProvidersFactory.java
================================================
package com.devskiller.jfairy;
import java.util.Locale;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.devskiller.jfairy.data.DataMaster;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.DateProducer;
import com.devskiller.jfairy.producer.company.locale.br.BrVATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.company.locale.de.DeVATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.company.locale.en.EnVATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.company.locale.es.EsVATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.company.locale.fr.FrVATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.company.locale.ka.KaVATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.company.locale.pl.PlVATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.company.locale.sk.SkVATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.company.locale.sv.SvVATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.company.locale.tr.TrVATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.company.locale.zh.ZhVATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.person.NationalIdentificationNumberFactory;
import com.devskiller.jfairy.producer.person.locale.NoNationalIdentificationNumberFactory;
import com.devskiller.jfairy.producer.person.locale.br.BrAddressProvider;
import com.devskiller.jfairy.producer.person.locale.br.BrNationalIdentityCardNumberProvider;
import com.devskiller.jfairy.producer.person.locale.br.BrPassportNumberProvider;
import com.devskiller.jfairy.producer.person.locale.de.DeAddressProvider;
import com.devskiller.jfairy.producer.person.locale.de.DeNationalIdentityCardNumberProvider;
import com.devskiller.jfairy.producer.person.locale.de.DePassportNumberProvider;
import com.devskiller.jfairy.producer.person.locale.en.EnAddressProvider;
import com.devskiller.jfairy.producer.person.locale.en.EnNationalIdentityCardNumberProvider;
import com.devskiller.jfairy.producer.person.locale.en.EnPassportNumberProvider;
import com.devskiller.jfairy.producer.person.locale.es.EsAddressProvider;
import com.devskiller.jfairy.producer.person.locale.es.EsNationalIdentityCardNumberProvider;
import com.devskiller.jfairy.producer.person.locale.es.EsPassportNumberProvider;
import com.devskiller.jfairy.producer.person.locale.fr.FrAddressProvider;
import com.devskiller.jfairy.producer.person.locale.fr.FrNationalIdentityCardNumberProvider;
import com.devskiller.jfairy.producer.person.locale.fr.FrPassportNumberProvider;
import com.devskiller.jfairy.producer.person.locale.ka.KaAddressProvider;
import com.devskiller.jfairy.producer.person.locale.ka.KaNationalIdentityCardNumberProvider;
import com.devskiller.jfairy.producer.person.locale.ka.KaPassportNumberProvider;
import com.devskiller.jfairy.producer.person.locale.pl.PlAddressProvider;
import com.devskiller.jfairy.producer.person.locale.pl.PlNationalIdentificationNumberFactory;
import com.devskiller.jfairy.producer.person.locale.pl.PlNationalIdentityCardNumberProvider;
import com.devskiller.jfairy.producer.person.locale.pl.PlPassportNumberProvider;
import com.devskiller.jfairy.producer.person.locale.sk.SkAddressProvider;
import com.devskiller.jfairy.producer.person.locale.sk.SkNationalIdentificationNumberFactory;
import com.devskiller.jfairy.producer.person.locale.sk.SkNationalIdentityCardNumberProvider;
import com.devskiller.jfairy.producer.person.locale.sk.SkPassportNumberProvider;
import com.devskiller.jfairy.producer.person.locale.sv.SvAddressProvider;
import com.devskiller.jfairy.producer.person.locale.sv.SvNationalIdentificationNumberFactory;
import com.devskiller.jfairy.producer.person.locale.sv.SvNationalIdentityCardNumberProvider;
import com.devskiller.jfairy.producer.person.locale.sv.SvPassportNumberProvider;
import com.devskiller.jfairy.producer.person.locale.tr.TrAddressProvider;
import com.devskiller.jfairy.producer.person.locale.tr.TrNationalIdentityCardNumberProvider;
import com.devskiller.jfairy.producer.person.locale.tr.TrPassportNumberProvider;
import com.devskiller.jfairy.producer.person.locale.zh.ZhAddressProvider;
import com.devskiller.jfairy.producer.person.locale.zh.ZhNationalIdentityCardNumberProvider;
import com.devskiller.jfairy.producer.person.locale.zh.ZhPassportNumberProvider;
import com.devskiller.jfairy.producer.util.LanguageCode;
/**
* Factory for creating locale-specific provider implementations
*/
final class LocaleSpecificProvidersFactory {
private static final Logger LOG = LoggerFactory.getLogger(LocaleSpecificProvidersFactory.class);
private LocaleSpecificProvidersFactory() {
}
static LocaleSpecificProviders createProvidersForLocale(Locale locale,
DataMaster dataMaster,
BaseProducer baseProducer,
DateProducer dateProducer) {
LanguageCode code;
try {
code = LanguageCode.valueOf(locale.getLanguage().toUpperCase(Locale.ROOT));
} catch (IllegalArgumentException ex) {
LOG.warn("Unknown locale {}", locale);
code = LanguageCode.EN;
}
return switch (code) {
case PL -> createPlProviders(dataMaster, baseProducer, dateProducer);
case EN -> createEnProviders(dataMaster, baseProducer);
case ES -> createEsProviders(dataMaster, baseProducer);
case FR -> createFrProviders(dataMaster, baseProducer);
case IT -> createItProviders(dataMaster, baseProducer);
case SK -> createSkProviders(dataMaster, baseProducer, dateProducer);
case SV -> createSvProviders(dataMaster, baseProducer, dateProducer);
case ZH -> createZhProviders(dataMaster, baseProducer);
case DE -> createDeProviders(dataMaster, baseProducer);
case KA -> createKaProviders(dataMaster, baseProducer);
case BR -> createBrProviders(dataMaster, baseProducer);
case TR -> createTrProviders(dataMaster, baseProducer);
};
}
private static LocaleSpecificProviders createPlProviders(DataMaster dataMaster,
BaseProducer baseProducer,
DateProducer dateProducer) {
return new LocaleSpecificProviders(
new PlNationalIdentificationNumberFactory(baseProducer, dateProducer),
new PlNationalIdentityCardNumberProvider(dateProducer, baseProducer),
new PlVATIdentificationNumberProvider(baseProducer),
new PlAddressProvider(dataMaster, baseProducer),
new PlPassportNumberProvider(baseProducer)
);
}
private static LocaleSpecificProviders createSkProviders(DataMaster dataMaster,
BaseProducer baseProducer,
DateProducer dateProducer) {
return new LocaleSpecificProviders(
new SkNationalIdentificationNumberFactory(baseProducer, dateProducer),
new SkNationalIdentityCardNumberProvider(dateProducer, baseProducer),
new SkVATIdentificationNumberProvider(baseProducer),
new SkAddressProvider(dataMaster, baseProducer),
new SkPassportNumberProvider(baseProducer)
);
}
private static LocaleSpecificProviders createEnProviders(DataMaster dataMaster,
BaseProducer baseProducer) {
return new LocaleSpecificProviders(
new NoNationalIdentificationNumberFactory(),
new EnNationalIdentityCardNumberProvider(baseProducer),
new EnVATIdentificationNumberProvider(baseProducer),
new EnAddressProvider(dataMaster, baseProducer),
new EnPassportNumberProvider(baseProducer)
);
}
/**
* Creates providers for French locale.
*
* @param dataMaster data source
* @param baseProducer base producer
* @return French specific providers
*/
private static LocaleSpecificProviders createFrProviders(DataMaster dataMaster,
BaseProducer baseProducer) {
return new LocaleSpecificProviders(
new NoNationalIdentificationNumberFactory(),
new FrNationalIdentityCardNumberProvider(baseProducer),
new FrVATIdentificationNumberProvider(baseProducer),
new FrAddressProvider(dataMaster, baseProducer),
new FrPassportNumberProvider(baseProducer)
);
}
/**
* Creates providers for Italian locale.
* <p>
* Note: Currently uses English fallbacks.
*
* @param dataMaster data source
* @param baseProducer base producer
* @return Italian specific providers
*/
private static LocaleSpecificProviders createItProviders(DataMaster dataMaster,
BaseProducer baseProducer) {
return new LocaleSpecificProviders(
new NoNationalIdentificationNumberFactory(),
new EnNationalIdentityCardNumberProvider(baseProducer),
new EnVATIdentificationNumberProvider(baseProducer),
new EnAddressProvider(dataMaster, baseProducer),
new EnPassportNumberProvider(baseProducer)
);
}
private static LocaleSpecificProviders createEsProviders(DataMaster dataMaster,
BaseProducer baseProducer) {
return new LocaleSpecificProviders(
new NoNationalIdentificationNumberFactory(),
new EsNationalIdentityCardNumberProvider(baseProducer),
new EsVATIdentificationNumberProvider(baseProducer),
new EsAddressProvider(dataMaster, baseProducer),
new EsPassportNumberProvider(baseProducer)
);
}
private static LocaleSpecificProviders createSvProviders(DataMaster dataMaster,
BaseProducer baseProducer,
DateProducer dateProducer) {
NationalIdentificationNumberFactory nationalIdFactory = new SvNationalIdentificationNumberFactory(baseProducer, dateProducer);
return new LocaleSpecificProviders(
nationalIdFactory,
new SvNationalIdentityCardNumberProvider(baseProducer),
new SvVATIdentificationNumberProvider(baseProducer, dateProducer, nationalIdFactory),
new SvAddressProvider(dataMaster, baseProducer),
new SvPassportNumberProvider(baseProducer)
);
}
private static LocaleSpecificProviders createZhProviders(DataMaster dataMaster,
BaseProducer baseProducer) {
return new LocaleSpecificProviders(
new NoNationalIdentificationNumberFactory(),
new ZhNationalIdentityCardNumberProvider(baseProducer),
new ZhVATIdentificationNumberProvider(),
new ZhAddressProvider(dataMaster, baseProducer),
new ZhPassportNumberProvider(baseProducer)
);
}
private static LocaleSpecificProviders createDeProviders(DataMaster dataMaster,
BaseProducer baseProducer) {
return new LocaleSpecificProviders(
new NoNationalIdentificationNumberFactory(),
new DeNationalIdentityCardNumberProvider(baseProducer),
new DeVATIdentificationNumberProvider(baseProducer),
new DeAddressProvider(dataMaster, baseProducer),
new DePassportNumberProvider(baseProducer)
);
}
private static LocaleSpecificProviders createKaProviders(DataMaster dataMaster,
BaseProducer baseProducer) {
return new LocaleSpecificProviders(
new NoNationalIdentificationNumberFactory(),
new KaNationalIdentityCardNumberProvider(baseProducer),
new KaVATIdentificationNumberProvider(baseProducer),
new KaAddressProvider(dataMaster, baseProducer),
new KaPassportNumberProvider(baseProducer)
);
}
private static LocaleSpecificProviders createBrProviders(DataMaster dataMaster,
BaseProducer baseProducer) {
return new LocaleSpecificProviders(
new NoNationalIdentificationNumberFactory(),
new BrNationalIdentityCardNumberProvider(baseProducer),
new BrVATIdentificationNumberProvider(baseProducer),
new BrAddressProvider(dataMaster, baseProducer),
new BrPassportNumberProvider()
);
}
private static LocaleSpecificProviders createTrProviders(DataMaster dataMaster,
BaseProducer baseProducer) {
return new LocaleSpecificProviders(
new NoNationalIdentificationNumberFactory(),
new TrNationalIdentityCardNumberProvider(baseProducer),
new TrVATIdentificationNumberProvider(baseProducer),
new TrAddressProvider(dataMaster, baseProducer),
new TrPassportNumberProvider(baseProducer)
);
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/UniqueEnforcer.java
================================================
package com.devskiller.jfairy;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Supplier;
/**
* Wraps a generator to ensure unique values based on a key extractor.
* Throws {@link UniqueGenerationException} after max retries.
*
* <p>This class is not thread-safe. Each thread should use its own instance.</p>
*
* <pre>{@code
* Fairy fairy = Fairy.create();
* UniqueEnforcer<Person> unique = UniqueEnforcer.of(fairy::person, Person::getEmail);
* Person p1 = unique.next(); // guaranteed unique email
* Person p2 = unique.next(); // different email than p1
* unique.reset(); // clear history
* }</pre>
*
* @param <T> type of generated object
*/
public final class UniqueEnforcer<T> {
static final int DEFAULT_MAX_RETRIES = 10_000;
private final Supplier<T> defaultGenerator;
private final Function<T, ?> keyExtractor;
private final int maxRetries;
private final Set<Object> seen = new HashSet<>();
private UniqueEnforcer(Supplier<T> defaultGenerator, Function<T, ?> keyExtractor, int maxRetries) {
this.defaultGenerator = Objects.requireNonNull(defaultGenerator, "generator must not be null");
this.keyExtractor = Objects.requireNonNull(keyExtractor, "keyExtractor must not be null");
if (maxRetries < 1) {
throw new IllegalArgumentException("maxRetries must be positive, got: " + maxRetries);
}
this.maxRetries = maxRetries;
}
public static <T> UniqueEnforcer<T> of(Supplier<T> generator, Function<T, ?> keyExtractor) {
return new UniqueEnforcer<>(generator, keyExtractor, DEFAULT_MAX_RETRIES);
}
public static <T> UniqueEnforcer<T> of(Supplier<T> generator, Function<T, ?> keyExtractor, int maxRetries) {
return new UniqueEnforcer<>(generator, keyExtractor, maxRetries);
}
public T next() {
return next(defaultGenerator);
}
/**
* Generate a unique value using a custom supplier, tracking uniqueness
* in the same seen-set as {@link #next()}.
*/
public T next(Supplier<T> generator) {
for (int i = 0; i < maxRetries; i++) {
T value = generator.get();
Object key = keyExtractor.apply(value);
if (seen.add(key)) {
return value;
}
}
throw new UniqueGenerationException(
"Could not generate a unique value after " + maxRetries + " retries. "
+ seen.size() + " unique values were generated before exhaustion.");
}
public void reset() {
seen.clear();
}
public int size() {
return seen.size();
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/UniqueFairy.java
================================================
package com.devskiller.jfairy;
import com.devskiller.jfairy.producer.company.Company;
import com.devskiller.jfairy.producer.company.CompanyProperties;
import com.devskiller.jfairy.producer.payment.CreditCard;
import com.devskiller.jfairy.producer.payment.IBAN;
import com.devskiller.jfairy.producer.payment.IBANProperties;
import com.devskiller.jfairy.producer.person.Person;
import com.devskiller.jfairy.producer.person.PersonProperties;
/**
* Convenience wrapper that ensures generated objects are unique by their
* natural key (email for Person, name for Company, etc.).
*
* <p>Uniqueness is tracked per entity type. A person email will not conflict
* with a company name. Call {@link #reset()} to clear all tracked values.</p>
*
* <p>This class is not thread-safe. Store the reference and reuse it —
* calling {@code fairy.unique()} in a loop creates independent instances
* with no shared tracking.</p>
*
* <pre>{@code
* UniqueFairy unique = fairy.unique();
* Person p1 = unique.person(); // unique by email
* Person p2 = unique.person(); // different email than p1
* Company c = unique.company(); // unique by name
* unique.reset();
* }</pre>
*/
public final class UniqueFairy {
private final Fairy fairy;
private final UniqueEnforcer<Person> personEnforcer;
private final UniqueEnforcer<Company> companyEnforcer;
private final UniqueEnforcer<IBAN> ibanEnforcer;
private final UniqueEnforcer<CreditCard> creditCardEnforcer;
UniqueFairy(Fairy fairy, int maxRetries) {
this.fairy = fairy;
this.personEnforcer = UniqueEnforcer.of(fairy::person, Person::getEmail, maxRetries);
this.companyEnforcer = UniqueEnforcer.of(fairy::company, Company::getName, maxRetries);
// Lambda needed: fairy::iban is ambiguous (overloaded no-arg and vararg)
this.ibanEnforcer = UniqueEnforcer.of(() -> fairy.iban(), IBAN::getIbanNumber, maxRetries);
this.creditCardEnforcer = UniqueEnforcer.of(fairy::creditCard, CreditCard::getCardNumber, maxRetries);
}
public Person person(PersonProperties.PersonProperty... personProperties) {
if (personProperties.length == 0) {
return personEnforcer.next();
}
return personEnforcer.next(() -> fairy.person(personProperties));
}
public Company company(CompanyProperties.CompanyProperty... companyProperties) {
if (companyProperties.length == 0) {
return companyEnforcer.next();
}
return companyEnforcer.next(() -> fairy.company(companyProperties));
}
public IBAN iban(IBANProperties.Property... properties) {
if (properties.length == 0) {
return ibanEnforcer.next();
}
return ibanEnforcer.next(() -> fairy.iban(properties));
}
public CreditCard creditCard() {
return creditCardEnforcer.next();
}
public void reset() {
personEnforcer.reset();
companyEnforcer.reset();
ibanEnforcer.reset();
creditCardEnforcer.reset();
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/UniqueGenerationException.java
================================================
package com.devskiller.jfairy;
public class UniqueGenerationException extends RuntimeException {
private static final long serialVersionUID = 1L;
public UniqueGenerationException(String message) {
super(message);
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/data/DataMaster.java
================================================
package com.devskiller.jfairy.data;
import java.util.List;
import com.devskiller.jfairy.producer.util.LanguageCode;
/**
* Providing access to localized data used by producers.
* <p>
* This master component acts as the central registry for retrieving
* strings and structured data based on specific keys and language codes.
*
* @author Olga Maciaszek-Sharma
* @since 23.04.15
*/
public interface DataMaster {
/**
* Returns a single string value associated with the given key.
*
* @param key the unique identifier for the data entry
* @return the string value found for the key
*/
String getString(String key);
/**
* Returns a list of strings associated with the given key.
*
* @param key the unique identifier for the data entries
* @return a list of string values found for the key
*/
List<String> getStringList(String key);
/**
* Retrieves structured data of a specific type and converts it to the requested class.
*
* @param dataKey the root key for the data search
* @param type the specific sub-type or category
* @param resultClass the class type to which the result should be cast
* @param <T> the type of the result object
* @return an instance of the requested type containing the values
*/
<T> T getValuesOfType(String dataKey, String type, Class<T> resultClass);
/**
* Selects a random string value from the entries associated with the given key.
*
* @param key the unique identifier for the data list
* @return a randomly selected string value
*/
String getRandomValue(String key);
/**
* Returns the language code currently used by this data master.
*
* @return the active LanguageCode
*/
LanguageCode getLanguage();
}
================================================
FILE: src/main/java/com/devskiller/jfairy/data/MapBasedDataMaster.java
================================================
/*
* Copyright (c) 2013 Codearte
*/
package com.devskiller.jfairy.data;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.snakeyaml.engine.v2.api.Load;
import org.snakeyaml.engine.v2.api.LoadSettings;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.util.LanguageCode;
import com.devskiller.jfairy.producer.util.ValidateUtils;
public class MapBasedDataMaster implements DataMaster {
public static final String LANGUAGE_TAG = "language";
private final BaseProducer baseProducer;
private final Map<String, Object> dataSource = new CaseInsensitiveMap();
public MapBasedDataMaster(BaseProducer baseProducer) {
this.baseProducer = baseProducer;
}
/**
* Returns list (null safe) of elements for desired key from dataSource files
*
* @param key desired node key
* @return list of elements for desired key
* @throws IllegalArgumentException if no element for key has been found
*/
@SuppressWarnings("unchecked")
@Override
public List<String> getStringList(String key) {
return getData(key, List.class);
}
@Override
@SuppressWarnings("unchecked")
public <T> T getValuesOfType(String dataKey, final String type, final Class<T> resultClass) {
Map<String, List<T>> data = getData(dataKey, Map.class);
List<T> entries = data.get(type);
return baseProducer.randomElement(entries);
}
/**
* Returns element (null safe) for desired key from dataSource files
*
* @param key desired node key
* @return string element for desired key
* @throws IllegalArgumentException if no element for key has been found
*/
@Override
public String getString(String key) {
return getData(key, String.class);
}
@Override
public String getRandomValue(String key) {
return baseProducer.randomElement(getStringList(key));
}
@Override
public LanguageCode getLanguage() {
String tag = getString(LANGUAGE_TAG).toUpperCase(Locale.ROOT);
try {
return LanguageCode.valueOf(tag);
} catch (IllegalArgumentException ex) {
throw new IllegalArgumentException("Unknown language tag: " + tag, ex);
}
}
@SuppressWarnings("unchecked")
<T> T getData(String key, Class<T> type) {
ValidateUtils.notNull(key, "key cannot be null");
ValidateUtils.notNull(type, "type cannot be null");
Object element = dataSource.get(key);
ValidateUtils.isTrue(element != null, "No such key: %s", key);
ValidateUtils.isTrue(type.isAssignableFrom(element.getClass()),
"Element under desired key has incorrect type - should be %s", type.getSimpleName());
return (T) element;
}
//fixme - should be package-private
public void readResources(String path) throws IOException {
Enumeration<URL> resources =
getClass().getClassLoader().getResources(path);
if (!resources.hasMoreElements()) {
throw new IllegalArgumentException(String.format("File %s was not found on classpath", path));
}
final LoadSettings loadSettings = LoadSettings.builder().build();
while (resources.hasMoreElements()) {
final Load load = new Load(loadSettings);
final URL url = resources.nextElement();
try (InputStream is = url.openStream()) {
@SuppressWarnings("unchecked")
final Map<String, Object> data = (Map<String, Object>) load.loadFromInputStream(is);
appendData(data);
}
}
}
private void appendData(Map<String, Object> data) {
dataSource.putAll(data);
}
private static final class CaseInsensitiveMap extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;
@Override
@SuppressWarnings("unchecked")
public Object put(String key, Object value) {
String loweredKey = key.toLowerCase(Locale.ROOT);
Object valueToInsert = value;
if (value instanceof Map) {
valueToInsert = new CaseInsensitiveMap();
((CaseInsensitiveMap) valueToInsert).putAll((Map<? extends String, ?>) value);
}
return super.put(loweredKey, valueToInsert);
}
@Override
public void putAll(Map<? extends String, ?> map) {
for (Map.Entry<? extends String, ?> entry : map.entrySet()) {
put(entry.getKey(), entry.getValue());
}
}
@Override
public Object get(Object key) {
return super.get(((String) key).toLowerCase(Locale.ROOT));
}
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/package-info.java
================================================
/**
* Core package of the jFairy library.
* <p>
* This package contains the main entry points for the library, such as the {@link com.devskiller.jfairy.Fairy}
* facade and the {@link com.devskiller.jfairy.Bootstrap} class for initialization.
* <p>
* The {@link com.devskiller.jfairy.FairyFactory} provides mechanisms to create localized instances
* of the data generators.
*/
@NullMarked
package com.devskiller.jfairy;
import org.jspecify.annotations.NullMarked;
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/BaseProducer.java
================================================
package com.devskiller.jfairy.producer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class BaseProducer {
private final RandomGenerator random;
public BaseProducer(RandomGenerator random) {
this.random = random;
}
/**
* Generates random boolean
*
* @return random boolean
*/
public boolean trueOrFalse() {
return random.nextBoolean();
}
/**
* Returns random element from passed List
*
* @param <T> element generic type
* @param elements list to process
* @return random list element
*/
public <T> T randomElement(List<T> elements) {
return elements.get(randomBetween(0, elements.size() - 1));
}
/**
* Returns random element from passed vararg
*
* @param elements objects to process
* @return random element
*/
public String randomElement(String... elements) {
return randomElement(Arrays.asList(elements));
}
/**
* Returns random enum value
*
* @param <T> element generic type
* @param enumType enum class
* @return random enum value
*/
public <T extends Enum<?>> T randomElement(Class<T> enumType) {
return enumType.getEnumConstants()[randomBetween(0, enumType.getEnumConstants().length - 1)];
}
/**
* Creates new list being random subset of the passed list
*
* @param <T> element generic type
* @param elements list to process
* @param count returned list size
* @return sublist of the elements list
*/
public <T> List<T> randomElements(List<T> elements, int count) {
if (elements.size() >= count) {
return extractRandomList(elements, count);
} else {
List<T> randomElements = new ArrayList<>(extractRandomList(elements, count % elements.size()));
do {
randomElements.addAll(extractRandomList(elements, elements.size()));
} while (randomElements.size() < count);
return randomElements;
}
}
private <T> List<T> extractRandomList(List<T> elements, int count) {
return random.shuffle(elements).subList(0, count);
}
/**
* Returns random int value
*
* @param min value of the random number to be returned. Must be positive.
* @param max value of the random number to be returned. Must be positive.
* @return random {@code int} value between {@code min} (inclusive) and {@code max} (inclusive)
*/
public int randomBetween(int min, int max) {
return random.nextInt(min, max);
}
/**
* Returns random int value
*
* @param max value of the random number to be returned. Must be positive.
* @return random {@code int} value between 0 (inclusive) and {@code max} (inclusive)
*/
public int randomInt(int max) {
return randomBetween(0, max);
}
//TODO: MZA: Duplication - should be merged into one method when consistent logic will be determined
public char randomBetween(char min, char max) {
return (char) randomBetween((int) min, (int) max);
}
/**
* Returns random long value from a range (including both range boundaries).
* It required to satisfied condition min <= max.
*
* @param min lower bound of a range
* @param max higher bound of a range
* @return pseudorandom {@code long} value between {@code mon} (inclusive) and {@code max} (inclusive)
*/
public long randomBetween(long min, long max) {
return random.nextLong(min, max);
}
/**
* Returns random double value
*
* @param min value of the random number to be returned. Must be positive.
* @param max value of the random number to be returned. Must be positive.
* @return random {@code double} value between {@code min} (inclusive) and {@code max} (inclusive)
*/
public double randomBetween(double min, double max) {
return random.nextDouble(min, max);
}
public String randomNumeric(int length) {
return random.randomNumeric(length);
}
public String randomAlphabetic(int length) {
return random.randomAlphabetic(length);
}
public String randomAlphanumeric(int length) {
return random.randomAlphanumeric(length);
}
/**
* Replaces all {@code '?'} characters with random chars from [a - z] range
*
* @param letterString text to process
* @return text with replaces {@code '?'} chars
*/
public String letterify(String letterString) {
return letterify(letterString, 'a', 'z');
}
/**
* Replaces all {@code '?'} characters with random chars from [{@code from} - {@code to}] range
*
* @param letterString text to process
* @param from start of the range
* @param to end of the range
* @return text with replaced {@code '?'} chars
*/
public String letterify(String letterString, char from, char to) {
return replaceSymbolWithCharsFromTo(letterString, '?', from, to);
}
/**
* Replaces all {@code '#'} characters with random numbers from [0 - 9] range
*
* @param numberString text to process
* @return text with replaced '#' characters
*/
public String numerify(String numberString) {
return numerify(numberString, 0, 9);
}
/**
* Replaces all {@code '#'} characters with random numbers from [{@code from} - {@code to}] range
*
* @param numberString text to process
* @param from start of the range
* @param to end of the range
* @return text with replaced '#' characters
*/
public String numerify(String numberString, int from, int to) {
return replaceSymbolWithCharsFromTo(numberString, '#', Character.forDigit(from, 10), Character.forDigit(to, 10));
}
/**
* Processes text with {@code numerify()} and {@code letterify()} methods
*
* @param string text to process
* @return text with replaced '#' and '?' characters
*/
public String bothify(String string) {
return letterify(numerify(string));
}
/**
* Replaces occurrence of a specific symbol with a random character within the given range.
*
* @param string the template string containing symbols to be replaced
* @param symbol the character to look for in the template
* @param from the lower bound (inclusive) of the random character range
* @param to the upper bound (inclusive) of the random character range
* @return a new string with all symbols replaced by random characters
*/
private String replaceSymbolWithCharsFromTo(String string, char symbol, char from, char to) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < string.length(); i++) {
char c = string.charAt(i);
if (c == symbol) {
result.append(randomBetween(from, to));
} else {
result.append(c);
}
}
return result.toString();
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/DateProducer.java
================================================
/*
* Copyright (c) 2013. Codearte
*/
package com.devskiller.jfairy.producer;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.Period;
import java.time.ZoneOffset;
import com.devskiller.jfairy.producer.util.ValidateUtils;
import static java.time.temporal.TemporalAdjusters.firstDayOfYear;
import static java.time.temporal.TemporalAdjusters.lastDayOfYear;
public class DateProducer {
static final int SECONDS_BEFORE_TO_BE_IN_THE_PAST = 1;
private final BaseProducer baseProducer;
private final TimeProvider timeProvider;
public DateProducer(BaseProducer baseProducer, TimeProvider timeProvider) {
this.baseProducer = baseProducer;
this.timeProvider = timeProvider;
}
public LocalDateTime randomDateInThePast(int maxYearsEarlier) {
ValidateUtils.isTrue(maxYearsEarlier >= 0, "%d has to be >= 0", maxYearsEarlier);
LocalDateTime currentDate = timeProvider.getCurrentTime();
LocalDateTime latestDateInThePast = currentDate.minusSeconds(SECONDS_BEFORE_TO_BE_IN_THE_PAST);
LocalDateTime maxYearsEarlierDate = currentDate.minusYears(maxYearsEarlier);
return randomDateBetweenTwoDates(maxYearsEarlierDate, latestDateInThePast);
}
public LocalDateTime randomDateBetweenYearAndNow(int fromYear) {
int actualYear = timeProvider.getCurrentYear();
return randomDateInThePast(actualYear - fromYear);
}
public LocalDate randomDateBetweenTwoDates(LocalDate from, LocalDate to) {
long epochDay = baseProducer.randomBetween(from.toEpochDay(), to.toEpochDay());
return LocalDate.ofEpochDay(epochDay);
}
public LocalDateTime randomDateBetweenTwoDates(LocalDateTime from, LocalDateTime to) {
long between = baseProducer.randomBetween(from.toInstant(ZoneOffset.UTC).toEpochMilli(),
to.toInstant(ZoneOffset.UTC).toEpochMilli());
return LocalDateTime.ofInstant(Instant.ofEpochMilli(between), ZoneOffset.UTC);
}
public LocalDateTime randomDateBetweenYears(int fromYear, int toYear) {
ValidateUtils.isTrue(fromYear <= toYear, "%d has to be <= %d", fromYear, toYear);
LocalDateTime fromDate = getDateForFirstDayForGivenYear(fromYear);
LocalDateTime toDate = getDateForLastDayForGivenYear(toYear);
return randomDateBetweenTwoDates(fromDate, toDate);
}
private LocalDateTime getDateForLastDayForGivenYear(int year) {
return LocalDateTime.of(year, Month.JANUARY, 1, 23, 59).with(lastDayOfYear());
}
private LocalDateTime getDateForFirstDayForGivenYear(int year) {
return LocalDateTime.of(year, Month.JANUARY, 1, 0, 0).with(firstDayOfYear());
}
public LocalDateTime randomDateBetweenNowAndFuturePeriod(Period futurePeriod) {
LocalDateTime now = timeProvider.getCurrentTime();
return randomDateBetweenTwoDates(now, now.plus(futurePeriod));
}
public LocalDateTime randomDateInTheFuture(int years) {
return randomDateBetweenNowAndFuturePeriod(Period.ofYears(years));
}
public LocalDateTime randomDateInTheFuture() {
return randomDateInTheFuture(100);
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/RandomGenerator.java
================================================
package com.devskiller.jfairy.producer;
import java.util.Collections;
import java.util.List;
import java.util.Random;
/**
* Source of random data for all jFairy producers.
* <p>
* This class encapsulates a {@link Random} instance to ensure determinism
* when a fixed seed is provided.
*/
public class RandomGenerator {
private static final String NUMERIC_CHARS = "0123456789";
private static final String ALPHA_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String ALPHANUMERIC_CHARS = NUMERIC_CHARS + ALPHA_CHARS;
private final Random random;
/**
* Creates a new generator with a default seed.
*/
public RandomGenerator() {
this.random = new Random();
}
/**
* Creates a new generator with a fixed seed for deterministic behavior.
*
* @param seed the initial seed
*/
public RandomGenerator(int seed) {
this.random = new Random(seed);
}
/**
* Returns the next pseudorandom boolean value.
*
* @return a random boolean
*/
public boolean nextBoolean() {
return random.nextBoolean();
}
/**
* Randomly permutes the specified list.
*
* @param <T> the type of elements in the list
* @param elements the list to be shuffled
* @return the shuffled list
*/
public <T> List<T> shuffle(List<T> elements) {
Collections.shuffle(elements, random);
return elements;
}
/**
* Returns a random integer between min and max (inclusive).
*
* @param min lower bound (inclusive)
* @param max upper bound (inclusive)
* @return a random integer
*/
public int nextInt(int min, int max) {
return min == max ? min : random.nextInt(min, max + 1);
}
/**
* Returns a random long between min and max (inclusive).
*
* @param min lower bound (inclusive)
* @param max upper bound (inclusive)
* @return a random long
*/
public long nextLong(long min, long max) {
return min == max ? min : random.nextLong(min, max + 1);
}
/**
* Returns a random double between min (inclusive) and max (exclusive).
*
* @param min lower bound (inclusive)
* @param max upper bound (exclusive)
* @return a random double
*/
public double nextDouble(double min, double max) {
return min == max ? min : random.nextDouble(min, max);
}
/**
* Generates a random numeric string.
*
* @param length desired length
* @return string of digits
*/
public String randomNumeric(int length) {
return randomString(length, NUMERIC_CHARS);
}
/**
* Generates a random alphabetic string (upper-case ASCII).
*
* @param length desired length
* @return string of letters
*/
public String randomAlphabetic(int length) {
return randomString(length, ALPHA_CHARS);
}
/**
* Generates a random alphanumeric string (upper-case ASCII).
*
* @param length desired length
* @return string of digits and letters
*/
public String randomAlphanumeric(int length) {
return randomString(length, ALPHANUMERIC_CHARS);
}
private String randomString(int length, String alphabet) {
if (length < 0) {
throw new IllegalArgumentException("length must be >= 0, got: " + length);
}
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < length; i++) {
sb.append(alphabet.charAt(random.nextInt(alphabet.length())));
}
return sb.toString();
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/TimeProvider.java
================================================
/*
* Copyright (c) 2013. Codearte
*/
package com.devskiller.jfairy.producer;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
public class TimeProvider {
public int getCurrentYear() {
return getCurrentTime().getYear();
}
public LocalDateTime getCurrentTime() {
return LocalDateTime.now(ZoneId.systemDefault());
}
public LocalDate getCurrentDate() {
return LocalDate.now(ZoneId.systemDefault());
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/VATIdentificationNumberProvider.java
================================================
/*
* Copyright (c) 2013 Codearte and authors
*/
package com.devskiller.jfairy.producer;
import java.util.function.Supplier;
/**
* VAT identification number (VATIN)
*
* @author mariuszs
* @since 02.11.13.
*/
public interface VATIdentificationNumberProvider extends Supplier<String> {
@Override
String get();
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/Company.java
================================================
package com.devskiller.jfairy.producer.company;
public class Company {
private final String name;
private final String domain;
private final String email;
private final String vatIdentificationNumber;
public Company(String name, String domain, String email, String vatIdentificationNumber) {
this.name = name;
this.domain = domain;
this.email = email;
this.vatIdentificationNumber = vatIdentificationNumber;
}
public String getName() {
return name;
}
public String getUrl() {
return "http://www." + domain;
}
public String getEmail() {
return email + "@" + domain;
}
public String getDomain() {
return domain;
}
public String getVatIdentificationNumber() {
return vatIdentificationNumber;
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/CompanyFactory.java
================================================
package com.devskiller.jfairy.producer.company;
public interface CompanyFactory {
CompanyProvider produceCompany(CompanyProperties.CompanyProperty... companyProperties);
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/CompanyFactoryImpl.java
================================================
package com.devskiller.jfairy.producer.company;
import com.devskiller.jfairy.data.DataMaster;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider;
public class CompanyFactoryImpl implements CompanyFactory {
private final BaseProducer baseProducer;
private final DataMaster dataMaster;
private final VATIdentificationNumberProvider vatIdentificationNumberProvider;
public CompanyFactoryImpl(BaseProducer baseProducer,
DataMaster dataMaster,
VATIdentificationNumberProvider vatIdentificationNumberProvider) {
this.baseProducer = baseProducer;
this.dataMaster = dataMaster;
this.vatIdentificationNumberProvider = vatIdentificationNumberProvider;
}
@Override
public CompanyProvider produceCompany(CompanyProperties.CompanyProperty... companyProperties) {
return new DefaultCompanyProvider(baseProducer, dataMaster, vatIdentificationNumberProvider, companyProperties);
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/CompanyProperties.java
================================================
package com.devskiller.jfairy.producer.company;
public final class CompanyProperties {
private CompanyProperties() {
}
public abstract static class CompanyProperty {
public abstract void apply(CompanyProvider company);
public static CompanyProperty withName(final String name) {
return new CompanyProperty() {
@Override
public void apply(CompanyProvider companyProvider) {
companyProvider.setName(name);
}
};
}
public static CompanyProperty withDomain(final String domain) {
return new CompanyProperty() {
@Override
public void apply(CompanyProvider companyProvider) {
companyProvider.setDomain(domain);
}
};
}
public static CompanyProperty withEmail(final String email) {
return new CompanyProperty() {
@Override
public void apply(CompanyProvider companyProvider) {
companyProvider.setEmail(email);
}
};
}
public static CompanyProperty withVatIdentificationNumber(final String vatIdentificationNumber) {
return new CompanyProperty() {
@Override
public void apply(CompanyProvider companyProvider) {
companyProvider.setVatIdentificationNumber(vatIdentificationNumber);
}
};
}
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/CompanyProvider.java
================================================
package com.devskiller.jfairy.producer.company;
import java.util.function.Supplier;
public interface CompanyProvider extends Supplier<Company> {
String DOMAIN = "domains";
String COMPANY_SUFFIX = "companySuffixes";
String COMPANY_NAME = "companyNames";
String COMPANY_EMAIL = "companyEmails";
@Override
Company get();
void generateName();
void generateDomain();
void generateEmail();
void generateVatIdentificationNumber();
void setName(String name);
void setDomain(String domain);
void setEmail(String email);
void setVatIdentificationNumber(String vatIdentificationNumber);
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/DefaultCompanyProvider.java
================================================
package com.devskiller.jfairy.producer.company;
import java.util.Locale;
import com.devskiller.jfairy.data.DataMaster;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider;
import static com.devskiller.jfairy.producer.util.StringUtils.deleteWhitespace;
import static com.devskiller.jfairy.producer.util.StringUtils.escapeNonAscii;
import static com.devskiller.jfairy.producer.util.StringUtils.latinize;
import static com.devskiller.jfairy.producer.util.StringUtils.strip;
public class DefaultCompanyProvider implements CompanyProvider {
protected String name;
protected String domain;
protected String email;
protected String vatIdentificationNumber;
protected final BaseProducer baseProducer;
protected final DataMaster dataMaster;
protected final VATIdentificationNumberProvider vatIdentificationNumberProvider;
public DefaultCompanyProvider(BaseProducer baseProducer,
DataMaster dataMaster,
VATIdentificationNumberProvider vatIdentificationNumberProvider,
CompanyProperties.CompanyProperty... companyProperties) {
this.baseProducer = baseProducer;
this.dataMaster = dataMaster;
this.vatIdentificationNumberProvider = vatIdentificationNumberProvider;
for (CompanyProperties.CompanyProperty companyProperty : companyProperties) {
companyProperty.apply(this);
}
}
@Override
public Company get() {
generateName();
generateDomain();
generateEmail();
generateVatIdentificationNumber();
return new Company(name, domain, email, vatIdentificationNumber);
}
@Override
public void generateName() {
if (name != null) {
return;
}
name = dataMaster.getRandomValue(COMPANY_NAME);
if (baseProducer.trueOrFalse()) {
name += " " + dataMaster.getRandomValue(COMPANY_SUFFIX);
}
}
/**
* In case of the illegal hostname characters in company name
* and truncate it if it is too long (length > 10) after escape
* <p>
* It is compatible with other non-latin language and will not change the original result for latin language.
* <p>
* P.S. Actually the best way for Chinese here is to use phonetic writing (so as Japanese or Korean)
*/
@Override
public void generateDomain() {
if (domain != null) {
return;
}
String host = latinize(strip(deleteWhitespace(name.toLowerCase(Locale.ROOT)), ".").replace("/", ""));
int len1 = host.length();
host = escapeNonAscii(host).replaceAll("\\\\u", "");
int len2 = host.length();
if (len2 > len1 && len2 > 10) {
host = host.substring(0, 10);
}
domain = host + "." + dataMaster.getRandomValue(DOMAIN);
}
@Override
public void generateEmail() {
if (email != null) {
return;
}
email = dataMaster.getRandomValue(COMPANY_EMAIL);
}
@Override
public void generateVatIdentificationNumber() {
if (vatIdentificationNumber != null) {
return;
}
vatIdentificationNumber = vatIdentificationNumberProvider.get();
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public void setDomain(String domain) {
this.domain = domain;
}
@Override
public void setEmail(String email) {
this.email = email;
}
@Override
public void setVatIdentificationNumber(String vatIdentificationNumber) {
this.vatIdentificationNumber = vatIdentificationNumber;
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/br/BrVATIdentificationNumberProvider.java
================================================
package com.devskiller.jfairy.producer.company.locale.br;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider;
/**
* Brazilian CNPJ (Cadastro Nacional da Pessoa Jurídica) generator.
*/
public class BrVATIdentificationNumberProvider implements VATIdentificationNumberProvider {
private final BaseProducer baseProducer;
public BrVATIdentificationNumberProvider(BaseProducer baseProducer) {
this.baseProducer = baseProducer;
}
@Override
public String get() {
int[] digits = new int[12];
for (int i = 0; i < 8; i++) {
digits[i] = baseProducer.randomBetween(0, 9);
}
digits[8] = 0;
digits[9] = 0;
digits[10] = 0;
digits[11] = 1;
int d1 = calculateCheckDigit(digits, 12);
int d2 = calculateCheckDigit(digits, d1, 13);
return String.format("%d%d.%d%d%d.%d%d%d/%d%d%d%d-%d%d",
digits[0], digits[1], digits[2], digits[3], digits[4],
digits[5], digits[6], digits[7], digits[8], digits[9],
digits[10], digits[11], d1, d2);
}
private static final int[] WEIGHTS = {6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2};
private int calculateCheckDigit(int[] digits, int length) {
int sum = 0;
for (int i = 0; i < length; i++) {
sum += digits[i] * WEIGHTS[WEIGHTS.length - length + i];
}
int remainder = 11 - (sum % 11);
return remainder >= 10 ? 0 : remainder;
}
private int calculateCheckDigit(int[] digits, int previousDigit, int length) {
int sum = 0;
for (int i = 0; i < digits.length; i++) {
sum += digits[i] * WEIGHTS[WEIGHTS.length - length + i];
}
sum += previousDigit * WEIGHTS[WEIGHTS.length - 1];
int remainder = 11 - (sum % 11);
return remainder >= 10 ? 0 : remainder;
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/de/DeVATIdentificationNumberProvider.java
================================================
package com.devskiller.jfairy.producer.company.locale.de;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider;
/**
* German VAT identification number (Umsatzsteuer-Identifikationsnummer or USt-IdNr.)
* <p>
* <a href="https://en.wikipedia.org/wiki/VAT_identification_number">VAT identification number</a>
*
* @author Roland Weisleder
*/
public class DeVATIdentificationNumberProvider implements VATIdentificationNumberProvider {
private static final String VALID_NUMBER_PATTERN = "^[0-9]{9}$";
private final BaseProducer baseProducer;
public DeVATIdentificationNumberProvider(BaseProducer baseProducer) {
this.baseProducer = baseProducer;
}
@Override
public String get() {
return baseProducer.randomNumeric(9);
}
public boolean isValid(String vatIdentificationNumber) {
return vatIdentificationNumber.matches(VALID_NUMBER_PATTERN);
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/en/EnVATIdentificationNumberProvider.java
================================================
package com.devskiller.jfairy.producer.company.locale.en;
import java.util.Set;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.util.StringUtils;
/**
* American VAT Identification Number (known as Employer Identification Number or EIN in the United States)
* <p>
* <a href="https://en.wikipedia.org/wiki/Employer_Identification_Number">Employer Identification Number</a>
*
* @author Olga Maciaszek-Sharma
* @since 21.03.15
*/
public class EnVATIdentificationNumberProvider implements VATIdentificationNumberProvider {
private static final int EIN_LENGTH = 10;
private static final int HYPHEN_INDEX = 2;
private static final int SERIAL_NUMBER_LENGTH = 7;
private static final int SERIAL_NUMBER_INDEX = 3;
private static final int AREA_NUMBER_LENGTH = 2;
private final BaseProducer baseProducer;
private static final Set<Integer> EXCLUDED_NUMBERS = Set.of(7, 8, 9, 17, 18, 19, 28, 29, 41, 47, 49, 69, 70, 79, 89, 96, 97);
public EnVATIdentificationNumberProvider(BaseProducer baseProducer) {
this.baseProducer = baseProducer;
}
@Override
public String get() {
char[] ein = new char[EIN_LENGTH];
fillHyphen(ein);
fillAreaNumber(ein);
fillSerialNumber(ein);
return String.valueOf(ein);
}
private void fillSerialNumber(char[] ein) {
String number = String.valueOf(baseProducer.randomBetween(1, 9999));
char[] digits = StringUtils.leftPad(number, SERIAL_NUMBER_LENGTH, "0").toCharArray();
System.arraycopy(digits, 0, ein, SERIAL_NUMBER_INDEX, digits.length);
}
private void fillAreaNumber(char[] ein) {
int number;
do {
number = baseProducer.randomBetween(0, 99);
} while (EXCLUDED_NUMBERS.contains(number));
char[] digits = StringUtils.leftPad(Integer.toString(number), AREA_NUMBER_LENGTH, "0").toCharArray();
System.arraycopy(digits, 0, ein, 0, digits.length);
}
private void fillHyphen(char[] ein) {
ein[HYPHEN_INDEX] = '-';
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/es/EsVATIdentificationNumberProvider.java
================================================
package com.devskiller.jfairy.producer.company.locale.es;
import java.util.Locale;
import java.util.regex.Pattern;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.person.Country;
/**
* Spanish VAT Identification Number (known as Número de Identificación Fiscal (for freelancers) or Código de Identificación Fiscal (for companies) in Spain)
* <p>
* <a href="https://en.wikipedia.org/wiki/VAT_identification_number">VAT identification number</a>
*/
public class EsVATIdentificationNumberProvider implements VATIdentificationNumberProvider {
private static final String REGEX_CIF = "^[A-Z][0-9]{2}[0-9]{5}([KPQSABEH]|[0-9]|[A-Z])$";
private final BaseProducer baseProducer;
private final Pattern regexCif;
private final Locale primaryLocale = Country.Spain.getPrimaryLocale();
public EsVATIdentificationNumberProvider(BaseProducer baseProducer) {
this.baseProducer = baseProducer;
this.regexCif = Pattern.compile(REGEX_CIF);
}
@Override
public String get() {
return String.format("%s%s%s",
baseProducer.randomAlphabetic(1).toUpperCase(primaryLocale),
baseProducer.randomNumeric(7),
baseProducer.randomAlphanumeric(1).toUpperCase(primaryLocale));
}
public boolean isValid(String cif) {
return this.regexCif.matcher(cif).matches();
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/fr/FrVATIdentificationNumberProvider.java
================================================
package com.devskiller.jfairy.producer.company.locale.fr;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.person.Country;
/**
* Provider for French VAT identification numbers (TVA intracommunautaire).
* <p>
* Format: FR + 2 digits (key) + 9 digits (SIREN).<br>
* The "SIREN" satisfies the Luhn algorithm.
*
* @author Markus Spann
* @since 0.8.3
*/
public class FrVATIdentificationNumberProvider implements VATIdentificationNumberProvider {
private final BaseProducer baseProducer;
public FrVATIdentificationNumberProvider(BaseProducer baseProducer) {
this.baseProducer = baseProducer;
}
@Override
public String get() {
String siren = generateLuhnCompliantSiren();
int key = (12 + 3 * (Integer.parseInt(siren) % 97)) % 97;
return Country.France.getCode() + String.format("%02d%s", key, siren);
}
/**
* Generates a 9-digit SIREN number that satisfies the Luhn algorithm.
*
* @return a valid 9-digit SIREN string
*/
private String generateLuhnCompliantSiren() {
int[] digits = new int[9];
int sum = 0;
// generate first 8 digits in a single random call
String base = baseProducer.randomNumeric(8);
for (int i = 0; i < 8; i++) {
digits[i] = Character.digit(base.charAt(i), 10);
}
// calculate Luhn sum for the first 8 digits
// for a 9-digit number, doubling every second digit from the right
// means doubling digits at indices 7, 5, 3, 1 (0-based from left).
for (int i = 0; i < 8; i++) {
int digit = digits[i];
if (i % 2 != 0) {
digit *= 2;
if (digit > 9) {
digit -= 9;
}
}
sum += digit;
}
// calculate and set the check digit (9th digit)
int checkDigit = (10 - (sum % 10)) % 10;
digits[8] = checkDigit;
// build the resulting string
StringBuilder sb = new StringBuilder(9);
for (int d : digits) {
sb.append(d);
}
return sb.toString();
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/ka/KaVATIdentificationNumberProvider.java
================================================
package com.devskiller.jfairy.producer.company.locale.ka;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider;
public class KaVATIdentificationNumberProvider implements VATIdentificationNumberProvider {
private final BaseProducer baseProducer;
public KaVATIdentificationNumberProvider(BaseProducer baseProducer) {
this.baseProducer = baseProducer;
}
@Override
public String get() {
return baseProducer.randomElement("2", "4") + baseProducer.numerify("########");
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/pl/PlVATIdentificationNumberProvider.java
================================================
package com.devskiller.jfairy.producer.company.locale.pl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.util.StringUtils;
/**
* Polish VAT Identification Number (known as NIP Numer Identyfikacji Podatkowej in Poland)
* <p>
* <a href="https://en.wikipedia.org/wiki/VAT_identification_number">VAT identification number</a>
*/
public class PlVATIdentificationNumberProvider implements VATIdentificationNumberProvider {
private static final Logger LOG = LoggerFactory.getLogger(PlVATIdentificationNumberProvider.class);
// ex 1234563218
private static final int NIP_LENGTH = 10;
// ex 123-456-32-18
private static final int FORMATTED_NIP_LENGTH = 13;
private static final int[] CODES = {
101, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123,
124, 125, 126, 127, 128, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 141, 142, 143, 144, 145, 146,
147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 163, 164, 165, 166, 167, 168, 169,
171, 172, 173, 174, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 188, 189, 191, 192, 193,
194, 195, 196, 197, 198, 199, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216,
217, 218, 219, 221, 222, 223, 224, 225, 226, 227, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239,
241, 242, 243, 244, 245, 246, 247, 248, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 261, 262, 263,
264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 286,
287, 288, 289, 291, 292, 293, 294, 295, 296, 297, 298, 301, 302, 311, 312, 313, 314, 315, 316, 317, 318,
319, 321, 322, 323, 324, 325, 326, 327, 328, 329, 331, 332, 333, 334, 335, 336, 337, 338, 339, 341, 342,
343, 344, 345, 346, 347, 348, 349, 351, 352, 353, 354, 355, 356, 357, 358, 359, 361, 362, 363, 364, 365,
366, 367, 368, 369, 371, 372, 373, 374, 375, 376, 377, 378, 379, 381, 382, 383, 384, 385, 386, 387, 388,
389, 391, 392, 393, 394, 395, 396, 397, 398, 399, 411, 412, 413, 414, 415, 416, 417, 418, 419, 421, 422,
423, 424, 425, 426, 427, 428, 429, 431, 432, 433, 434, 435, 436, 437, 438, 439, 441, 442, 443, 444, 445,
446, 447, 448, 449, 451, 452, 453, 454, 455, 456, 457, 458, 459, 461, 462, 463, 464, 465, 466, 467, 468,
469, 471, 472, 473, 474, 475, 476, 477, 478, 479, 481, 482, 483, 484, 485, 486, 487, 488, 489, 491, 492,
493, 494, 495, 496, 497, 498, 499, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 516,
519, 521, 522, 523, 524, 525, 526, 527, 528, 529, 531, 532, 533, 534, 535, 536, 537, 538, 539, 541, 542,
543, 544, 545, 546, 547, 548, 549, 551, 552, 553, 554, 555, 556, 557, 558, 559, 561, 562, 563, 564, 565,
566, 567, 568, 569, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 588,
589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 601, 602, 603, 604, 605, 606, 607, 608, 609, 611, 612,
613, 614, 615, 616, 617, 618, 619, 621, 622, 623, 624, 625, 626, 627, 628, 629, 631, 632, 633, 634, 635,
636, 637, 638, 639, 641, 642, 643, 644, 645, 646, 647, 648, 649, 651, 652, 653, 654, 655, 656, 657, 658,
659, 661, 662, 663, 664, 665, 666, 667, 668, 669, 671, 672, 673, 674, 675, 676, 677, 678, 679, 681, 682,
683, 684, 685, 686, 687, 688, 689, 691, 692, 693, 694, 695, 696, 697, 698, 699, 701, 711, 712, 713, 714,
715, 716, 717, 718, 719, 721, 722, 723, 724, 725, 726, 727, 728, 729, 731, 732, 733, 734, 735, 736, 737,
738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 751, 752, 753, 754, 755, 756, 757, 758, 759, 761,
762, 763, 764, 765, 766, 767, 768, 769, 771, 772, 773, 774, 775, 776, 777, 778, 779, 781, 782, 783, 784,
785, 786, 787, 788, 789, 791, 792, 793, 794, 795, 796, 797, 798, 799, 811, 812, 813, 814, 815, 816, 817,
818, 819, 821, 822, 823, 824, 825, 826, 827, 828, 829, 831, 832, 833, 834, 835, 836, 837, 838, 839, 841,
842, 843, 844, 845, 846, 847, 848, 849, 851, 852, 853, 854, 855, 856, 857, 858, 859, 861, 862, 863, 864,
865, 866, 867, 868, 869, 871, 872, 873, 874, 875, 876, 877, 878, 879, 881, 882, 883, 884, 885, 886, 887,
888, 889, 891, 892, 893, 894, 895, 896, 897, 898, 899, 911, 912, 913, 914, 915, 916, 917, 918, 919, 921,
922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 941, 942, 943, 944,
945, 946, 947, 948, 949, 951, 952, 953, 954, 955, 956, 957, 958, 959, 961, 962, 963, 964, 965, 966, 967,
968, 969, 971, 972, 973, 974, 975, 976, 977, 978, 979, 981, 982, 983, 984, 985, 986, 987, 988, 989, 991,
992, 993, 994, 995, 996, 997, 998
};
private static final int[] WEIGHTS = {6, 5, 7, 2, 3, 4, 5, 6, 7};
// 123______8
private static final int SERIAL_NUMBER_SIZE = 6;
private static final int MAX_SERIAL_NUMBER = 999999;
// 1234563_18
private static final int CHECKSUM_CHAR_INDEX = 9;
static final int MODULO11 = 11;
public static final int TEN = 10;
private final BaseProducer baseProducer;
public PlVATIdentificationNumberProvider(BaseProducer baseProducer) {
this.baseProducer = baseProducer;
}
@Override
public String get() {
int checkSum;
String number;
do {
number = generateNumber();
checkSum = calculateChecksum(number);
// numbers with checkSum == 10 are invalid
} while (checkSum == TEN);
return number + checkSum;
}
private String generateNumber() {
String prefix = String.valueOf(CODES[baseProducer.randomInt(CODES.length - 1)]);
String number = StringUtils.leftPad(String.valueOf(baseProducer.randomInt(MAX_SERIAL_NUMBER)), SERIAL_NUMBER_SIZE, "0");
return prefix + number;
}
// TODO: Move to separate module
public static boolean isValid(String nip) {
String normalizedNip = normalizeNip(nip);
if (normalizedNip.length() != NIP_LENGTH) {
return false;
}
try {
int checksum = calculateChecksum(normalizedNip);
return checksum == normalizedNip.charAt(CHECKSUM_CHAR_INDEX) - '0';
} catch (NumberFormatException ex) {
LOG.debug("Invalid nip {}", nip, ex);
return false;
}
}
private static String normalizeNip(String value) {
if (value.length() == FORMATTED_NIP_LENGTH) {
return value.replaceAll("-", "");
}
return value;
}
private static int calculateChecksum(String nip) {
char[] chars = nip.toCharArray();
int sum = 0;
for (int i = 0; i < WEIGHTS.length; i++) {
sum += (chars[i] - '0') * WEIGHTS[i];
}
return sum % MODULO11;
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/sk/SkVATIdentificationNumberProvider.java
================================================
package com.devskiller.jfairy.producer.company.locale.sk;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.util.StringUtils;
/**
* Slovak VAT Identification Number (known as NIP)
* <p>
* <a href="https://en.wikipedia.org/wiki/VAT_identification_number">VAT identification number</a>
*/
public class SkVATIdentificationNumberProvider implements VATIdentificationNumberProvider {
private static final Logger LOG = LoggerFactory.getLogger(SkVATIdentificationNumberProvider.class);
// ex 1234563218
private static final int NIP_LENGTH = 10;
// ex 123-456-32-18
private static final int FORMATTED_NIP_LENGTH = 13;
private static final int[] CODES = {
101, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123,
124, 125, 126, 127, 128, 129, 131, 132, 133, 134, 135, 136, 137, 138, 139, 141, 142, 143, 144, 145, 146,
147, 148, 149, 151, 152, 153, 154, 155, 156, 157, 158, 159, 161, 162, 163, 164, 165, 166, 167, 168, 169,
171, 172, 173, 174, 175, 176, 177, 178, 179, 181, 182, 183, 184, 185, 186, 187, 188, 189, 191, 192, 193,
194, 195, 196, 197, 198, 199, 201, 202, 203, 204, 205, 206, 207, 208, 209, 211, 212, 213, 214, 215, 216,
217, 218, 219, 221, 222, 223, 224, 225, 226, 227, 228, 229, 231, 232, 233, 234, 235, 236, 237, 238, 239,
241, 242, 243, 244, 245, 246, 247, 248, 249, 251, 252, 253, 254, 255, 256, 257, 258, 259, 261, 262, 263,
264, 265, 266, 267, 268, 269, 271, 272, 273, 274, 275, 276, 277, 278, 279, 281, 282, 283, 284, 285, 286,
287, 288, 289, 291, 292, 293, 294, 295, 296, 297, 298, 301, 302, 311, 312, 313, 314, 315, 316, 317, 318,
319, 321, 322, 323, 324, 325, 326, 327, 328, 329, 331, 332, 333, 334, 335, 336, 337, 338, 339, 341, 342,
343, 344, 345, 346, 347, 348, 349, 351, 352, 353, 354, 355, 356, 357, 358, 359, 361, 362, 363, 364, 365,
366, 367, 368, 369, 371, 372, 373, 374, 375, 376, 377, 378, 379, 381, 382, 383, 384, 385, 386, 387, 388,
389, 391, 392, 393, 394, 395, 396, 397, 398, 399, 411, 412, 413, 414, 415, 416, 417, 418, 419, 421, 422,
423, 424, 425, 426, 427, 428, 429, 431, 432, 433, 434, 435, 436, 437, 438, 439, 441, 442, 443, 444, 445,
446, 447, 448, 449, 451, 452, 453, 454, 455, 456, 457, 458, 459, 461, 462, 463, 464, 465, 466, 467, 468,
469, 471, 472, 473, 474, 475, 476, 477, 478, 479, 481, 482, 483, 484, 485, 486, 487, 488, 489, 491, 492,
493, 494, 495, 496, 497, 498, 499, 501, 502, 503, 504, 505, 506, 507, 508, 509, 511, 512, 513, 514, 516,
519, 521, 522, 523, 524, 525, 526, 527, 528, 529, 531, 532, 533, 534, 535, 536, 537, 538, 539, 541, 542,
543, 544, 545, 546, 547, 548, 549, 551, 552, 553, 554, 555, 556, 557, 558, 559, 561, 562, 563, 564, 565,
566, 567, 568, 569, 571, 572, 573, 574, 575, 576, 577, 578, 579, 581, 582, 583, 584, 585, 586, 587, 588,
589, 591, 592, 593, 594, 595, 596, 597, 598, 599, 601, 602, 603, 604, 605, 606, 607, 608, 609, 611, 612,
613, 614, 615, 616, 617, 618, 619, 621, 622, 623, 624, 625, 626, 627, 628, 629, 631, 632, 633, 634, 635,
636, 637, 638, 639, 641, 642, 643, 644, 645, 646, 647, 648, 649, 651, 652, 653, 654, 655, 656, 657, 658,
659, 661, 662, 663, 664, 665, 666, 667, 668, 669, 671, 672, 673, 674, 675, 676, 677, 678, 679, 681, 682,
683, 684, 685, 686, 687, 688, 689, 691, 692, 693, 694, 695, 696, 697, 698, 699, 701, 711, 712, 713, 714,
715, 716, 717, 718, 719, 721, 722, 723, 724, 725, 726, 727, 728, 729, 731, 732, 733, 734, 735, 736, 737,
738, 739, 741, 742, 743, 744, 745, 746, 747, 748, 749, 751, 752, 753, 754, 755, 756, 757, 758, 759, 761,
762, 763, 764, 765, 766, 767, 768, 769, 771, 772, 773, 774, 775, 776, 777, 778, 779, 781, 782, 783, 784,
785, 786, 787, 788, 789, 791, 792, 793, 794, 795, 796, 797, 798, 799, 811, 812, 813, 814, 815, 816, 817,
818, 819, 821, 822, 823, 824, 825, 826, 827, 828, 829, 831, 832, 833, 834, 835, 836, 837, 838, 839, 841,
842, 843, 844, 845, 846, 847, 848, 849, 851, 852, 853, 854, 855, 856, 857, 858, 859, 861, 862, 863, 864,
865, 866, 867, 868, 869, 871, 872, 873, 874, 875, 876, 877, 878, 879, 881, 882, 883, 884, 885, 886, 887,
888, 889, 891, 892, 893, 894, 895, 896, 897, 898, 899, 911, 912, 913, 914, 915, 916, 917, 918, 919, 921,
922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 941, 942, 943, 944,
945, 946, 947, 948, 949, 951, 952, 953, 954, 955, 956, 957, 958, 959, 961, 962, 963, 964, 965, 966, 967,
968, 969, 971, 972, 973, 974, 975, 976, 977, 978, 979, 981, 982, 983, 984, 985, 986, 987, 988, 989, 991,
992, 993, 994, 995, 996, 997, 998
};
private static final int[] WEIGHTS = {6, 5, 7, 2, 3, 4, 5, 6, 7};
// 123______8
private static final int SERIAL_NUMBER_SIZE = 6;
private static final int MAX_SERIAL_NUMBER = 999999;
// 1234563_18
private static final int CHECKSUM_CHAR_INDEX = 9;
static final int MODULO11 = 11;
public static final int TEN = 10;
private final BaseProducer baseProducer;
public SkVATIdentificationNumberProvider(BaseProducer baseProducer) {
this.baseProducer = baseProducer;
}
@Override
public String get() {
int checkSum;
String number;
do {
number = generateNumber();
checkSum = calculateChecksum(number);
// numbers with checkSum == 10 are invalid
} while (checkSum == TEN);
return number + checkSum;
}
private String generateNumber() {
String prefix = String.valueOf(CODES[baseProducer.randomInt(CODES.length - 1)]);
String number = StringUtils.leftPad(String.valueOf(baseProducer.randomInt(MAX_SERIAL_NUMBER)), SERIAL_NUMBER_SIZE, "0");
return prefix + number;
}
public static boolean isValid(String nip) {
String normalizedNip = normalizeNip(nip);
if (normalizedNip.length() != NIP_LENGTH) {
return false;
}
try {
int checksum = calculateChecksum(normalizedNip);
return checksum == normalizedNip.charAt(CHECKSUM_CHAR_INDEX) - '0';
} catch (NumberFormatException ex) {
LOG.debug("Invalid nip {}", nip, ex);
return false;
}
}
private static String normalizeNip(String value) {
if (value.length() == FORMATTED_NIP_LENGTH) {
return value.replaceAll("-", "");
}
return value;
}
private static int calculateChecksum(String nip) {
char[] chars = nip.toCharArray();
int sum = 0;
for (int i = 0; i < WEIGHTS.length; i++) {
sum += (chars[i] - '0') * WEIGHTS[i];
}
return sum % MODULO11;
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/sv/SvVATIdentificationNumberProvider.java
================================================
package com.devskiller.jfairy.producer.company.locale.sv;
import java.time.LocalDate;
import java.time.ZoneId;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.DateProducer;
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.person.NationalIdentificationNumberFactory;
import com.devskiller.jfairy.producer.person.NationalIdentificationNumberProvider;
import com.devskiller.jfairy.producer.util.StringUtils;
import static com.devskiller.jfairy.producer.person.NationalIdentificationNumberProperties.dateOfBirth;
import static com.devskiller.jfairy.producer.person.locale.sv.SvNationalIdentificationNumberProvider.calculateChecksum;
/**
* Swedish VAT Identification Number (known as Momsnummer in Sweden)
* <p>
* <a href="https://en.wikipedia.org/wiki/VAT_identification_number">VAT identification number</a>
*/
public class SvVATIdentificationNumberProvider implements VATIdentificationNumberProvider {
private static final int VAT_IDENTIFICATION_NUMBER_LENGTH = 14;
private static final int SOLE_TRADER_UPPER_AGE_LIMIT = 16;
private static final int SOLE_TRADER_LOWER_AGE_LIMIT = 100;
private static final String SE = "SE";
private final BaseProducer baseProducer;
private final DateProducer dateProducer;
private final NationalIdentificationNumberFactory nationalIdentificationNumberFactory;
public SvVATIdentificationNumberProvider(BaseProducer baseProducer, DateProducer dateProducer, NationalIdentificationNumberFactory nationalIdentificationNumberFactory) {
this.baseProducer = baseProducer;
this.dateProducer = dateProducer;
this.nationalIdentificationNumberFactory = nationalIdentificationNumberFactory;
}
@Override
public String get() {
boolean isSoleTrader = baseProducer.trueOrFalse(); // Approximately 50% probability of a company to be of type sole trader (enskild firma)
if (isSoleTrader) {
return generateVatNumberForSoleTrader();
}
int randomGroupNumber = baseProducer.randomElement(GroupNumber.class).getValue();
String randomNumericBetween20And99 = StringUtils.leftPad(String.valueOf(baseProducer.randomBetween(20, 99)), 2, "0");
String organizationNumberWithoutChecksum = randomGroupNumber + baseProducer.randomNumeric(1)
+ randomNumericBetween20And99 + baseProducer.randomNumeric(5);
String organizationNumber = organizationNumberWithoutChecksum + calculateChecksum(organizationNumberWithoutChecksum);
return SE + organizationNumber + "01";
}
private String generateVatNumberForSoleTrader() {
LocalDate now = LocalDate.now(ZoneId.systemDefault());
LocalDate lowerAgeLimit = now.minusYears(SOLE_TRADER_LOWER_AGE_LIMIT);
LocalDate upperAgeLimit = now.minusYears(SOLE_TRADER_UPPER_AGE_LIMIT);
LocalDate dateOfBirth = dateProducer.randomDateBetweenTwoDates(lowerAgeLimit, upperAgeLimit);
NationalIdentificationNumberProvider nationalIdentificationNumberProvider =
nationalIdentificationNumberFactory.produceNationalIdentificationNumberProvider(
dateOfBirth(dateOfBirth));
String personalIdentityNumber = nationalIdentificationNumberProvider.get().getValue();
return SE + personalIdentityNumber.replace("-", "") + "01";
}
public static boolean isValid(String vatIdentificationNumber) {
int length = vatIdentificationNumber.length();
if (length != VAT_IDENTIFICATION_NUMBER_LENGTH) {
return false;
}
int checksum = Integer.parseInt(Character.toString(vatIdentificationNumber.charAt(length - 3)));
int checkDigit = calculateChecksum(vatIdentificationNumber.substring(2, vatIdentificationNumber.length() - 2));
return checkDigit == checksum;
}
/**
* Group number used to determine the first numer in a swedish organization number
* Enum is translated from swedish wiki <a href="https://sv.wikipedia.org/wiki/Organisationsnummer">...</a>
*/
private enum GroupNumber {
ESTATE(1), // Dödsbon
STATE_OR_COUNTY_OR_MUNICIPALITY_OR_PARISH(2), // Stat, landsting, kommuner, församlingar
FOREIGN_COMPANY(3), // Utländska företag som bedriver näringsverksamhet eller äger fastigheter i Sverige
LIMITED_COMPANY(5), // Aktiebolag
PARTNERSHIP(6), // Enkelt bolag
ECONOMIC_ASSOCIATION(7), // Ekonomiska föreningar
NON_PROFIT_ASSOCIATION_OR_FOUNDATION(8), // Ideella föreningar och stiftelser
TRADING_COMPANY_OR_LIMITED_COMPANY_OR_PARTNERSHIP(9); // Handelsbolag, kommanditbolag och enkla bolag
private final int value;
GroupNumber(int value) {
this.value = value;
}
int getValue() {
return value;
}
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/tr/TrVATIdentificationNumberProvider.java
================================================
package com.devskiller.jfairy.producer.company.locale.tr;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider;
/**
* Turkish VKN (Vergi Kimlik Numarası) generator.
* 10 digits.
* Last digit is a check digit.
*/
public class TrVATIdentificationNumberProvider implements VATIdentificationNumberProvider {
private final BaseProducer baseProducer;
public TrVATIdentificationNumberProvider(BaseProducer baseProducer) {
this.baseProducer = baseProducer;
}
@Override
public String get() {
int[] digits = new int[10];
for (int i = 0; i < 9; i++) {
digits[i] = baseProducer.randomBetween(0, 9);
}
int sum = 0;
for (int i = 0; i < 9; i++) {
int p = (digits[i] + 10 - (i + 1)) % 10;
if (p == 9) {
sum += 9;
} else {
int q = (int) (p * Math.pow(2, 9 - i)) % 9;
sum += q;
}
}
int c1 = (10 - (sum % 10)) % 10;
digits[9] = c1;
StringBuilder sb = new StringBuilder();
for (int digit : digits) {
sb.append(digit);
}
return sb.toString();
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/zh/ZhVATIdentificationNumberProvider.java
================================================
package com.devskiller.jfairy.producer.company.locale.zh;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.RandomGenerator;
import com.devskiller.jfairy.producer.VATIdentificationNumberProvider;
import com.devskiller.jfairy.producer.util.ZhFairyUtil;
/**
* com.devskiller.jfairy.producer.company.locale.zh.ZhVATIdentificationNumberProvider
* <p>
* 6 digit for area location, 9 char (0-9A-Z) for organization code (2 char for business type, 2 char for industry type, 5 char for order number), total 15 digit
*
* @author lhfcws
* @since 2017/3/1
*/
public class ZhVATIdentificationNumberProvider implements VATIdentificationNumberProvider {
private static final BaseProducer BASE_PRODUCER = new BaseProducer(new RandomGenerator());
@Override
public String get() {
StringBuilder vatBuilder = new StringBuilder();
vatBuilder.append(BASE_PRODUCER.randomElement(ZhFairyUtil.PROV_LIST));
vatBuilder.append(ZhFairyUtil.getRandomNumStr(BASE_PRODUCER, ZhFairyUtil.CITY_MAX, 2));
vatBuilder.append(ZhFairyUtil.getRandomNumStr(BASE_PRODUCER, ZhFairyUtil.DISTRICT_MAX, 2));
vatBuilder.append(getChars(9));
return vatBuilder.toString();
}
private char getChar() {
int rndNum = BASE_PRODUCER.randomBetween(0, 35);
if (rndNum < 10) {
return (char) (49 + rndNum);
} else {
return (char) (65 + rndNum - 10);
}
}
private String getChars(int paddingSize) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < paddingSize; i++) {
sb.append(getChar());
}
return sb.toString();
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/net/IPNumberProducer.java
================================================
package com.devskiller.jfairy.producer.net;
import com.devskiller.jfairy.producer.BaseProducer;
public class IPNumberProducer {
private static final int MAX = 0xFF;
private final BaseProducer baseProducer;
public IPNumberProducer(BaseProducer baseProducer) {
this.baseProducer = baseProducer;
}
public String generate() {
return String.format("%s.%s.%s.%s", ipNumberPart(), ipNumberPart(), ipNumberPart(), ipNumberPart());
}
private int ipNumberPart() {
return baseProducer.randomInt(MAX);
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/net/NetworkProducer.java
================================================
package com.devskiller.jfairy.producer.net;
/**
* TODO: Add emails
*/
public class NetworkProducer {
private final IPNumberProducer ipNumberProducer;
public NetworkProducer(IPNumberProducer ipNumberProducer) {
this.ipNumberProducer = ipNumberProducer;
}
public String ipAddress() {
return ipNumberProducer.generate();
}
/**
* Generates a faked URL based on the current IP address.
* <p>
* The domain name is derived by mapping the digits of the IP address
* to characters starting from 'a'.
*
* @param isHttps specifies whether to use the {@code https} or {@code http} protocol
* @return a formatted URL string, e.g., "https://abcdefghij.com"
*/
public String url(boolean isHttps) {
String mergedIp = ipAddress().replace(".", "");
StringBuilder domainBuilder = new StringBuilder(mergedIp.length());
for (int i = 0; i < mergedIp.length(); i++) {
char digitChar = mergedIp.charAt(i);
// Character.digit is safer and more predictable than getNumericValue
int numericValue = Character.digit(digitChar, 10);
if (numericValue != -1) {
domainBuilder.append((char) (numericValue + 'a'));
}
}
String protocol = "http";
if (isHttps) {
protocol += "s";
}
return protocol + "://" + domainBuilder + ".com";
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/payment/CreditCard.java
================================================
package com.devskiller.jfairy.producer.payment;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* Representation of a faked credit card with its essential security and expiry data.
* <p>
* This class holds information about the card vendor, number, CVV code,
* and the expiration date. It is designed as an immutable object.
*
* @author jkubrynski@gmail.com
* @since 2013-11-17
*/
public class CreditCard {
private final String cardVendor;
private final String cardNumber;
private final String cvv;
private final LocalDateTime expiryDate;
public CreditCard(String cardVendor, String cardNumber, String cvv, LocalDateTime expiryDate) {
this.cardVendor = cardVendor;
this.cardNumber = cardNumber;
this.cvv = cvv;
this.expiryDate = expiryDate;
}
public String getVendor() {
return cardVendor;
}
public String getCardNumber() {
return cardNumber;
}
public String getCvv() {
return cvv;
}
public LocalDateTime getExpiryDate() {
return expiryDate;
}
public String getExpiryDateAsString() {
return String.format("%02d/%s", expiryDate.getMonthValue(), DateTimeFormatter.ofPattern("uu").format(expiryDate));
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/payment/CreditCardProvider.java
================================================
package com.devskiller.jfairy.producer.payment;
import java.time.LocalDateTime;
import java.time.Period;
import java.util.function.Supplier;
import com.devskiller.jfairy.data.DataMaster;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.DateProducer;
public class CreditCardProvider implements Supplier<CreditCard> {
private static final Period DEFAULT_VALIDITY = Period.ofMonths(36);
private static final String DATA_KEY = "creditCardPrefixes";
private static final String CARD_VENDOR = "Visa";
private final DataMaster dataMaster;
private final BaseProducer baseProducer;
private final DateProducer dateProducer;
public CreditCardProvider(DataMaster dataMaster, BaseProducer baseProducer, DateProducer dateProducer) {
this.dataMaster = dataMaster;
this.baseProducer = baseProducer;
this.dateProducer = dateProducer;
}
@Override
public CreditCard get() {
String randomNumber = generateNumber();
LocalDateTime expiryDate = dateProducer.randomDateBetweenNowAndFuturePeriod(DEFAULT_VALIDITY);
return new CreditCard(CARD_VENDOR, randomNumber, baseProducer.numerify("###"), expiryDate);
}
private String generateNumber() {
Integer prefix = dataMaster.getValuesOfType(DATA_KEY, CARD_VENDOR, Integer.class);
String stringPrefix = String.valueOf(prefix);
StringBuilder builder = new StringBuilder(stringPrefix);
builder.append("#".repeat(Math.max(0, 15 - stringPrefix.length())));
return completeNumber(baseProducer.numerify(builder.toString()));
}
/**
* Completes a credit card number by calculating and appending a checksum digit.
* <p>
* Uses a variation of the Luhn algorithm where every second digit is doubled.
* If doubling results in a number greater than 9, the digits are summed.
*
* @param creditCardNumber the partial credit card number to complete
* @return the full credit card number including the checksum digit
* @throws IllegalArgumentException if the input contains non-digit characters
*/
private String completeNumber(String creditCardNumber) {
int sum = 0;
for (int i = 0; i < creditCardNumber.length(); i++) {
int n = Character.digit(creditCardNumber.charAt(i), 10);
if (n == -1) {
throw new IllegalArgumentException("Invalid character in credit card number");
}
if (i % 2 == 0) {
n *= 2;
if (n > 9) {
// For n > 9 (e.g., 10-18), digit sum is equivalent to n - 9
n -= 9;
}
}
sum += n;
}
int checksum = (sum * 9) % 10;
return creditCardNumber + checksum;
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/payment/DefaultIBANProvider.java
================================================
package com.devskiller.jfairy.producer.payment;
import java.util.List;
import java.util.Optional;
import de.speedbanking.iban.Iban;
import de.speedbanking.iban.IbanRegistry;
import de.speedbanking.iban.RandomIban;
import org.jspecify.annotations.Nullable;
import com.devskiller.jfairy.data.DataMaster;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.person.Country;
/**
* ALPHA: Under development
*/
public class DefaultIBANProvider implements IBANProvider {
protected final DataMaster dataMaster;
protected final BaseProducer baseProducer;
protected String countryCode;
public DefaultIBANProvider(BaseProducer baseProducer,
DataMaster dataMaster,
IBANProperties.Property... properties) {
this.dataMaster = dataMaster;
this.baseProducer = baseProducer;
for (IBANProperties.Property property : properties) {
property.apply(this);
}
}
@Override
public @Nullable IBAN get() {
fillCountryCode();
IbanRegistry reg = IbanRegistry.getByCode(countryCode);
if (reg == null) {
return null;
}
Iban iban = RandomIban.of(countryCode);
return new IBAN(iban.getAccountNumber(),
iban.getCheckDigits(),
iban.getBankCode(),
iban.getBban(),
iban.getCountryCode(),
iban.getNationalCheckDigit(),
iban.toString());
}
@Override
public void fillCountryCode() {
if (countryCode == null) {
List<Country> countries = Country.findCountryForLanguage(dataMaster.getLanguage());
Country country = baseProducer.randomElement(countries);
IbanRegistry r = IbanRegistry.getByCode(country.getCode());
countryCode = Optional.ofNullable(r).map(IbanRegistry::name).orElse(null);
}
}
@Override
public void setCountry(String country) {
this.countryCode = country;
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/payment/IBAN.java
================================================
package com.devskiller.jfairy.producer.payment;
public class IBAN {
private final String accountNumber;
private final String checkDigit;
private final String bankCode;
private final String bban;
private final String country;
private final String nationalCheckDigit;
private final String ibanNumber;
public IBAN(String accountNumber, String checkDigit, String bankCode, String bban,
String country, String nationalCheckDigit, String ibanNumber) {
this.accountNumber = accountNumber;
this.checkDigit = checkDigit;
this.bankCode = bankCode;
this.bban = bban;
this.country = country;
this.nationalCheckDigit = nationalCheckDigit;
this.ibanNumber = ibanNumber;
}
public String getAccountNumber() {
return accountNumber;
}
public String getCheckDigit() {
return checkDigit;
}
public String getBankCode() {
return bankCode;
}
public String getBban() {
return bban;
}
public String getCountry() {
return country;
}
public String getNationalCheckDigit() {
return nationalCheckDigit;
}
public String getIbanNumber() {
return ibanNumber;
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/payment/IBANFactory.java
================================================
package com.devskiller.jfairy.producer.payment;
public interface IBANFactory {
IBANProvider produceIBANProvider(IBANProperties.Property... properties);
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/payment/IBANFactoryImpl.java
================================================
package com.devskiller.jfairy.producer.payment;
import com.devskiller.jfairy.data.DataMaster;
import com.devskiller.jfairy.producer.BaseProducer;
public class IBANFactoryImpl implements IBANFactory {
private final BaseProducer baseProducer;
private final DataMaster dataMaster;
public IBANFactoryImpl(BaseProducer baseProducer, DataMaster dataMaster) {
this.baseProducer = baseProducer;
this.dataMaster = dataMaster;
}
@Override
public IBANProvider produceIBANProvider(IBANProperties.Property... properties) {
return new DefaultIBANProvider(baseProducer, dataMaster, properties);
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/payment/IBANProperties.java
================================================
package com.devskiller.jfairy.producer.payment;
import java.util.HashMap;
import java.util.Map;
import de.speedbanking.iban.IbanRegistry;
import com.devskiller.jfairy.producer.util.LanguageCode;
public final class IBANProperties {
private static final Map<LanguageCode, IbanRegistry> COUNTRIES = new HashMap<>();
static {
COUNTRIES.put(LanguageCode.PL, IbanRegistry.PL);
COUNTRIES.put(LanguageCode.EN, IbanRegistry.GB);
COUNTRIES.put(LanguageCode.ES, IbanRegistry.ES);
COUNTRIES.put(LanguageCode.FR, IbanRegistry.FR);
COUNTRIES.put(LanguageCode.KA, IbanRegistry.GE);
COUNTRIES.put(LanguageCode.IT, IbanRegistry.IT);
COUNTRIES.put(LanguageCode.DE, IbanRegistry.DE);
COUNTRIES.put(LanguageCode.SK, IbanRegistry.SK);
COUNTRIES.put(LanguageCode.SV, IbanRegistry.SV);
}
private IBANProperties() {
}
public abstract static class Property {
public abstract void apply(IBANProvider provider);
}
public static Property country(final String country) {
return new Property() {
@Override
public void apply(IBANProvider provider) {
provider.setCountry(country);
}
};
}
public static Property language(final String language) {
return new Property() {
@Override
public void apply(IBANProvider provider) {
provider.setCountry(countryFromLanguage(language));
}
};
}
private static String countryFromLanguage(String lang) {
return COUNTRIES.entrySet().stream()
.filter(locale -> locale.getKey().name().equals(lang))
.map(Map.Entry::getValue)
.map(IbanRegistry::name)
.findFirst()
.orElse("PL");
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/payment/IBANProvider.java
================================================
package com.devskiller.jfairy.producer.payment;
import java.util.function.Supplier;
public interface IBANProvider extends Supplier<IBAN> {
@Override
IBAN get();
void fillCountryCode();
void setCountry(String country);
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/person/AbstractAddressProvider.java
================================================
package com.devskiller.jfairy.producer.person;
import com.devskiller.jfairy.data.DataMaster;
import com.devskiller.jfairy.producer.BaseProducer;
public abstract class AbstractAddressProvider implements AddressProvider {
private static final String POSTAL_CODE_FORMAT = "postal_code";
private static final String CITY = "city";
private static final String STREET = "street";
protected final BaseProducer baseProducer;
protected final DataMaster dataMaster;
public AbstractAddressProvider(DataMaster dataMaster, BaseProducer baseProducer) {
this.baseProducer = baseProducer;
this.dataMaster = dataMaster;
}
public String getCity() {
return dataMaster.getRandomValue(CITY);
}
public String getPostalCode() {
String postalCodeFormat = dataMaster.getRandomValue(POSTAL_CODE_FORMAT);
return baseProducer.numerify(postalCodeFormat);
}
public String getStreet() {
return dataMaster.getRandomValue(STREET);
}
public String getStreetNumber() {
return String.valueOf(baseProducer.randomBetween(1, 199));
}
public String getApartmentNumber() {
return baseProducer.trueOrFalse() ? String.valueOf(baseProducer.randomBetween(1, 350)) : "";
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/person/Address.java
================================================
package com.devskiller.jfairy.producer.person;
public interface Address {
String getStreet();
String getStreetNumber();
String getApartmentNumber();
String getPostalCode();
String getCity();
String getAddressLine1();
String getAddressLine2();
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/person/AddressProvider.java
================================================
package com.devskiller.jfairy.producer.person;
import java.util.function.Supplier;
public interface AddressProvider extends Supplier<Address> {
@Override
Address get();
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/person/CompanyEmailProvider.java
================================================
package com.devskiller.jfairy.producer.person;
import java.util.function.Supplier;
import com.devskiller.jfairy.producer.company.Company;
import static com.devskiller.jfairy.producer.util.StringUtils.latinize;
import static com.devskiller.jfairy.producer.util.StringUtils.lowerCase;
public class CompanyEmailProvider implements Supplier<String> {
private final String firstName;
private final String lastName;
private final Company company;
public CompanyEmailProvider(String firstName, String lastName, Company company) {
this.firstName = firstName;
this.lastName = lastName;
this.company = company;
}
@Override
public String get() {
String email = lowerCase(firstName + '.' + lastName + '@' + company.getDomain()).replaceAll(" ", ".");
return latinize(email);
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/person/Country.java
================================================
package com.devskiller.jfairy.producer.person;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
import com.devskiller.jfairy.producer.util.LanguageCode;
public enum Country {
Poland("PL", LanguageCode.PL),
UnitedKingdom("GB", LanguageCode.EN),
Australia("AU", LanguageCode.EN),
USA("US", LanguageCode.EN),
Canada("CA", LanguageCode.EN, LanguageCode.FR),
Spain("ES", LanguageCode.ES),
France("FR", LanguageCode.FR),
Georgia("GE", LanguageCode.KA),
Italy("IT", LanguageCode.IT),
Germany("DE", LanguageCode.DE),
Sweden("SE", LanguageCode.SV),
China("CN", LanguageCode.ZH),
Brazil("BR", LanguageCode.BR),
Slovakia("SK", LanguageCode.SK),
Turkey("TR", LanguageCode.TR);
// ISO 3166 code
private final String code;
// ISO 639-1
@SuppressWarnings("ImmutableEnumChecker")
private final LanguageCode[] languages;
Country(String code, LanguageCode... language) {
this.code = code;
this.languages = language == null ? new LanguageCode[0] : Arrays.copyOf(language, language.length);
}
public String getCode() {
return code;
}
/**
* Returns the primary Java Locale for this country.
* <p>
* This method uses the first associated language code and the country's ISO code
* to create a {@code Locale} using the modern {@code Locale.of()} factory.
*
* @return the primary {@link java.util.Locale} for this country
* @throws IllegalStateException if no languages are associated with the country
*/
public Locale getPrimaryLocale() {
if (languages.length == 0) {
throw new IllegalStateException("No languages defined for country " + name());
}
return new Locale(languages[0].name().toLowerCase(Locale.ROOT), code);
}
public static List<Country> findCountryForLanguage(LanguageCode language) {
return Arrays.stream(Country.values())
.filter(country -> List.of(country.languages).contains(language))
.collect(Collectors.toList());
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/person/DefaultPersonProvider.java
================================================
package com.devskiller.jfairy.producer.person;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.List;
import com.devskiller.jfairy.data.DataMaster;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.DateProducer;
import com.devskiller.jfairy.producer.TimeProvider;
import com.devskiller.jfairy.producer.company.Company;
import com.devskiller.jfairy.producer.company.CompanyFactory;
import static com.devskiller.jfairy.producer.util.StringUtils.latinize;
import static com.devskiller.jfairy.producer.util.StringUtils.lowerCase;
public class DefaultPersonProvider implements PersonProvider {
protected Person.Sex sex;
protected String telephoneNumberFormat;
protected String mobileTelephoneNumberFormat;
protected Integer age;
protected LocalDate dateOfBirth;
protected Company company;
protected Address address;
protected String firstName;
protected String middleName;
protected String lastName;
protected String email;
protected String username;
protected String telephoneNumber;
protected String mobileTelephoneNumber;
protected String password;
protected String companyEmail;
protected String nationalIdentityCardNumber;
protected String nationalIdentificationNumber;
protected String passportNumber;
protected String jobTitle;
protected Country nationality;
protected final DataMaster dataMaster;
protected final DateProducer dateProducer;
protected final BaseProducer baseProducer;
protected final NationalIdentificationNumberFactory nationalIdentificationNumberFactory;
protected final NationalIdentityCardNumberProvider nationalIdentityCardNumberProvider;
protected final AddressProvider addressProvider;
protected final CompanyFactory companyFactory;
protected final TimeProvider timeProvider;
protected final PassportNumberProvider passportNumberProvider;
public DefaultPersonProvider(DataMaster dataMaster,
DateProducer dateProducer,
BaseProducer baseProducer,
AddressProvider addressProvider,
NationalIdentificationNumberFactory nationalIdentificationNumberFactory,
NationalIdentityCardNumberProvider nationalIdentityCardNumberProvider,
PassportNumberProvider passportNumberProvider,
TimeProvider timeProvider,
CompanyFactory companyFactory,
PersonProperties.PersonProperty... personProperties) {
this.dataMaster = dataMaster;
this.dateProducer = dateProducer;
this.baseProducer = baseProducer;
this.nationalIdentificationNumberFactory = nationalIdentificationNumberFactory;
this.nationalIdentityCardNumberProvider = nationalIdentityCardNumberProvider;
this.addressProvider = addressProvider;
this.passportNumberProvider = passportNumberProvider;
this.companyFactory = companyFactory;
this.timeProvider = timeProvider;
for (PersonProperties.PersonProperty personProperty : personProperties) {
personProperty.apply(this, baseProducer);
}
}
@Override
public Person get() {
generateSex();
generateCompany();
generateFirstName();
generateMiddleName();
generateLastName();
generateEmail();
generateUsername();
generateTelephoneNumber();
generateAge();
generateDateOfBirth();
generateCompanyEmail();
generatePassword();
generateNationalIdentityCardNumber();
generateNationalIdentificationNumber();
generatePassportNumber();
generateAddress();
generateJobTitle();
generateNationality();
generateMobileTelephoneNumber();
return new Person(firstName, middleName, lastName, address, email,
username, password, sex, telephoneNumber, mobileTelephoneNumber, dateOfBirth, age,
nationalIdentityCardNumber, nationalIdentificationNumber, passportNumber,
company, companyEmail, jobTitle, nationality);
}
@Override
public void generateSex() {
if (sex != null) {
return;
}
sex = baseProducer.trueOrFalse() ? Person.Sex.MALE : Person.Sex.FEMALE;
}
@Override
public void generateCompany() {
if (company != null) {
return;
}
company = companyFactory.produceCompany().get();
}
@Override
public void generateFirstName() {
if (firstName != null) {
return;
}
firstName = dataMaster.getValuesOfType(FIRST_NAME, sex.name(), String.class);
}
@Override
public void generateMiddleName() {
if (middleName != null) {
return;
}
middleName = baseProducer.trueOrFalse() ? dataMaster.getValuesOfType(FIRST_NAME, sex.name(), String.class) : "";
}
@Override
public void generateLastName() {
if (lastName != null) {
return;
}
lastName = dataMaster.getValuesOfType(LAST_NAME, sex.name(), String.class);
}
@Override
public void generateEmail() {
if (email != null) {
return;
}
EmailProvider emailProvider = new EmailProvider(dataMaster, baseProducer, firstName, lastName);
email = emailProvider.get();
}
@Override
public void generateUsername() {
if (username != null) {
return;
}
if (baseProducer.trueOrFalse()) {
username = lowerCase(latinize(firstName.substring(0, 1) + lastName));
} else {
username = lowerCase(latinize(firstName + lastName.substring(0, 1)));
}
}
@Override
public void generateTelephoneNumber() {
if (telephoneNumber != null) {
return;
}
if (telephoneNumberFormat == null) {
telephoneNumberFormat = dataMaster.getRandomValue(TELEPHONE_NUMBER_FORMATS);
}
telephoneNumber = baseProducer.numerify(telephoneNumberFormat);
}
@Override
public void generateMobileTelephoneNumber() {
if (mobileTelephoneNumber != null) {
return;
}
if (mobileTelephoneNumberFormat == null) {
mobileTelephoneNumberFormat = dataMaster.getRandomValue(TELEPHONE_NUMBER_FORMATS);
}
mobileTelephoneNumber = baseProducer.numerify(mobileTelephoneNumberFormat);
}
@Override
public void generateAge() {
if (dateOfBirth != null) {
age = (int) ChronoUnit.YEARS.between(dateOfBirth, LocalDateTime.now(ZoneId.systemDefault()));
} else {
if (age != null) {
return;
}
age = baseProducer.randomBetween(MIN_AGE, MAX_AGE);
}
}
@Override
public void generateDateOfBirth() {
if (dateOfBirth != null) {
return;
}
LocalDate maxDate = timeProvider.getCurrentDate().minusYears(age);
LocalDate minDate = maxDate.minusYears(1).plusDays(1);
dateOfBirth = dateProducer.randomDateBetweenTwoDates(minDate, maxDate);
}
@Override
public void generateCompanyEmail() {
if (companyEmail != null) {
return;
}
CompanyEmailProvider companyEmailProvider = new CompanyEmailProvider(firstName, lastName, company);
companyEmail = companyEmailProvider.get();
}
@Override
public void generatePassword() {
if (password != null) {
return;
}
StringBuilder passwordPattern = new StringBuilder();
for (int i = baseProducer.randomBetween(6, 14); i > 0; i--) {
passwordPattern.append(baseProducer.randomElement("?", "#"));
}
password = baseProducer.bothify(passwordPattern.toString());
}
@Override
public void generateNationalIdentityCardNumber() {
if (nationalIdentityCardNumber != null) {
return;
}
nationalIdentityCardNumber = nationalIdentityCardNumberProvider.get();
}
@Override
public void generateNationalIdentificationNumber() {
if (nationalIdentificationNumber != null) {
return;
}
nationalIdentificationNumber = nationalIdentificationNumberFactory.produceNationalIdentificationNumberProvider(
NationalIdentificationNumberProperties.dateOfBirth(dateOfBirth),
NationalIdentificationNumberProperties.sex(sex)).get().getValue();
}
@Override
public void generateAddress() {
if (address != null) {
return;
}
address = addressProvider.get();
}
@Override
public void generatePassportNumber() {
if (passportNumber != null) {
return;
}
passportNumber = passportNumberProvider.get();
}
@Override
public void generateJobTitle() {
if (jobTitle != null) {
return;
}
jobTitle = dataMaster.getRandomValue(JOB_TITLE);
}
private void generateNationality() {
List<Country> countries = Country.findCountryForLanguage(dataMaster.getLanguage());
nationality = !countries.isEmpty() ? baseProducer.randomElement(countries) : Country.UnitedKingdom;
}
@Override
public void setTelephoneNumberFormat(String telephoneFormat) {
telephoneNumberFormat = telephoneFormat;
}
@Override
public void setMobileTelephoneNumberFormat(String mobileTelephoneNumberFormat) {
this.mobileTelephoneNumberFormat = mobileTelephoneNumberFormat;
}
@Override
public void setSex(Person.Sex sex) {
this.sex = sex;
}
@Override
public void setAge(int age) {
this.age = age;
}
@Override
public void setCompany(Company company) {
this.company = company;
}
@Override
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Override
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
@Override
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public void setEmail(String email) {
this.email = email;
}
@Override
public void setUsername(String username) {
this.username = username;
}
@Override
public void setTelephoneNumber(String telephoneNumber) {
this.telephoneNumber = telephoneNumber;
}
@Override
public void setMobileTelephoneNumber(String telephoneNumber) {
this.telephoneNumber = telephoneNumber;
}
@Override
public void setDateOfBirth(LocalDate dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
@Override
public void setPassword(String password) {
this.password = password;
}
@Override
public void setAddress(Address address) {
this.address = address;
}
@Override
public void setCompanyEmail(String companyEmail) {
this.companyEmail = companyEmail;
}
@Override
public void setNationalIdentityCardNumber(String nationalIdentityCardNumber) {
this.nationalIdentityCardNumber = nationalIdentityCardNumber;
}
@Override
public void setNationalIdentificationNumber(String nationalIdentificationNumber) {
this.nationalIdentificationNumber = nationalIdentificationNumber;
}
@Override
public void setPassportNumber(String passportNumber) {
this.passportNumber = passportNumber;
}
@Override
public void setJobTitle(String jobTitle) {
this.jobTitle = jobTitle;
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/person/EmailProvider.java
================================================
package com.devskiller.jfairy.producer.person;
import java.util.function.Supplier;
import com.devskiller.jfairy.data.DataMaster;
import com.devskiller.jfairy.producer.BaseProducer;
import com.devskiller.jfairy.producer.util.StringUtils;
import static com.devskiller.jfairy.producer.person.PersonProvider.PERSONAL_EMAIL;
import static com.devskiller.jfairy.producer.util.StringUtils.latinize;
import static com.devskiller.jfairy.producer.util.StringUtils.lowerCase;
public class EmailProvider implements Supplier<String> {
private final DataMaster dataMaster;
private final BaseProducer baseProducer;
private final String firstName;
private final String lastName;
public EmailProvider(DataMaster dataMaster, BaseProducer baseProducer,
String firstName, String lastName) {
this.dataMaster = dataMaster;
this.baseProducer = baseProducer;
this.firstName = firstName;
this.lastName = lastName;
}
@Override
public String get() {
String prefix = switch (baseProducer.randomBetween(1, 3)) {
case 1 -> StringUtils.replace(firstName + lastName, " ", "");
case 2 -> StringUtils.replace(firstName + "." + lastName, " ", ".");
case 3 -> StringUtils.replace(lastName, " ", "");
default -> throw new IllegalStateException("Unexpected value: " + baseProducer.randomBetween(1, 3));
};
String email = lowerCase(prefix + '@' + dataMaster.getRandomValue(PERSONAL_EMAIL));
return latinize(email);
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/person/NationalIdentificationNumber.java
================================================
package com.devskiller.jfairy.producer.person;
public class NationalIdentificationNumber {
private final String value;
public NationalIdentificationNumber(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/person/NationalIdentificationNumberFactory.java
================================================
package com.devskiller.jfairy.producer.person;
public interface NationalIdentificationNumberFactory {
NationalIdentificationNumberProvider produceNationalIdentificationNumberProvider(NationalIdentificationNumberProperties.Property... properties);
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/person/NationalIdentificationNumberProperties.java
================================================
package com.devskiller.jfairy.producer.person;
import java.time.LocalDate;
public final class NationalIdentificationNumberProperties {
private NationalIdentificationNumberProperties() {
}
public abstract static class Property {
public abstract void apply(NationalIdentificationNumberProvider nationalIdentificationNumberProvider);
}
public static Property dateOfBirth(final LocalDate dateOfBirth) {
return new Property() {
@Override
public void apply(NationalIdentificationNumberProvider nationalIdentificationNumberProvider) {
nationalIdentificationNumberProvider.setIssueDate(dateOfBirth);
}
};
}
public static Property sex(final Person.Sex sex) {
return new Property() {
@Override
public void apply(NationalIdentificationNumberProvider nationalIdentificationNumberProvider) {
nationalIdentificationNumberProvider.setSex(sex);
}
};
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/person/NationalIdentificationNumberProvider.java
================================================
package com.devskiller.jfairy.producer.person;
import java.time.LocalDate;
import java.util.function.Supplier;
public interface NationalIdentificationNumberProvider extends Supplier<NationalIdentificationNumber> {
@Override
NationalIdentificationNumber get();
void setIssueDate(LocalDate dateOfBirth);
void setSex(Person.Sex sex);
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/person/NationalIdentityCardNumberProvider.java
================================================
package com.devskiller.jfairy.producer.person;
import java.util.function.Supplier;
public interface NationalIdentityCardNumberProvider extends Supplier<String> {
@Override
String get();
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/person/PassportNumberProvider.java
================================================
package com.devskiller.jfairy.producer.person;
import java.util.function.Supplier;
/**
* Provider for generating localized or random passport numbers.
* <p>
* This functional interface extends {@link Supplier} to provide a standardized
* way of retrieving passport identification strings for different locales.
*
* @author Olga Maciaszek-Sharma
* @since 21.02.15
*/
public interface PassportNumberProvider extends Supplier<String> {
@Override
String get();
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/person/Person.java
================================================
package com.devskiller.jfairy.producer.person;
import java.time.LocalDate;
import com.devskiller.jfairy.producer.company.Company;
import static com.devskiller.jfairy.producer.person.Person.Sex.FEMALE;
import static com.devskiller.jfairy.producer.person.Person.Sex.MALE;
public class Person {
public enum Sex {
MALE, FEMALE
}
private final Address address;
private final String firstName;
private final String middleName;
private final String lastName;
private final String email;
private final String username;
private final String password;
private final Sex sex;
private final String telephoneNumber;
private final String mobileTelephoneNumber;
private final LocalDate dateOfBirth;
private final Integer age;
private final Company company;
private final String companyEmail;
private final String nationalIdentityCardNumber;
private final String nationalIdentificationNumber;
private final String passportNumber;
private final String jobTitle;
private final Country nationality;
public Person(String firstName, String middleName, String lastName, Address address, String email, String username,
String password, Sex sex, String telephoneNumber, String mobileTelephoneNumber,
LocalDate dateOfBirth, Integer age, String nationalIdentityCardNumber,
String nationalIdentificationNumber, String passportNumber, Company company, String companyEmail,
String jobTitle, Country nationality) {
this.nationalIdentityCardNumber = nationalIdentityCardNumber;
this.address = address;
this.firstName = firstName;
this.middleName = middleName;
this.lastName = lastName;
this.email = email;
this.username = username;
this.password = password;
this.sex = sex;
this.telephoneNumber = telephoneNumber;
this.mobileTelephoneNumber = mobileTelephoneNumber;
this.dateOfBirth = dateOfBirth;
this.age = age;
this.nationalIdentificationNumber = nationalIdentificationNumber;
this.company = company;
this.companyEmail = companyEmail;
this.passportNumber = passportNumber;
this.jobTitle = jobTitle;
this.nationality = nationality;
}
public String getNationalIdentificationNumber() {
return nationalIdentificationNumber;
}
public String getFirstName() {
return firstName;
}
public String getMiddleName() {
return middleName;
}
public String getLastName() {
return lastName;
}
public String getEmail() {
return email;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public String getFullName() {
return firstName + " " + lastName;
}
public boolean isMale() {
return sex == MALE;
}
public boolean isFemale() {
return sex == FEMALE;
}
public Sex getSex() {
return sex;
}
public String getTelephoneNumber() {
return telephoneNumber;
}
public String getMobileTelephoneNumber() {
return mobileTelephoneNumber;
}
public LocalDate getDateOfBirth() {
return dateOfBirth;
}
public int getAge() {
return age;
}
public String getNationalIdentityCardNumber() {
return nationalIdentityCardNumber;
}
public String getCompanyEmail() {
return companyEmail;
}
public Address getAddress() {
return address;
}
public Company getCompany() {
return company;
}
public String getPassportNumber() {
return passportNumber;
}
public String getJobTitle() {
return jobTitle;
}
public Country getNationality() {
return nationality;
}
}
================================================
FILE: src/main/java/com/devskiller/jfairy/producer/person/PersonFactory.java
================================================
package com.devskiller.jfairy.producer.person;
/**
* Created by Jakub Kubrynski / 2014-05-26
*/
public int
gitextract_g7twkl10/
├── .editorconfig
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── feature_request.yml
│ │ └── new_locale.yml
│ └── workflows/
│ ├── build.yml
│ └── release.yml
├── .gitignore
├── .mvn/
│ └── wrapper/
│ └── maven-wrapper.properties
├── .sdkmanrc
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── devskiller/
│ │ └── jfairy/
│ │ ├── Bootstrap.java
│ │ ├── Fairy.java
│ │ ├── FairyFactory.java
│ │ ├── FairyFactoryImpl.java
│ │ ├── LocaleSpecificProviders.java
│ │ ├── LocaleSpecificProvidersFactory.java
│ │ ├── UniqueEnforcer.java
│ │ ├── UniqueFairy.java
│ │ ├── UniqueGenerationException.java
│ │ ├── data/
│ │ │ ├── DataMaster.java
│ │ │ └── MapBasedDataMaster.java
│ │ ├── package-info.java
│ │ └── producer/
│ │ ├── BaseProducer.java
│ │ ├── DateProducer.java
│ │ ├── RandomGenerator.java
│ │ ├── TimeProvider.java
│ │ ├── VATIdentificationNumberProvider.java
│ │ ├── company/
│ │ │ ├── Company.java
│ │ │ ├── CompanyFactory.java
│ │ │ ├── CompanyFactoryImpl.java
│ │ │ ├── CompanyProperties.java
│ │ │ ├── CompanyProvider.java
│ │ │ ├── DefaultCompanyProvider.java
│ │ │ └── locale/
│ │ │ ├── br/
│ │ │ │ └── BrVATIdentificationNumberProvider.java
│ │ │ ├── de/
│ │ │ │ └── DeVATIdentificationNumberProvider.java
│ │ │ ├── en/
│ │ │ │ └── EnVATIdentificationNumberProvider.java
│ │ │ ├── es/
│ │ │ │ └── EsVATIdentificationNumberProvider.java
│ │ │ ├── fr/
│ │ │ │ └── FrVATIdentificationNumberProvider.java
│ │ │ ├── ka/
│ │ │ │ └── KaVATIdentificationNumberProvider.java
│ │ │ ├── pl/
│ │ │ │ └── PlVATIdentificationNumberProvider.java
│ │ │ ├── sk/
│ │ │ │ └── SkVATIdentificationNumberProvider.java
│ │ │ ├── sv/
│ │ │ │ └── SvVATIdentificationNumberProvider.java
│ │ │ ├── tr/
│ │ │ │ └── TrVATIdentificationNumberProvider.java
│ │ │ └── zh/
│ │ │ └── ZhVATIdentificationNumberProvider.java
│ │ ├── net/
│ │ │ ├── IPNumberProducer.java
│ │ │ └── NetworkProducer.java
│ │ ├── payment/
│ │ │ ├── CreditCard.java
│ │ │ ├── CreditCardProvider.java
│ │ │ ├── DefaultIBANProvider.java
│ │ │ ├── IBAN.java
│ │ │ ├── IBANFactory.java
│ │ │ ├── IBANFactoryImpl.java
│ │ │ ├── IBANProperties.java
│ │ │ └── IBANProvider.java
│ │ ├── person/
│ │ │ ├── AbstractAddressProvider.java
│ │ │ ├── Address.java
│ │ │ ├── AddressProvider.java
│ │ │ ├── CompanyEmailProvider.java
│ │ │ ├── Country.java
│ │ │ ├── DefaultPersonProvider.java
│ │ │ ├── EmailProvider.java
│ │ │ ├── NationalIdentificationNumber.java
│ │ │ ├── NationalIdentificationNumberFactory.java
│ │ │ ├── NationalIdentificationNumberProperties.java
│ │ │ ├── NationalIdentificationNumberProvider.java
│ │ │ ├── NationalIdentityCardNumberProvider.java
│ │ │ ├── PassportNumberProvider.java
│ │ │ ├── Person.java
│ │ │ ├── PersonFactory.java
│ │ │ ├── PersonFactoryImpl.java
│ │ │ ├── PersonProperties.java
│ │ │ ├── PersonProvider.java
│ │ │ └── locale/
│ │ │ ├── AbstractAddress.java
│ │ │ ├── ContinentalAddress.java
│ │ │ ├── NoNationalIdentificationNumberFactory.java
│ │ │ ├── br/
│ │ │ │ ├── BrAddress.java
│ │ │ │ ├── BrAddressProvider.java
│ │ │ │ ├── BrNationalIdentityCardNumberProvider.java
│ │ │ │ └── BrPassportNumberProvider.java
│ │ │ ├── de/
│ │ │ │ ├── DeAddress.java
│ │ │ │ ├── DeAddressProvider.java
│ │ │ │ ├── DeNationalIdentityCardNumberProvider.java
│ │ │ │ └── DePassportNumberProvider.java
│ │ │ ├── en/
│ │ │ │ ├── EnAddress.java
│ │ │ │ ├── EnAddressProvider.java
│ │ │ │ ├── EnNationalIdentityCardNumberProvider.java
│ │ │ │ └── EnPassportNumberProvider.java
│ │ │ ├── es/
│ │ │ │ ├── EsAddress.java
│ │ │ │ ├── EsAddressProvider.java
│ │ │ │ ├── EsNationalIdentityCardNumberProvider.java
│ │ │ │ └── EsPassportNumberProvider.java
│ │ │ ├── fr/
│ │ │ │ ├── FrAddress.java
│ │ │ │ ├── FrAddressProvider.java
│ │ │ │ ├── FrNationalIdentityCardNumberProvider.java
│ │ │ │ └── FrPassportNumberProvider.java
│ │ │ ├── ka/
│ │ │ │ ├── KaAddress.java
│ │ │ │ ├── KaAddressProvider.java
│ │ │ │ ├── KaNationalIdentityCardNumberProvider.java
│ │ │ │ └── KaPassportNumberProvider.java
│ │ │ ├── pl/
│ │ │ │ ├── PlAddress.java
│ │ │ │ ├── PlAddressProvider.java
│ │ │ │ ├── PlNationalIdentificationNumberFactory.java
│ │ │ │ ├── PlNationalIdentificationNumberProvider.java
│ │ │ │ ├── PlNationalIdentityCardNumberProvider.java
│ │ │ │ └── PlPassportNumberProvider.java
│ │ │ ├── sk/
│ │ │ │ ├── SkAddress.java
│ │ │ │ ├── SkAddressProvider.java
│ │ │ │ ├── SkNationalIdentificationNumberFactory.java
│ │ │ │ ├── SkNationalIdentificationNumberProvider.java
│ │ │ │ ├── SkNationalIdentityCardNumberProvider.java
│ │ │ │ └── SkPassportNumberProvider.java
│ │ │ ├── sv/
│ │ │ │ ├── SvAddress.java
│ │ │ │ ├── SvAddressProvider.java
│ │ │ │ ├── SvNationalIdentificationNumberFactory.java
│ │ │ │ ├── SvNationalIdentificationNumberProvider.java
│ │ │ │ ├── SvNationalIdentityCardNumberProvider.java
│ │ │ │ └── SvPassportNumberProvider.java
│ │ │ ├── tr/
│ │ │ │ ├── TrAddress.java
│ │ │ │ ├── TrAddressProvider.java
│ │ │ │ ├── TrNationalIdentityCardNumberProvider.java
│ │ │ │ └── TrPassportNumberProvider.java
│ │ │ └── zh/
│ │ │ ├── ZhAddress.java
│ │ │ ├── ZhAddressProvider.java
│ │ │ ├── ZhNationalIdentityCardNumberProvider.java
│ │ │ └── ZhPassportNumberProvider.java
│ │ ├── text/
│ │ │ ├── TextProducer.java
│ │ │ └── TextProducerInternal.java
│ │ └── util/
│ │ ├── AlphaNumberSystem.java
│ │ ├── LanguageCode.java
│ │ ├── StringUtils.java
│ │ ├── ValidateUtils.java
│ │ ├── ZhFairyUtil.java
│ │ └── package-info.java
│ └── resources/
│ ├── jfairy.yml
│ ├── jfairy_br.yml
│ ├── jfairy_de.yml
│ ├── jfairy_en.yml
│ ├── jfairy_es.yml
│ ├── jfairy_fr.yml
│ ├── jfairy_it.yml
│ ├── jfairy_ka.yml
│ ├── jfairy_pl.yml
│ ├── jfairy_sk.yml
│ ├── jfairy_sv.yml
│ ├── jfairy_tr.yml
│ └── jfairy_zh.yml
└── test/
├── groovy/
│ ├── com/
│ │ └── devskiller/
│ │ └── jfairy/
│ │ ├── FairyDeSpec.groovy
│ │ ├── FairyFrSpec.groovy
│ │ ├── FairyKaSpec.groovy
│ │ ├── FairyModuleSpec.groovy
│ │ ├── FairySpec.groovy
│ │ ├── FairyZhSpec.groovy
│ │ ├── UniqueEnforcerSpec.groovy
│ │ ├── UniqueFairySpec.groovy
│ │ ├── data/
│ │ │ └── MapBasedDataMasterSpec.groovy
│ │ └── producer/
│ │ ├── BaseProducerSpec.groovy
│ │ ├── CompanySpec.groovy
│ │ ├── DateProducerSpec.groovy
│ │ ├── TextSpec.groovy
│ │ ├── company/
│ │ │ └── locale/
│ │ │ ├── CompanyProviderSpec.groovy
│ │ │ ├── br/
│ │ │ │ └── BrVATIdentificationNumberProviderSpec.groovy
│ │ │ ├── de/
│ │ │ │ └── DeVATIdentificationNumberProviderSpec.groovy
│ │ │ ├── en/
│ │ │ │ └── EnVATIdentificationNumberProviderSpec.groovy
│ │ │ ├── es/
│ │ │ │ └── EsVATIdentificationNumberProviderSpec.groovy
│ │ │ ├── ka/
│ │ │ │ └── KaVATIdentificationNumberProviderSpec.groovy
│ │ │ ├── pl/
│ │ │ │ └── PlVATIdentificationNumberProviderSpec.groovy
│ │ │ ├── se/
│ │ │ │ └── SvVATIdentificationNumberProviderSpec.groovy
│ │ │ ├── sk/
│ │ │ │ └── SkVATIdentificationNumberProviderSpec.groovy
│ │ │ └── tr/
│ │ │ └── TrVATIdentificationNumberProviderSpec.groovy
│ │ ├── net/
│ │ │ └── NetworkSpec.groovy
│ │ ├── payment/
│ │ │ ├── CreditCardProviderSpec.groovy
│ │ │ └── IBANSpec.groovy
│ │ ├── person/
│ │ │ ├── CompanyEmailProviderSpec.groovy
│ │ │ ├── EmailProviderSpec.groovy
│ │ │ ├── PersonSpec.groovy
│ │ │ └── locale/
│ │ │ ├── br/
│ │ │ │ ├── BrAddressSpec.groovy
│ │ │ │ └── BrNationalIdentityCardNumberProviderSpec.groovy
│ │ │ ├── de/
│ │ │ │ ├── DeAddressSpec.groovy
│ │ │ │ ├── DeNationalIdentityCardNumberProviderSpec.groovy
│ │ │ │ └── DePassportNumberProviderSpec.groovy
│ │ │ ├── en/
│ │ │ │ ├── EnAddressSpec.groovy
│ │ │ │ ├── EnNationalIdentityCardNumberProviderSpec.groovy
│ │ │ │ └── EnPassportNumberProviderSpec.groovy
│ │ │ ├── es/
│ │ │ │ ├── EsAddressSpec.groovy
│ │ │ │ ├── EsNationalIdentityCardNumberProviderSpec.groovy
│ │ │ │ └── EsPassportNumberProviderSpec.groovy
│ │ │ ├── ka/
│ │ │ │ ├── KaAddressSpec.groovy
│ │ │ │ ├── KaNationalIdentityCardNumberProviderSpec.groovy
│ │ │ │ └── KaPassportNumberProviderSpec.groovy
│ │ │ ├── pl/
│ │ │ │ ├── PlAddressSpec.groovy
│ │ │ │ ├── PlNationalIdentificationNumberSpec.groovy
│ │ │ │ ├── PlNationalIdentityCardNumberProviderSpec.groovy
│ │ │ │ ├── PlPassportNumberProviderSpec.groovy
│ │ │ │ └── PlPersonSpec.groovy
│ │ │ ├── sk/
│ │ │ │ ├── SkAddressSpec.groovy
│ │ │ │ └── SkPersonSpec.groovy
│ │ │ ├── sv/
│ │ │ │ ├── SvAddressSpec.groovy
│ │ │ │ ├── SvNationalIdentificationNumberProviderSpec.groovy
│ │ │ │ ├── SvNationalIdentityCardNumberProviderSpec.groovy
│ │ │ │ ├── SvPassportNumberProviderSpec.groovy
│ │ │ │ └── SvPersonSpec.groovy
│ │ │ └── tr/
│ │ │ ├── TrAddressSpec.groovy
│ │ │ └── TrNationalIdentityCardNumberProviderSpec.groovy
│ │ └── util/
│ │ └── AlphaNumberSystemSpec.groovy
│ └── snippets/
│ ├── Foo.groovy
│ ├── SampleSnippet.groovy
│ └── TextSnippet.groovy
├── java/
│ └── com/
│ └── devskiller/
│ └── jfairy/
│ └── producer/
│ ├── RandomGeneratorTest.java
│ └── util/
│ ├── AlphaNumberSystemTest.java
│ ├── StringUtilsTest.java
│ └── ValidateUtilsTest.java
└── resources/
├── simplelogger.properties
└── team/
└── checkstyle-rules.xml
SYMBOL INDEX (844 symbols across 124 files)
FILE: src/main/java/com/devskiller/jfairy/Bootstrap.java
class Bootstrap (line 49) | public final class Bootstrap {
method Bootstrap (line 55) | private Bootstrap() {
method createFairy (line 58) | public static Fairy createFairy(DataMaster dataMaster, Locale locale, ...
method fillDefaultDataMaster (line 104) | private static void fillDefaultDataMaster(MapBasedDataMaster dataMaste...
method builder (line 124) | public static Builder builder() {
method create (line 134) | public static Fairy create() {
method create (line 145) | public static Fairy create(Locale locale) {
method create (line 156) | public static Fairy create(Locale locale, String dataFilePrefix) {
method create (line 162) | public static Fairy create(Supplier<DataMaster> dataMaster, Locale loc...
class Builder (line 166) | public static final class Builder {
method getDefaultDataMaster (line 173) | private MapBasedDataMaster getDefaultDataMaster(BaseProducer basePro...
method Builder (line 177) | private Builder() {
method withLocale (line 187) | public Builder withLocale(Locale locale) {
method withFilePrefix (line 198) | public Builder withFilePrefix(String filePrefix) {
method withRandomSeed (line 210) | public Builder withRandomSeed(int randomSeed) {
method withDataMasterProvider (line 222) | public Builder withDataMasterProvider(Supplier<DataMaster> dataMaste...
method build (line 232) | public Fairy build() {
FILE: src/main/java/com/devskiller/jfairy/Fairy.java
class Fairy (line 26) | public final class Fairy {
method Fairy (line 37) | Fairy(TextProducer textProducer, PersonFactory personFactory, NetworkP...
method create (line 50) | public static Fairy create() {
method create (line 54) | public static Fairy create(Locale locale) {
method create (line 58) | public static Fairy create(Supplier<DataMaster> dataMasterProvider, Lo...
method builder (line 62) | public static Bootstrap.Builder builder() {
method textProducer (line 71) | public TextProducer textProducer() {
method person (line 81) | public Person person(PersonProperties.PersonProperty... personProperti...
method company (line 91) | public Company company(CompanyProperties.CompanyProperty... companyPro...
method baseProducer (line 100) | public BaseProducer baseProducer() {
method dateProducer (line 104) | public DateProducer dateProducer() {
method iban (line 113) | public IBAN iban() {
method iban (line 123) | public IBAN iban(IBANProperties.Property... properties) {
method creditCard (line 127) | public CreditCard creditCard() {
method networkProducer (line 131) | public NetworkProducer networkProducer() {
method unique (line 141) | public UniqueFairy unique() {
method unique (line 151) | public UniqueFairy unique(int maxRetries) {
FILE: src/main/java/com/devskiller/jfairy/FairyFactory.java
type FairyFactory (line 6) | interface FairyFactory {
method createFairy (line 8) | Fairy createFairy();
FILE: src/main/java/com/devskiller/jfairy/FairyFactoryImpl.java
class FairyFactoryImpl (line 14) | class FairyFactoryImpl implements FairyFactory {
method FairyFactoryImpl (line 25) | FairyFactoryImpl(TextProducerInternal textProducerInternal,
method createFairy (line 43) | @Override
FILE: src/main/java/com/devskiller/jfairy/LocaleSpecificProvidersFactory.java
class LocaleSpecificProvidersFactory (line 65) | final class LocaleSpecificProvidersFactory {
method LocaleSpecificProvidersFactory (line 69) | private LocaleSpecificProvidersFactory() {
method createProvidersForLocale (line 72) | static LocaleSpecificProviders createProvidersForLocale(Locale locale,
method createPlProviders (line 100) | private static LocaleSpecificProviders createPlProviders(DataMaster da...
method createSkProviders (line 112) | private static LocaleSpecificProviders createSkProviders(DataMaster da...
method createEnProviders (line 124) | private static LocaleSpecificProviders createEnProviders(DataMaster da...
method createFrProviders (line 142) | private static LocaleSpecificProviders createFrProviders(DataMaster da...
method createItProviders (line 162) | private static LocaleSpecificProviders createItProviders(DataMaster da...
method createEsProviders (line 173) | private static LocaleSpecificProviders createEsProviders(DataMaster da...
method createSvProviders (line 184) | private static LocaleSpecificProviders createSvProviders(DataMaster da...
method createZhProviders (line 197) | private static LocaleSpecificProviders createZhProviders(DataMaster da...
method createDeProviders (line 208) | private static LocaleSpecificProviders createDeProviders(DataMaster da...
method createKaProviders (line 219) | private static LocaleSpecificProviders createKaProviders(DataMaster da...
method createBrProviders (line 230) | private static LocaleSpecificProviders createBrProviders(DataMaster da...
method createTrProviders (line 241) | private static LocaleSpecificProviders createTrProviders(DataMaster da...
FILE: src/main/java/com/devskiller/jfairy/UniqueEnforcer.java
class UniqueEnforcer (line 25) | public final class UniqueEnforcer<T> {
method UniqueEnforcer (line 34) | private UniqueEnforcer(Supplier<T> defaultGenerator, Function<T, ?> ke...
method of (line 43) | public static <T> UniqueEnforcer<T> of(Supplier<T> generator, Function...
method of (line 47) | public static <T> UniqueEnforcer<T> of(Supplier<T> generator, Function...
method next (line 51) | public T next() {
method next (line 59) | public T next(Supplier<T> generator) {
method reset (line 72) | public void reset() {
method size (line 76) | public int size() {
FILE: src/main/java/com/devskiller/jfairy/UniqueFairy.java
class UniqueFairy (line 30) | public final class UniqueFairy {
method UniqueFairy (line 38) | UniqueFairy(Fairy fairy, int maxRetries) {
method person (line 47) | public Person person(PersonProperties.PersonProperty... personProperti...
method company (line 54) | public Company company(CompanyProperties.CompanyProperty... companyPro...
method iban (line 61) | public IBAN iban(IBANProperties.Property... properties) {
method creditCard (line 68) | public CreditCard creditCard() {
method reset (line 72) | public void reset() {
FILE: src/main/java/com/devskiller/jfairy/UniqueGenerationException.java
class UniqueGenerationException (line 3) | public class UniqueGenerationException extends RuntimeException {
method UniqueGenerationException (line 7) | public UniqueGenerationException(String message) {
FILE: src/main/java/com/devskiller/jfairy/data/DataMaster.java
type DataMaster (line 16) | public interface DataMaster {
method getString (line 24) | String getString(String key);
method getStringList (line 32) | List<String> getStringList(String key);
method getValuesOfType (line 43) | <T> T getValuesOfType(String dataKey, String type, Class<T> resultClass);
method getRandomValue (line 51) | String getRandomValue(String key);
method getLanguage (line 58) | LanguageCode getLanguage();
FILE: src/main/java/com/devskiller/jfairy/data/MapBasedDataMaster.java
class MapBasedDataMaster (line 23) | public class MapBasedDataMaster implements DataMaster {
method MapBasedDataMaster (line 29) | public MapBasedDataMaster(BaseProducer baseProducer) {
method getStringList (line 40) | @SuppressWarnings("unchecked")
method getValuesOfType (line 46) | @Override
method getString (line 63) | @Override
method getRandomValue (line 68) | @Override
method getLanguage (line 73) | @Override
method getData (line 83) | @SuppressWarnings("unchecked")
method readResources (line 98) | public void readResources(String path) throws IOException {
method appendData (line 119) | private void appendData(Map<String, Object> data) {
class CaseInsensitiveMap (line 123) | private static final class CaseInsensitiveMap extends HashMap<String, ...
method put (line 127) | @Override
method putAll (line 141) | @Override
method get (line 148) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/BaseProducer.java
class BaseProducer (line 7) | public class BaseProducer {
method BaseProducer (line 11) | public BaseProducer(RandomGenerator random) {
method trueOrFalse (line 20) | public boolean trueOrFalse() {
method randomElement (line 31) | public <T> T randomElement(List<T> elements) {
method randomElement (line 41) | public String randomElement(String... elements) {
method randomElement (line 52) | public <T extends Enum<?>> T randomElement(Class<T> enumType) {
method randomElements (line 64) | public <T> List<T> randomElements(List<T> elements, int count) {
method extractRandomList (line 76) | private <T> List<T> extractRandomList(List<T> elements, int count) {
method randomBetween (line 87) | public int randomBetween(int min, int max) {
method randomInt (line 97) | public int randomInt(int max) {
method randomBetween (line 102) | public char randomBetween(char min, char max) {
method randomBetween (line 114) | public long randomBetween(long min, long max) {
method randomBetween (line 125) | public double randomBetween(double min, double max) {
method randomNumeric (line 129) | public String randomNumeric(int length) {
method randomAlphabetic (line 133) | public String randomAlphabetic(int length) {
method randomAlphanumeric (line 137) | public String randomAlphanumeric(int length) {
method letterify (line 147) | public String letterify(String letterString) {
method letterify (line 159) | public String letterify(String letterString, char from, char to) {
method numerify (line 169) | public String numerify(String numberString) {
method numerify (line 181) | public String numerify(String numberString, int from, int to) {
method bothify (line 191) | public String bothify(String string) {
method replaceSymbolWithCharsFromTo (line 204) | private String replaceSymbolWithCharsFromTo(String string, char symbol...
FILE: src/main/java/com/devskiller/jfairy/producer/DateProducer.java
class DateProducer (line 18) | public class DateProducer {
method DateProducer (line 25) | public DateProducer(BaseProducer baseProducer, TimeProvider timeProvid...
method randomDateInThePast (line 30) | public LocalDateTime randomDateInThePast(int maxYearsEarlier) {
method randomDateBetweenYearAndNow (line 38) | public LocalDateTime randomDateBetweenYearAndNow(int fromYear) {
method randomDateBetweenTwoDates (line 43) | public LocalDate randomDateBetweenTwoDates(LocalDate from, LocalDate t...
method randomDateBetweenTwoDates (line 48) | public LocalDateTime randomDateBetweenTwoDates(LocalDateTime from, Loc...
method randomDateBetweenYears (line 54) | public LocalDateTime randomDateBetweenYears(int fromYear, int toYear) {
method getDateForLastDayForGivenYear (line 61) | private LocalDateTime getDateForLastDayForGivenYear(int year) {
method getDateForFirstDayForGivenYear (line 65) | private LocalDateTime getDateForFirstDayForGivenYear(int year) {
method randomDateBetweenNowAndFuturePeriod (line 69) | public LocalDateTime randomDateBetweenNowAndFuturePeriod(Period future...
method randomDateInTheFuture (line 74) | public LocalDateTime randomDateInTheFuture(int years) {
method randomDateInTheFuture (line 78) | public LocalDateTime randomDateInTheFuture() {
FILE: src/main/java/com/devskiller/jfairy/producer/RandomGenerator.java
class RandomGenerator (line 13) | public class RandomGenerator {
method RandomGenerator (line 24) | public RandomGenerator() {
method RandomGenerator (line 33) | public RandomGenerator(int seed) {
method nextBoolean (line 42) | public boolean nextBoolean() {
method shuffle (line 53) | public <T> List<T> shuffle(List<T> elements) {
method nextInt (line 65) | public int nextInt(int min, int max) {
method nextLong (line 76) | public long nextLong(long min, long max) {
method nextDouble (line 87) | public double nextDouble(double min, double max) {
method randomNumeric (line 97) | public String randomNumeric(int length) {
method randomAlphabetic (line 107) | public String randomAlphabetic(int length) {
method randomAlphanumeric (line 117) | public String randomAlphanumeric(int length) {
method randomString (line 121) | private String randomString(int length, String alphabet) {
FILE: src/main/java/com/devskiller/jfairy/producer/TimeProvider.java
class TimeProvider (line 11) | public class TimeProvider {
method getCurrentYear (line 13) | public int getCurrentYear() {
method getCurrentTime (line 17) | public LocalDateTime getCurrentTime() {
method getCurrentDate (line 21) | public LocalDate getCurrentDate() {
FILE: src/main/java/com/devskiller/jfairy/producer/VATIdentificationNumberProvider.java
type VATIdentificationNumberProvider (line 14) | public interface VATIdentificationNumberProvider extends Supplier<String> {
method get (line 16) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/company/Company.java
class Company (line 3) | public class Company {
method Company (line 10) | public Company(String name, String domain, String email, String vatIde...
method getName (line 17) | public String getName() {
method getUrl (line 21) | public String getUrl() {
method getEmail (line 25) | public String getEmail() {
method getDomain (line 29) | public String getDomain() {
method getVatIdentificationNumber (line 33) | public String getVatIdentificationNumber() {
FILE: src/main/java/com/devskiller/jfairy/producer/company/CompanyFactory.java
type CompanyFactory (line 3) | public interface CompanyFactory {
method produceCompany (line 5) | CompanyProvider produceCompany(CompanyProperties.CompanyProperty... co...
FILE: src/main/java/com/devskiller/jfairy/producer/company/CompanyFactoryImpl.java
class CompanyFactoryImpl (line 7) | public class CompanyFactoryImpl implements CompanyFactory {
method CompanyFactoryImpl (line 13) | public CompanyFactoryImpl(BaseProducer baseProducer,
method produceCompany (line 21) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/company/CompanyProperties.java
class CompanyProperties (line 3) | public final class CompanyProperties {
method CompanyProperties (line 5) | private CompanyProperties() {
class CompanyProperty (line 8) | public abstract static class CompanyProperty {
method apply (line 10) | public abstract void apply(CompanyProvider company);
method withName (line 12) | public static CompanyProperty withName(final String name) {
method withDomain (line 21) | public static CompanyProperty withDomain(final String domain) {
method withEmail (line 30) | public static CompanyProperty withEmail(final String email) {
method withVatIdentificationNumber (line 39) | public static CompanyProperty withVatIdentificationNumber(final Stri...
FILE: src/main/java/com/devskiller/jfairy/producer/company/CompanyProvider.java
type CompanyProvider (line 4) | public interface CompanyProvider extends Supplier<Company> {
method get (line 11) | @Override
method generateName (line 14) | void generateName();
method generateDomain (line 16) | void generateDomain();
method generateEmail (line 18) | void generateEmail();
method generateVatIdentificationNumber (line 20) | void generateVatIdentificationNumber();
method setName (line 22) | void setName(String name);
method setDomain (line 24) | void setDomain(String domain);
method setEmail (line 26) | void setEmail(String email);
method setVatIdentificationNumber (line 28) | void setVatIdentificationNumber(String vatIdentificationNumber);
FILE: src/main/java/com/devskiller/jfairy/producer/company/DefaultCompanyProvider.java
class DefaultCompanyProvider (line 14) | public class DefaultCompanyProvider implements CompanyProvider {
method DefaultCompanyProvider (line 26) | public DefaultCompanyProvider(BaseProducer baseProducer,
method get (line 39) | @Override
method generateName (line 50) | @Override
method generateDomain (line 69) | @Override
method generateEmail (line 86) | @Override
method generateVatIdentificationNumber (line 94) | @Override
method setName (line 102) | @Override
method setDomain (line 107) | @Override
method setEmail (line 112) | @Override
method setVatIdentificationNumber (line 117) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/br/BrVATIdentificationNumberProvider.java
class BrVATIdentificationNumberProvider (line 9) | public class BrVATIdentificationNumberProvider implements VATIdentificat...
method BrVATIdentificationNumberProvider (line 13) | public BrVATIdentificationNumberProvider(BaseProducer baseProducer) {
method get (line 17) | @Override
method calculateCheckDigit (line 39) | private int calculateCheckDigit(int[] digits, int length) {
method calculateCheckDigit (line 48) | private int calculateCheckDigit(int[] digits, int previousDigit, int l...
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/de/DeVATIdentificationNumberProvider.java
class DeVATIdentificationNumberProvider (line 13) | public class DeVATIdentificationNumberProvider implements VATIdentificat...
method DeVATIdentificationNumberProvider (line 19) | public DeVATIdentificationNumberProvider(BaseProducer baseProducer) {
method get (line 23) | @Override
method isValid (line 28) | public boolean isValid(String vatIdentificationNumber) {
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/en/EnVATIdentificationNumberProvider.java
class EnVATIdentificationNumberProvider (line 17) | public class EnVATIdentificationNumberProvider implements VATIdentificat...
method EnVATIdentificationNumberProvider (line 28) | public EnVATIdentificationNumberProvider(BaseProducer baseProducer) {
method get (line 32) | @Override
method fillSerialNumber (line 45) | private void fillSerialNumber(char[] ein) {
method fillAreaNumber (line 51) | private void fillAreaNumber(char[] ein) {
method fillHyphen (line 61) | private void fillHyphen(char[] ein) {
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/es/EsVATIdentificationNumberProvider.java
class EsVATIdentificationNumberProvider (line 15) | public class EsVATIdentificationNumberProvider implements VATIdentificat...
method EsVATIdentificationNumberProvider (line 25) | public EsVATIdentificationNumberProvider(BaseProducer baseProducer) {
method get (line 30) | @Override
method isValid (line 38) | public boolean isValid(String cif) {
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/fr/FrVATIdentificationNumberProvider.java
class FrVATIdentificationNumberProvider (line 16) | public class FrVATIdentificationNumberProvider implements VATIdentificat...
method FrVATIdentificationNumberProvider (line 20) | public FrVATIdentificationNumberProvider(BaseProducer baseProducer) {
method get (line 24) | @Override
method generateLuhnCompliantSiren (line 37) | private String generateLuhnCompliantSiren() {
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/ka/KaVATIdentificationNumberProvider.java
class KaVATIdentificationNumberProvider (line 6) | public class KaVATIdentificationNumberProvider implements VATIdentificat...
method KaVATIdentificationNumberProvider (line 10) | public KaVATIdentificationNumberProvider(BaseProducer baseProducer) {
method get (line 14) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/pl/PlVATIdentificationNumberProvider.java
class PlVATIdentificationNumberProvider (line 15) | public class PlVATIdentificationNumberProvider implements VATIdentificat...
method PlVATIdentificationNumberProvider (line 77) | public PlVATIdentificationNumberProvider(BaseProducer baseProducer) {
method get (line 82) | @Override
method generateNumber (line 94) | private String generateNumber() {
method isValid (line 103) | public static boolean isValid(String nip) {
method normalizeNip (line 117) | private static String normalizeNip(String value) {
method calculateChecksum (line 124) | private static int calculateChecksum(String nip) {
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/sk/SkVATIdentificationNumberProvider.java
class SkVATIdentificationNumberProvider (line 15) | public class SkVATIdentificationNumberProvider implements VATIdentificat...
method SkVATIdentificationNumberProvider (line 77) | public SkVATIdentificationNumberProvider(BaseProducer baseProducer) {
method get (line 82) | @Override
method generateNumber (line 94) | private String generateNumber() {
method isValid (line 102) | public static boolean isValid(String nip) {
method normalizeNip (line 116) | private static String normalizeNip(String value) {
method calculateChecksum (line 123) | private static int calculateChecksum(String nip) {
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/sv/SvVATIdentificationNumberProvider.java
class SvVATIdentificationNumberProvider (line 21) | public class SvVATIdentificationNumberProvider implements VATIdentificat...
method SvVATIdentificationNumberProvider (line 32) | public SvVATIdentificationNumberProvider(BaseProducer baseProducer, Da...
method get (line 38) | @Override
method generateVatNumberForSoleTrader (line 54) | private String generateVatNumberForSoleTrader() {
method isValid (line 66) | public static boolean isValid(String vatIdentificationNumber) {
type GroupNumber (line 83) | private enum GroupNumber {
method GroupNumber (line 95) | GroupNumber(int value) {
method getValue (line 99) | int getValue() {
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/tr/TrVATIdentificationNumberProvider.java
class TrVATIdentificationNumberProvider (line 11) | public class TrVATIdentificationNumberProvider implements VATIdentificat...
method TrVATIdentificationNumberProvider (line 15) | public TrVATIdentificationNumberProvider(BaseProducer baseProducer) {
method get (line 19) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/company/locale/zh/ZhVATIdentificationNumberProvider.java
class ZhVATIdentificationNumberProvider (line 16) | public class ZhVATIdentificationNumberProvider implements VATIdentificat...
method get (line 20) | @Override
method getChar (line 30) | private char getChar() {
method getChars (line 39) | private String getChars(int paddingSize) {
FILE: src/main/java/com/devskiller/jfairy/producer/net/IPNumberProducer.java
class IPNumberProducer (line 5) | public class IPNumberProducer {
method IPNumberProducer (line 11) | public IPNumberProducer(BaseProducer baseProducer) {
method generate (line 15) | public String generate() {
method ipNumberPart (line 19) | private int ipNumberPart() {
FILE: src/main/java/com/devskiller/jfairy/producer/net/NetworkProducer.java
class NetworkProducer (line 6) | public class NetworkProducer {
method NetworkProducer (line 10) | public NetworkProducer(IPNumberProducer ipNumberProducer) {
method ipAddress (line 14) | public String ipAddress() {
method url (line 27) | public String url(boolean isHttps) {
FILE: src/main/java/com/devskiller/jfairy/producer/payment/CreditCard.java
class CreditCard (line 15) | public class CreditCard {
method CreditCard (line 22) | public CreditCard(String cardVendor, String cardNumber, String cvv, Lo...
method getVendor (line 29) | public String getVendor() {
method getCardNumber (line 33) | public String getCardNumber() {
method getCvv (line 37) | public String getCvv() {
method getExpiryDate (line 41) | public LocalDateTime getExpiryDate() {
method getExpiryDateAsString (line 45) | public String getExpiryDateAsString() {
FILE: src/main/java/com/devskiller/jfairy/producer/payment/CreditCardProvider.java
class CreditCardProvider (line 11) | public class CreditCardProvider implements Supplier<CreditCard> {
method CreditCardProvider (line 21) | public CreditCardProvider(DataMaster dataMaster, BaseProducer baseProd...
method get (line 27) | @Override
method generateNumber (line 35) | private String generateNumber() {
method completeNumber (line 53) | private String completeNumber(String creditCardNumber) {
FILE: src/main/java/com/devskiller/jfairy/producer/payment/DefaultIBANProvider.java
class DefaultIBANProvider (line 18) | public class DefaultIBANProvider implements IBANProvider {
method DefaultIBANProvider (line 24) | public DefaultIBANProvider(BaseProducer baseProducer,
method get (line 34) | @Override
method fillCountryCode (line 53) | @Override
method setCountry (line 64) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/payment/IBAN.java
class IBAN (line 3) | public class IBAN {
method IBAN (line 13) | public IBAN(String accountNumber, String checkDigit, String bankCode, ...
method getAccountNumber (line 24) | public String getAccountNumber() {
method getCheckDigit (line 28) | public String getCheckDigit() {
method getBankCode (line 32) | public String getBankCode() {
method getBban (line 36) | public String getBban() {
method getCountry (line 40) | public String getCountry() {
method getNationalCheckDigit (line 44) | public String getNationalCheckDigit() {
method getIbanNumber (line 48) | public String getIbanNumber() {
FILE: src/main/java/com/devskiller/jfairy/producer/payment/IBANFactory.java
type IBANFactory (line 3) | public interface IBANFactory {
method produceIBANProvider (line 5) | IBANProvider produceIBANProvider(IBANProperties.Property... properties);
FILE: src/main/java/com/devskiller/jfairy/producer/payment/IBANFactoryImpl.java
class IBANFactoryImpl (line 6) | public class IBANFactoryImpl implements IBANFactory {
method IBANFactoryImpl (line 11) | public IBANFactoryImpl(BaseProducer baseProducer, DataMaster dataMaste...
method produceIBANProvider (line 16) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/payment/IBANProperties.java
class IBANProperties (line 10) | public final class IBANProperties {
method IBANProperties (line 26) | private IBANProperties() {
class Property (line 29) | public abstract static class Property {
method apply (line 31) | public abstract void apply(IBANProvider provider);
method country (line 35) | public static Property country(final String country) {
method language (line 44) | public static Property language(final String language) {
method countryFromLanguage (line 53) | private static String countryFromLanguage(String lang) {
FILE: src/main/java/com/devskiller/jfairy/producer/payment/IBANProvider.java
type IBANProvider (line 5) | public interface IBANProvider extends Supplier<IBAN> {
method get (line 7) | @Override
method fillCountryCode (line 10) | void fillCountryCode();
method setCountry (line 12) | void setCountry(String country);
FILE: src/main/java/com/devskiller/jfairy/producer/person/AbstractAddressProvider.java
class AbstractAddressProvider (line 6) | public abstract class AbstractAddressProvider implements AddressProvider {
method AbstractAddressProvider (line 18) | public AbstractAddressProvider(DataMaster dataMaster, BaseProducer bas...
method getCity (line 23) | public String getCity() {
method getPostalCode (line 27) | public String getPostalCode() {
method getStreet (line 32) | public String getStreet() {
method getStreetNumber (line 36) | public String getStreetNumber() {
method getApartmentNumber (line 40) | public String getApartmentNumber() {
FILE: src/main/java/com/devskiller/jfairy/producer/person/Address.java
type Address (line 3) | public interface Address {
method getStreet (line 5) | String getStreet();
method getStreetNumber (line 7) | String getStreetNumber();
method getApartmentNumber (line 9) | String getApartmentNumber();
method getPostalCode (line 11) | String getPostalCode();
method getCity (line 13) | String getCity();
method getAddressLine1 (line 15) | String getAddressLine1();
method getAddressLine2 (line 17) | String getAddressLine2();
FILE: src/main/java/com/devskiller/jfairy/producer/person/AddressProvider.java
type AddressProvider (line 5) | public interface AddressProvider extends Supplier<Address> {
method get (line 7) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/CompanyEmailProvider.java
class CompanyEmailProvider (line 10) | public class CompanyEmailProvider implements Supplier<String> {
method CompanyEmailProvider (line 16) | public CompanyEmailProvider(String firstName, String lastName, Company...
method get (line 22) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/Country.java
type Country (line 10) | public enum Country {
method Country (line 33) | Country(String code, LanguageCode... language) {
method getCode (line 38) | public String getCode() {
method getPrimaryLocale (line 51) | public Locale getPrimaryLocale() {
method findCountryForLanguage (line 58) | public static List<Country> findCountryForLanguage(LanguageCode langua...
FILE: src/main/java/com/devskiller/jfairy/producer/person/DefaultPersonProvider.java
class DefaultPersonProvider (line 19) | public class DefaultPersonProvider implements PersonProvider {
method DefaultPersonProvider (line 54) | public DefaultPersonProvider(DataMaster dataMaster,
method get (line 79) | @Override
method generateSex (line 108) | @Override
method generateCompany (line 116) | @Override
method generateFirstName (line 124) | @Override
method generateMiddleName (line 132) | @Override
method generateLastName (line 140) | @Override
method generateEmail (line 148) | @Override
method generateUsername (line 157) | @Override
method generateTelephoneNumber (line 169) | @Override
method generateMobileTelephoneNumber (line 180) | @Override
method generateAge (line 191) | @Override
method generateDateOfBirth (line 203) | @Override
method generateCompanyEmail (line 213) | @Override
method generatePassword (line 222) | @Override
method generateNationalIdentityCardNumber (line 234) | @Override
method generateNationalIdentificationNumber (line 242) | @Override
method generateAddress (line 252) | @Override
method generatePassportNumber (line 260) | @Override
method generateJobTitle (line 268) | @Override
method generateNationality (line 276) | private void generateNationality() {
method setTelephoneNumberFormat (line 281) | @Override
method setMobileTelephoneNumberFormat (line 286) | @Override
method setSex (line 291) | @Override
method setAge (line 296) | @Override
method setCompany (line 301) | @Override
method setFirstName (line 306) | @Override
method setMiddleName (line 311) | @Override
method setLastName (line 316) | @Override
method setEmail (line 321) | @Override
method setUsername (line 326) | @Override
method setTelephoneNumber (line 331) | @Override
method setMobileTelephoneNumber (line 336) | @Override
method setDateOfBirth (line 341) | @Override
method setPassword (line 346) | @Override
method setAddress (line 351) | @Override
method setCompanyEmail (line 356) | @Override
method setNationalIdentityCardNumber (line 361) | @Override
method setNationalIdentificationNumber (line 366) | @Override
method setPassportNumber (line 371) | @Override
method setJobTitle (line 376) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/EmailProvider.java
class EmailProvider (line 13) | public class EmailProvider implements Supplier<String> {
method EmailProvider (line 20) | public EmailProvider(DataMaster dataMaster, BaseProducer baseProducer,
method get (line 28) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/NationalIdentificationNumber.java
class NationalIdentificationNumber (line 3) | public class NationalIdentificationNumber {
method NationalIdentificationNumber (line 7) | public NationalIdentificationNumber(String value) {
method getValue (line 11) | public String getValue() {
FILE: src/main/java/com/devskiller/jfairy/producer/person/NationalIdentificationNumberFactory.java
type NationalIdentificationNumberFactory (line 3) | public interface NationalIdentificationNumberFactory {
method produceNationalIdentificationNumberProvider (line 5) | NationalIdentificationNumberProvider produceNationalIdentificationNumb...
FILE: src/main/java/com/devskiller/jfairy/producer/person/NationalIdentificationNumberProperties.java
class NationalIdentificationNumberProperties (line 5) | public final class NationalIdentificationNumberProperties {
method NationalIdentificationNumberProperties (line 7) | private NationalIdentificationNumberProperties() {
class Property (line 10) | public abstract static class Property {
method apply (line 12) | public abstract void apply(NationalIdentificationNumberProvider nati...
method dateOfBirth (line 15) | public static Property dateOfBirth(final LocalDate dateOfBirth) {
method sex (line 24) | public static Property sex(final Person.Sex sex) {
FILE: src/main/java/com/devskiller/jfairy/producer/person/NationalIdentificationNumberProvider.java
type NationalIdentificationNumberProvider (line 6) | public interface NationalIdentificationNumberProvider extends Supplier<N...
method get (line 8) | @Override
method setIssueDate (line 11) | void setIssueDate(LocalDate dateOfBirth);
method setSex (line 13) | void setSex(Person.Sex sex);
FILE: src/main/java/com/devskiller/jfairy/producer/person/NationalIdentityCardNumberProvider.java
type NationalIdentityCardNumberProvider (line 5) | public interface NationalIdentityCardNumberProvider extends Supplier<Str...
method get (line 7) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/PassportNumberProvider.java
type PassportNumberProvider (line 14) | public interface PassportNumberProvider extends Supplier<String> {
method get (line 16) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/Person.java
class Person (line 10) | public class Person {
type Sex (line 12) | public enum Sex {
method Person (line 36) | public Person(String firstName, String middleName, String lastName, Ad...
method getNationalIdentificationNumber (line 62) | public String getNationalIdentificationNumber() {
method getFirstName (line 66) | public String getFirstName() {
method getMiddleName (line 70) | public String getMiddleName() {
method getLastName (line 74) | public String getLastName() {
method getEmail (line 78) | public String getEmail() {
method getUsername (line 82) | public String getUsername() {
method getPassword (line 86) | public String getPassword() {
method getFullName (line 90) | public String getFullName() {
method isMale (line 94) | public boolean isMale() {
method isFemale (line 98) | public boolean isFemale() {
method getSex (line 102) | public Sex getSex() {
method getTelephoneNumber (line 106) | public String getTelephoneNumber() {
method getMobileTelephoneNumber (line 110) | public String getMobileTelephoneNumber() {
method getDateOfBirth (line 114) | public LocalDate getDateOfBirth() {
method getAge (line 118) | public int getAge() {
method getNationalIdentityCardNumber (line 122) | public String getNationalIdentityCardNumber() {
method getCompanyEmail (line 126) | public String getCompanyEmail() {
method getAddress (line 130) | public Address getAddress() {
method getCompany (line 134) | public Company getCompany() {
method getPassportNumber (line 138) | public String getPassportNumber() {
method getJobTitle (line 142) | public String getJobTitle() {
method getNationality (line 146) | public Country getNationality() {
FILE: src/main/java/com/devskiller/jfairy/producer/person/PersonFactory.java
type PersonFactory (line 6) | public interface PersonFactory {
method producePersonProvider (line 8) | PersonProvider producePersonProvider(PersonProperties.PersonProperty.....
FILE: src/main/java/com/devskiller/jfairy/producer/person/PersonFactoryImpl.java
class PersonFactoryImpl (line 9) | public class PersonFactoryImpl implements PersonFactory {
method PersonFactoryImpl (line 22) | public PersonFactoryImpl(DataMaster dataMaster,
method producePersonProvider (line 42) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/PersonProperties.java
class PersonProperties (line 18) | public final class PersonProperties {
method PersonProperties (line 23) | private PersonProperties() {
class PersonProperty (line 26) | public abstract static class PersonProperty {
method apply (line 28) | public abstract void apply(PersonProvider person, BaseProducer baseP...
method male (line 32) | public static PersonProperty male() {
method female (line 41) | public static PersonProperty female() {
method ageBetween (line 50) | public static PersonProperty ageBetween(final int minAge, final int ma...
method minAge (line 61) | public static PersonProperty minAge(final int minAge) {
method maxAge (line 66) | public static PersonProperty maxAge(final int maxAge) {
method telephoneFormat (line 71) | public static PersonProperty telephoneFormat(final String telephoneFor...
method mobileTelephoneFormat (line 80) | public static PersonProperty mobileTelephoneFormat(final String mobile...
method withCompany (line 89) | public static PersonProperty withCompany(final Company company) {
method withAddress (line 98) | public static PersonProperty withAddress(final Address address) {
method withFirstName (line 107) | public static PersonProperty withFirstName(final String firstName) {
method withMiddleName (line 116) | public static PersonProperty withMiddleName(final String middleName) {
method withLastName (line 125) | public static PersonProperty withLastName(final String lastName) {
method withEmail (line 134) | public static PersonProperty withEmail(final String email) {
method withUsername (line 143) | public static PersonProperty withUsername(final String username) {
method withTelephoneNumber (line 152) | public static PersonProperty withTelephoneNumber(final String telephon...
method withMobileTelephoneNumber (line 161) | public static PersonProperty withMobileTelephoneNumber(final String mo...
method withDateOfBirth (line 170) | public static PersonProperty withDateOfBirth(final LocalDate dateOfBir...
method withAge (line 179) | public static PersonProperty withAge(final Integer age) {
method withPassword (line 188) | public static PersonProperty withPassword(final String password) {
method withCompanyEmail (line 197) | public static PersonProperty withCompanyEmail(final String companyEmai...
method withNationalIdentityCardNumber (line 206) | public static PersonProperty withNationalIdentityCardNumber(final Stri...
method withNationalIdentificationNumber (line 215) | public static PersonProperty withNationalIdentificationNumber(final St...
method withPassportNumber (line 224) | public static PersonProperty withPassportNumber(final String passportN...
method withJobTitle (line 233) | public static PersonProperty withJobTitle(final String jobTitle) {
FILE: src/main/java/com/devskiller/jfairy/producer/person/PersonProvider.java
type PersonProvider (line 8) | public interface PersonProvider extends Supplier<Person> {
method get (line 18) | @Override
method generateSex (line 21) | void generateSex();
method generateCompany (line 23) | void generateCompany();
method generateFirstName (line 25) | void generateFirstName();
method generateMiddleName (line 27) | void generateMiddleName();
method generateLastName (line 29) | void generateLastName();
method generateEmail (line 31) | void generateEmail();
method generateUsername (line 33) | void generateUsername();
method generateTelephoneNumber (line 35) | void generateTelephoneNumber();
method generateMobileTelephoneNumber (line 37) | void generateMobileTelephoneNumber();
method generateAge (line 39) | void generateAge();
method generateDateOfBirth (line 41) | void generateDateOfBirth();
method generateCompanyEmail (line 43) | void generateCompanyEmail();
method generatePassword (line 45) | void generatePassword();
method generateJobTitle (line 47) | void generateJobTitle();
method generateNationalIdentityCardNumber (line 49) | void generateNationalIdentityCardNumber();
method generateNationalIdentificationNumber (line 51) | void generateNationalIdentificationNumber();
method generateAddress (line 53) | void generateAddress();
method generatePassportNumber (line 55) | void generatePassportNumber();
method setTelephoneNumberFormat (line 57) | void setTelephoneNumberFormat(String telephoneFormat);
method setMobileTelephoneNumberFormat (line 59) | void setMobileTelephoneNumberFormat(String telephoneFormat);
method setSex (line 61) | void setSex(Person.Sex sex);
method setAge (line 63) | void setAge(int age);
method setCompany (line 65) | void setCompany(Company company);
method setFirstName (line 67) | void setFirstName(String firstName);
method setMiddleName (line 69) | void setMiddleName(String middleName);
method setLastName (line 71) | void setLastName(String lastName);
method setEmail (line 73) | void setEmail(String email);
method setUsername (line 75) | void setUsername(String username);
method setTelephoneNumber (line 77) | void setTelephoneNumber(String telephoneNumber);
method setMobileTelephoneNumber (line 79) | void setMobileTelephoneNumber(String telephoneNumber);
method setDateOfBirth (line 81) | void setDateOfBirth(LocalDate dateOfBirth);
method setPassword (line 83) | void setPassword(String password);
method setAddress (line 85) | void setAddress(Address address);
method setCompanyEmail (line 87) | void setCompanyEmail(String companyEmail);
method setNationalIdentityCardNumber (line 89) | void setNationalIdentityCardNumber(String nationalIdentityCardNumber);
method setNationalIdentificationNumber (line 91) | void setNationalIdentificationNumber(String nationalIdentificationNumb...
method setPassportNumber (line 93) | void setPassportNumber(String passportNumber);
method setJobTitle (line 95) | void setJobTitle(String jobTitle);
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/AbstractAddress.java
class AbstractAddress (line 8) | public abstract class AbstractAddress implements Address {
method AbstractAddress (line 15) | public AbstractAddress(String street, String streetNumber, String apar...
method getStreet (line 23) | @Override
method getStreetNumber (line 28) | @Override
method getApartmentNumber (line 33) | @Override
method getPostalCode (line 38) | @Override
method getCity (line 43) | @Override
method getAddressLine1 (line 48) | @Override
method getAddressLine2 (line 51) | @Override
method toString (line 54) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/ContinentalAddress.java
class ContinentalAddress (line 8) | public abstract class ContinentalAddress extends AbstractAddress {
method ContinentalAddress (line 9) | public ContinentalAddress(String street, String streetNumber, String a...
method getApartmentMark (line 13) | protected abstract String getApartmentMark();
method getStreetNumberSeparator (line 15) | protected String getStreetNumberSeparator() {
method getAddressLine1 (line 19) | @Override
method getAddressLine2 (line 25) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/NoNationalIdentificationNumberFactory.java
class NoNationalIdentificationNumberFactory (line 11) | public class NoNationalIdentificationNumberFactory implements NationalId...
method produceNationalIdentificationNumberProvider (line 13) | @Override
class NoNationalIdentificationNumberProvider (line 18) | public static class NoNationalIdentificationNumberProvider implements ...
method get (line 20) | @Override
method setIssueDate (line 25) | @Override
method setSex (line 29) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/br/BrAddress.java
class BrAddress (line 5) | public class BrAddress extends ContinentalAddress {
method BrAddress (line 7) | public BrAddress(String streetNumber, String street, String apartmentN...
method getStreetNumberSeparator (line 11) | @Override
method getApartmentMark (line 16) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/br/BrAddressProvider.java
class BrAddressProvider (line 7) | public class BrAddressProvider extends AbstractAddressProvider {
method BrAddressProvider (line 9) | public BrAddressProvider(DataMaster dataMaster, BaseProducer baseProdu...
method get (line 13) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/br/BrNationalIdentityCardNumberProvider.java
class BrNationalIdentityCardNumberProvider (line 9) | public class BrNationalIdentityCardNumberProvider implements NationalIde...
method BrNationalIdentityCardNumberProvider (line 13) | public BrNationalIdentityCardNumberProvider(BaseProducer baseProducer) {
method get (line 17) | @Override
method calculateCheckDigit (line 34) | private int calculateCheckDigit(int[] digits, int length) {
method calculateCheckDigit (line 43) | private int calculateCheckDigit(int[] digits, int previousDigit, int l...
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/br/BrPassportNumberProvider.java
class BrPassportNumberProvider (line 5) | public class BrPassportNumberProvider implements PassportNumberProvider {
method get (line 7) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/de/DeAddress.java
class DeAddress (line 5) | public class DeAddress extends ContinentalAddress {
method DeAddress (line 7) | public DeAddress(String streetNumber, String street, String apartmentN...
method getApartmentMark (line 11) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/de/DeAddressProvider.java
class DeAddressProvider (line 7) | public class DeAddressProvider extends AbstractAddressProvider {
method DeAddressProvider (line 9) | public DeAddressProvider(DataMaster dataMaster, BaseProducer baseProdu...
method get (line 13) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/de/DeNationalIdentityCardNumberProvider.java
class DeNationalIdentityCardNumberProvider (line 13) | public class DeNationalIdentityCardNumberProvider implements NationalIde...
method DeNationalIdentityCardNumberProvider (line 21) | public DeNationalIdentityCardNumberProvider(BaseProducer baseProducer) {
method get (line 25) | @Override
method isValid (line 30) | public boolean isValid(String nationalIdentityCardNumber) {
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/de/DePassportNumberProvider.java
class DePassportNumberProvider (line 13) | public class DePassportNumberProvider implements PassportNumberProvider {
method DePassportNumberProvider (line 21) | public DePassportNumberProvider(BaseProducer baseProducer) {
method get (line 25) | @Override
method isValid (line 30) | public boolean isValid(String passportNumber) {
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/en/EnAddress.java
class EnAddress (line 7) | public class EnAddress extends AbstractAddress {
method EnAddress (line 9) | public EnAddress(String streetNumber, String street, String apartmentN...
method getAddressLine1 (line 13) | @Override
method getAddressLine2 (line 19) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/en/EnAddressProvider.java
class EnAddressProvider (line 7) | public class EnAddressProvider extends AbstractAddressProvider {
method EnAddressProvider (line 9) | public EnAddressProvider(DataMaster dataMaster, BaseProducer baseProdu...
method get (line 13) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/en/EnNationalIdentityCardNumberProvider.java
class EnNationalIdentityCardNumberProvider (line 15) | public class EnNationalIdentityCardNumberProvider implements NationalIde...
method EnNationalIdentityCardNumberProvider (line 27) | public EnNationalIdentityCardNumberProvider(BaseProducer baseProducer) {
method get (line 31) | @Override
method fillHyphens (line 46) | private void fillHyphens(char[] ssn) {
method fillAreaNumber (line 52) | private void fillAreaNumber(char[] ssn) {
method fillGroupNumber (line 61) | private void fillGroupNumber(char[] ssn) {
method fillSerialNumber (line 67) | private void fillSerialNumber(char[] ssn) {
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/en/EnPassportNumberProvider.java
class EnPassportNumberProvider (line 6) | public class EnPassportNumberProvider implements PassportNumberProvider {
method EnPassportNumberProvider (line 10) | public EnPassportNumberProvider(BaseProducer baseProducer) {
method get (line 14) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/es/EsAddress.java
class EsAddress (line 6) | public class EsAddress extends ContinentalAddress {
method EsAddress (line 8) | public EsAddress(String street, String streetNumber, String apartmentN...
method getStreetNumberSeparator (line 12) | @Override
method getApartmentMark (line 17) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/es/EsAddressProvider.java
class EsAddressProvider (line 7) | public class EsAddressProvider extends AbstractAddressProvider {
method EsAddressProvider (line 9) | public EsAddressProvider(DataMaster dataMaster, BaseProducer baseProdu...
method get (line 13) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/es/EsNationalIdentityCardNumberProvider.java
class EsNationalIdentityCardNumberProvider (line 17) | public class EsNationalIdentityCardNumberProvider implements NationalIde...
method EsNationalIdentityCardNumberProvider (line 25) | public EsNationalIdentityCardNumberProvider(BaseProducer baseProducer) {
method get (line 30) | @Override
method isValid (line 35) | public boolean isValid(String dni) {
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/es/EsPassportNumberProvider.java
class EsPassportNumberProvider (line 6) | public class EsPassportNumberProvider implements PassportNumberProvider {
method EsPassportNumberProvider (line 10) | public EsPassportNumberProvider(BaseProducer baseProducer) {
method get (line 14) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/fr/FrAddress.java
class FrAddress (line 5) | public class FrAddress extends ContinentalAddress {
method FrAddress (line 7) | public FrAddress(String streetNumber, String street, String apartmentN...
method getApartmentMark (line 11) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/fr/FrAddressProvider.java
class FrAddressProvider (line 7) | public class FrAddressProvider extends AbstractAddressProvider {
method FrAddressProvider (line 9) | public FrAddressProvider(DataMaster dataMaster, BaseProducer baseProdu...
method get (line 13) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/fr/FrNationalIdentityCardNumberProvider.java
class FrNationalIdentityCardNumberProvider (line 26) | public class FrNationalIdentityCardNumberProvider implements NationalIde...
method FrNationalIdentityCardNumberProvider (line 30) | public FrNationalIdentityCardNumberProvider(BaseProducer baseProducer) {
method get (line 34) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/fr/FrPassportNumberProvider.java
class FrPassportNumberProvider (line 15) | public class FrPassportNumberProvider implements PassportNumberProvider {
method FrPassportNumberProvider (line 19) | public FrPassportNumberProvider(BaseProducer baseProducer) {
method get (line 23) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/ka/KaAddress.java
class KaAddress (line 7) | public class KaAddress extends AbstractAddress {
method KaAddress (line 8) | public KaAddress(String street, String streetNumber, String apartmentN...
method getAddressLine1 (line 12) | @Override
method getAddressLine2 (line 17) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/ka/KaAddressProvider.java
class KaAddressProvider (line 7) | public class KaAddressProvider extends AbstractAddressProvider {
method KaAddressProvider (line 9) | public KaAddressProvider(DataMaster dataMaster, BaseProducer baseProdu...
method get (line 13) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/ka/KaNationalIdentityCardNumberProvider.java
class KaNationalIdentityCardNumberProvider (line 10) | public class KaNationalIdentityCardNumberProvider implements NationalIde...
class OldCardNumberProvider (line 12) | private static class OldCardNumberProvider implements NationalIdentity...
method OldCardNumberProvider (line 17) | OldCardNumberProvider(BaseProducer baseProducer) {
method get (line 21) | @Override
class NewCardNumberProvider (line 28) | private static class NewCardNumberProvider implements NationalIdentity...
method NewCardNumberProvider (line 35) | NewCardNumberProvider(BaseProducer baseProducer) {
method get (line 39) | @Override
method KaNationalIdentityCardNumberProvider (line 47) | public KaNationalIdentityCardNumberProvider(BaseProducer baseProducer) {
method get (line 53) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/ka/KaPassportNumberProvider.java
class KaPassportNumberProvider (line 6) | public class KaPassportNumberProvider implements PassportNumberProvider {
method KaPassportNumberProvider (line 10) | public KaPassportNumberProvider(BaseProducer baseProducer) {
method getDistrictCode (line 15) | private String getDistrictCode() {
method getStateOfficeCode (line 20) | private String getStateOfficeCode() {
method getNationalPersonalIdentificationNumber (line 24) | private String getNationalPersonalIdentificationNumber() {
method get (line 28) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/pl/PlAddress.java
class PlAddress (line 6) | public class PlAddress extends ContinentalAddress {
method PlAddress (line 8) | public PlAddress(String street, String streetNumber, String apartmentN...
method getApartmentMark (line 12) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/pl/PlAddressProvider.java
class PlAddressProvider (line 7) | public class PlAddressProvider extends AbstractAddressProvider {
method PlAddressProvider (line 9) | public PlAddressProvider(DataMaster dataMaster, BaseProducer baseProdu...
method get (line 13) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/pl/PlNationalIdentificationNumberFactory.java
class PlNationalIdentificationNumberFactory (line 8) | public class PlNationalIdentificationNumberFactory implements NationalId...
method PlNationalIdentificationNumberFactory (line 13) | public PlNationalIdentificationNumberFactory(BaseProducer baseProducer...
method produceNationalIdentificationNumberProvider (line 18) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/pl/PlNationalIdentificationNumberProvider.java
class PlNationalIdentificationNumberProvider (line 20) | public class PlNationalIdentificationNumberProvider implements NationalI...
method PlNationalIdentificationNumberProvider (line 47) | public PlNationalIdentificationNumberProvider(DateProducer dateProduce...
method with (line 60) | public void with(NationalIdentificationNumberProperties.Property[] pro...
method get (line 71) | @Override
method generate (line 84) | private String generate() {
method setIssueDate (line 96) | @Override
method setSex (line 101) | @Override
method isValid (line 112) | public static boolean isValid(String nationalIdentificationNumber) {
method calculateMonth (line 124) | private int calculateMonth(int month, int year) {
method calculateSexCode (line 128) | private int calculateSexCode(Person.Sex sex) {
method calculateChecksum (line 132) | private static int calculateChecksum(String nationalIdentificationNumb...
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/pl/PlNationalIdentityCardNumberProvider.java
class PlNationalIdentityCardNumberProvider (line 18) | public class PlNationalIdentityCardNumberProvider implements NationalIde...
method PlNationalIdentityCardNumberProvider (line 39) | public PlNationalIdentityCardNumberProvider(DateProducer dateProducer,...
method get (line 44) | @Override
method get (line 52) | public String get(LocalDate date) {
method isValid (line 69) | public boolean isValid(String id) {
method calculateChecksum (line 75) | private char calculateChecksum(char[] id) {
method fillDigitsPart (line 93) | private void fillDigitsPart(char[] id) {
method fillLettersPart (line 99) | private void fillLettersPart(int year, char[] id) {
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/pl/PlPassportNumberProvider.java
class PlPassportNumberProvider (line 18) | public class PlPassportNumberProvider implements PassportNumberProvider {
method PlPassportNumberProvider (line 36) | public PlPassportNumberProvider(BaseProducer baseProducer) {
method generateLetterDigits (line 45) | private static Map<Character, Integer> generateLetterDigits() {
method get (line 59) | @Override
method fillChecksum (line 75) | private void fillChecksum(char[] passport) {
method fillSeries (line 86) | private void fillSeries(char[] passport) {
method fillDigits (line 96) | private void fillDigits(char[] passport) {
method isPassportCheckSumValid (line 107) | public static boolean isPassportCheckSumValid(String passportNumber) {
method calculateTotalWeight (line 123) | private static int calculateTotalWeight(char[] passport, boolean ignor...
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/sk/SkAddress.java
class SkAddress (line 5) | public class SkAddress extends ContinentalAddress {
method SkAddress (line 7) | public SkAddress(String street, String streetNumber, String apartmentN...
method getApartmentMark (line 11) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/sk/SkAddressProvider.java
class SkAddressProvider (line 7) | public class SkAddressProvider extends AbstractAddressProvider {
method SkAddressProvider (line 9) | public SkAddressProvider(DataMaster dataMaster, BaseProducer baseProdu...
method get (line 13) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/sk/SkNationalIdentificationNumberFactory.java
class SkNationalIdentificationNumberFactory (line 8) | public class SkNationalIdentificationNumberFactory implements NationalId...
method SkNationalIdentificationNumberFactory (line 13) | public SkNationalIdentificationNumberFactory(BaseProducer baseProducer...
method produceNationalIdentificationNumberProvider (line 18) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/sk/SkNationalIdentificationNumberProvider.java
class SkNationalIdentificationNumberProvider (line 21) | public class SkNationalIdentificationNumberProvider implements NationalI...
method SkNationalIdentificationNumberProvider (line 41) | public SkNationalIdentificationNumberProvider(DateProducer dateProduce...
method with (line 49) | public void with(NationalIdentificationNumberProperties.Property[] pro...
method get (line 55) | @Override
method generate (line 68) | private String generate() {
method setIssueDate (line 80) | @Override
method setSex (line 85) | @Override
method isValid (line 90) | public static boolean isValid(String nationalIdentificationNumber) {
method calculateMonth (line 103) | private int calculateMonth(int month, int year) {
method calculateSexCode (line 107) | private int calculateSexCode(Person.Sex sex) {
method calculateChecksum (line 111) | private static int calculateChecksum(String nationalIdentificationNumb...
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/sk/SkNationalIdentityCardNumberProvider.java
class SkNationalIdentityCardNumberProvider (line 17) | public class SkNationalIdentityCardNumberProvider implements NationalIde...
method SkNationalIdentityCardNumberProvider (line 38) | public SkNationalIdentityCardNumberProvider(DateProducer dateProducer,...
method get (line 43) | @Override
method get (line 51) | public String get(LocalDate date) {
method isValid (line 70) | public boolean isValid(String id) {
method calculateChecksum (line 76) | private char calculateChecksum(char[] id) {
method fillDigitsPart (line 94) | private void fillDigitsPart(char[] id) {
method fillLettersPart (line 100) | private void fillLettersPart(int year, char[] id) {
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/sk/SkPassportNumberProvider.java
class SkPassportNumberProvider (line 17) | public class SkPassportNumberProvider implements PassportNumberProvider {
method SkPassportNumberProvider (line 30) | public SkPassportNumberProvider(BaseProducer baseProducer) {
method generateLetterDigits (line 34) | private static Map<Character, Integer> generateLetterDigits() {
method get (line 44) | @Override
method fillChecksum (line 57) | private void fillChecksum(char[] passport) {
method fillSeries (line 63) | private void fillSeries(char[] passport) {
method fillDigits (line 69) | private void fillDigits(char[] passport) {
method isPassportCheckSumValid (line 81) | public static boolean isPassportCheckSumValid(String passportNumber) {
method calculateTotalWeight (line 90) | private static int calculateTotalWeight(char[] passport) {
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/sv/SvAddress.java
class SvAddress (line 6) | public class SvAddress extends ContinentalAddress {
method SvAddress (line 8) | public SvAddress(String street, String streetNumber, String apartmentN...
method getApartmentMark (line 12) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/sv/SvAddressProvider.java
class SvAddressProvider (line 7) | public class SvAddressProvider extends AbstractAddressProvider {
method SvAddressProvider (line 9) | public SvAddressProvider(DataMaster dataMaster, BaseProducer baseProdu...
method get (line 13) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/sv/SvNationalIdentificationNumberFactory.java
class SvNationalIdentificationNumberFactory (line 8) | public class SvNationalIdentificationNumberFactory implements NationalId...
method SvNationalIdentificationNumberFactory (line 13) | public SvNationalIdentificationNumberFactory(BaseProducer baseProducer...
method produceNationalIdentificationNumberProvider (line 18) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/sv/SvNationalIdentificationNumberProvider.java
class SvNationalIdentificationNumberProvider (line 26) | public class SvNationalIdentificationNumberProvider implements NationalI...
method SvNationalIdentificationNumberProvider (line 42) | public SvNationalIdentificationNumberProvider(DateProducer dateProduce...
method with (line 50) | public void with(NationalIdentificationNumberProperties.Property[] pro...
method get (line 56) | @Override
method generate (line 69) | private String generate() {
method setIssueDate (line 81) | @Override
method setSex (line 86) | @Override
method isValid (line 91) | public static boolean isValid(String nationalIdentificationNumber) {
method calculateSexCode (line 104) | private int calculateSexCode(Person.Sex sex) {
method calculateChecksum (line 108) | public static int calculateChecksum(String nationalIdentificationNumbe...
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/sv/SvNationalIdentityCardNumberProvider.java
class SvNationalIdentityCardNumberProvider (line 9) | public class SvNationalIdentityCardNumberProvider implements NationalIde...
method SvNationalIdentityCardNumberProvider (line 13) | public SvNationalIdentityCardNumberProvider(BaseProducer baseProducer) {
method get (line 17) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/sv/SvPassportNumberProvider.java
class SvPassportNumberProvider (line 9) | public class SvPassportNumberProvider implements PassportNumberProvider {
method SvPassportNumberProvider (line 13) | public SvPassportNumberProvider(BaseProducer baseProducer) {
method get (line 17) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/tr/TrAddress.java
class TrAddress (line 5) | public class TrAddress extends ContinentalAddress {
method TrAddress (line 7) | public TrAddress(String streetNumber, String street, String apartmentN...
method getStreetNumberSeparator (line 11) | @Override
method getApartmentMark (line 16) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/tr/TrAddressProvider.java
class TrAddressProvider (line 7) | public class TrAddressProvider extends AbstractAddressProvider {
method TrAddressProvider (line 9) | public TrAddressProvider(DataMaster dataMaster, BaseProducer baseProdu...
method get (line 13) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/tr/TrNationalIdentityCardNumberProvider.java
class TrNationalIdentityCardNumberProvider (line 13) | public class TrNationalIdentityCardNumberProvider implements NationalIde...
method TrNationalIdentityCardNumberProvider (line 17) | public TrNationalIdentityCardNumberProvider(BaseProducer baseProducer) {
method get (line 21) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/tr/TrPassportNumberProvider.java
class TrPassportNumberProvider (line 6) | public class TrPassportNumberProvider implements PassportNumberProvider {
method TrPassportNumberProvider (line 10) | public TrPassportNumberProvider(BaseProducer baseProducer) {
method get (line 14) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/zh/ZhAddress.java
class ZhAddress (line 11) | public class ZhAddress extends AbstractAddress {
method ZhAddress (line 18) | public ZhAddress(String streetNumber, String street, String apartmentN...
method getAddressLine1 (line 22) | @Override
method getAddressLine2 (line 32) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/zh/ZhAddressProvider.java
class ZhAddressProvider (line 14) | public class ZhAddressProvider extends AbstractAddressProvider {
method ZhAddressProvider (line 16) | public ZhAddressProvider(DataMaster dataMaster, BaseProducer baseProdu...
method get (line 20) | @Override
method getApartmentNumber (line 26) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/zh/ZhNationalIdentityCardNumberProvider.java
class ZhNationalIdentityCardNumberProvider (line 18) | public class ZhNationalIdentityCardNumberProvider implements NationalIde...
method ZhNationalIdentityCardNumberProvider (line 29) | public ZhNationalIdentityCardNumberProvider(BaseProducer baseProducer) {
method get (line 34) | @Override
method getBirthDate (line 45) | private String getBirthDate() {
FILE: src/main/java/com/devskiller/jfairy/producer/person/locale/zh/ZhPassportNumberProvider.java
class ZhPassportNumberProvider (line 12) | public class ZhPassportNumberProvider implements PassportNumberProvider {
method ZhPassportNumberProvider (line 16) | public ZhPassportNumberProvider(BaseProducer baseProducer) {
method get (line 20) | @Override
FILE: src/main/java/com/devskiller/jfairy/producer/text/TextProducer.java
class TextProducer (line 14) | public class TextProducer {
method TextProducer (line 32) | public TextProducer(TextProducerInternal textProducerInternal, BasePro...
method limitedTo (line 37) | public TextProducer limitedTo(int limit) {
method result (line 42) | public String result(String result) {
method loremIpsum (line 50) | public String loremIpsum() {
method text (line 54) | public String text() {
method word (line 58) | public String word() {
method word (line 62) | public String word(int count) {
method latinWord (line 66) | public String latinWord() {
method latinWord (line 70) | public String latinWord(int count) {
method latinSentence (line 74) | public String latinSentence() {
method latinSentence (line 78) | public String latinSentence(int wordCount) {
method sentence (line 82) | public String sentence() {
method sentence (line 86) | public String sentence(int wordCount) {
method sentences (line 91) | private List<String> sentences(int sentenceCount) {
method paragraph (line 99) | public String paragraph() {
method paragraph (line 103) | public String paragraph(int sentenceCount) {
method randomString (line 114) | public String randomString(int charsCount) {
FILE: src/main/java/com/devskiller/jfairy/producer/text/TextProducerInternal.java
class TextProducerInternal (line 28) | public class TextProducerInternal {
method TextProducerInternal (line 52) | public TextProducerInternal(DataMaster dataMaster, BaseProducer basePr...
method loremIpsum (line 67) | public String loremIpsum() {
method rawWords (line 79) | public String rawWords(List<String> words, int count, int precision) {
method cleanLatinWords (line 90) | public String cleanLatinWords(int count) {
method cleanWords (line 100) | public String cleanWords(int count) {
method cleanWords (line 104) | private String cleanWords(List<String> words, int count) {
method randomString (line 119) | public String randomString(int charsCount) {
method readRawWords (line 127) | private List<String> readRawWords(List<String> words, int count, int p...
method text (line 136) | public String text() {
method sentence (line 146) | public String sentence(int wordCount) {
method latinSentence (line 156) | public String latinSentence(int wordCount) {
method sentence (line 160) | private String sentence(List<String> words, int wordCount) {
FILE: src/main/java/com/devskiller/jfairy/producer/util/AlphaNumberSystem.java
class AlphaNumberSystem (line 12) | public final class AlphaNumberSystem {
method AlphaNumberSystem (line 16) | private AlphaNumberSystem() {
method generateAlphabetList (line 26) | public static List<Character> generateAlphabetList() {
method convertToString (line 44) | public static String convertToString(final int numberToConvert, final ...
FILE: src/main/java/com/devskiller/jfairy/producer/util/LanguageCode.java
type LanguageCode (line 12) | public enum LanguageCode {
FILE: src/main/java/com/devskiller/jfairy/producer/util/StringUtils.java
class StringUtils (line 26) | public final class StringUtils {
method StringUtils (line 29) | private StringUtils() {
method isNotBlank (line 45) | public static boolean isNotBlank(@Nullable String s) {
method isNotEmpty (line 57) | public static boolean isNotEmpty(@Nullable String s) {
method lowerCase (line 72) | public static String lowerCase(String s) {
method capitalize (line 84) | public static String capitalize(String s) {
method uncapitalize (line 99) | public static String uncapitalize(String s) {
method leftPad (line 120) | public static String leftPad(String s, int size, char padChar) {
method leftPad (line 139) | public static String leftPad(String s, int size, String padStr) {
method strip (line 157) | public static String strip(String s, String stripChars) {
method deleteWhitespace (line 177) | public static String deleteWhitespace(String s) {
method split (line 205) | public static String[] split(String s, char separator) {
method joinWithSpace (line 219) | public static String joinWithSpace(List<String> parts) {
method left (line 235) | public static String left(String s, int len) {
method removeEnd (line 250) | public static String removeEnd(String s, String suffix) {
method endsWith (line 266) | public static boolean endsWith(String s, String suffix) {
method replace (line 284) | public static String replace(String s, String searchString, String rep...
method replaceChars (line 305) | public static String replaceChars(String s, String searchChars, String...
method latinize (line 336) | public static String latinize(String s) {
method escapeNonAscii (line 374) | public static @Nullable String escapeNonAscii(@Nullable String input) {
FILE: src/main/java/com/devskiller/jfairy/producer/util/ValidateUtils.java
class ValidateUtils (line 13) | public final class ValidateUtils {
method ValidateUtils (line 16) | private ValidateUtils() {
method notNull (line 32) | @SuppressWarnings("AnnotateFormatMethod")
method isTrue (line 50) | @SuppressWarnings("AnnotateFormatMethod")
FILE: src/main/java/com/devskiller/jfairy/producer/util/ZhFairyUtil.java
class ZhFairyUtil (line 13) | public final class ZhFairyUtil {
method ZhFairyUtil (line 15) | private ZhFairyUtil() {}
method getRandomNumStr (line 72) | public static String getRandomNumStr(BaseProducer baseProducer, int ma...
FILE: src/test/java/com/devskiller/jfairy/producer/RandomGeneratorTest.java
class RandomGeneratorTest (line 12) | class RandomGeneratorTest {
method shouldBeDeterministic (line 16) | @DisplayName("Should produce identical results for same seed (Determin...
method shouldRespectLength (line 27) | @DisplayName("Should generate strings of requested length")
method shouldContainOnlyAllowedChars (line 38) | @DisplayName("Should contain only allowed characters")
method shouldThrowOnNegativeLength (line 48) | @DisplayName("Should throw exception for negative length")
FILE: src/test/java/com/devskiller/jfairy/producer/util/AlphaNumberSystemTest.java
class AlphaNumberSystemTest (line 13) | class AlphaNumberSystemTest {
method shouldGenerateCompleteAlphabetList (line 15) | @DisplayName("Should generate a complete alphabet list from A to Z")
method shouldReturnImmutableList (line 25) | @DisplayName("Should return an immutable list")
method shouldConvertToStringCorrectly (line 34) | @DisplayName("Should convert numbers to string correctly based on radix")
method shouldThrowExceptionForInvalidBase (line 50) | @DisplayName("Should throw exception for invalid base")
FILE: src/test/java/com/devskiller/jfairy/producer/util/StringUtilsTest.java
class StringUtilsTest (line 22) | @SuppressWarnings("checkstyle:MethodName")
class IsNotBlank (line 26) | @Nested
method returnsFalse (line 30) | @ParameterizedTest(name = "''{0}'' → false")
method returnsTrue (line 37) | @ParameterizedTest(name = "''{0}'' → true")
class IsNotEmpty (line 44) | @Nested
method returnsFalse (line 48) | @ParameterizedTest(name = "''{0}'' → false")
method returnsTrue (line 54) | @ParameterizedTest(name = "''{0}'' → true")
class LowerCase (line 61) | @Nested
method convertsCorrectly (line 65) | @ParameterizedTest(name = "''{0}'' → ''{1}''")
class CapitalizeUncapitalize (line 77) | @Nested
method capitalizeWorks (line 81) | @ParameterizedTest(name = "capitalize ''{0}'' → ''{1}''")
method capitalize_emptyString_returnsEmpty (line 91) | @Test
method uncapitalizeWorks (line 96) | @ParameterizedTest(name = "uncapitalize ''{0}'' → ''{1}''")
method uncapitalize_emptyString_returnsEmpty (line 106) | @Test
class LeftPad (line 112) | @Nested
method charVariant (line 116) | @ParameterizedTest(name = "leftPad(''{0}'', {1}, ''0'') → ''{2}''")
method stringVariant (line 126) | @ParameterizedTest(name = "leftPad(''{0}'', {1}, \"0\") → ''{2}''")
class Strip (line 138) | @Nested
method stripsCorrectly (line 142) | @ParameterizedTest(name = "strip(''{0}'', ''{1}'') → ''{2}''")
class DeleteWhitespace (line 153) | @Nested
method removesWhitespace (line 157) | @ParameterizedTest(name = "''{0}'' → ''{1}''")
method removesTabsAndNewlines (line 166) | @Test
class Left (line 172) | @Nested
method returnsCorrectSubstring (line 176) | @ParameterizedTest(name = "left(''{0}'', {1}) → ''{2}''")
method zeroLength_returnsEmpty (line 186) | @Test
class RemoveEndEndsWith (line 192) | @Nested
method removeEndWorks (line 196) | @ParameterizedTest(name = "removeEnd(''{0}'', ''{1}'') → ''{2}''")
method endsWithWorks (line 205) | @ParameterizedTest(name = "endsWith(''{0}'', ''{1}'') → {2}")
class Replace (line 215) | @Nested
method replaceWorks (line 219) | @ParameterizedTest(name = "replace(''{0}'', ''{1}'', ''{2}'') → ''{3...
method replaceCharsWorks (line 229) | @ParameterizedTest(name = "replaceChars(''{0}'', ''{1}'', ''{2}'') →...
class Latinize (line 241) | @Nested
method latinizesCorrectly (line 245) | @ParameterizedTest(name = "''{0}'' → ''{1}''")
class EscapeNonAscii (line 260) | @Nested
method null_returnsNull (line 264) | @Test
method escapesCorrectly (line 269) | @ParameterizedTest(name = "''{0}'' → ''{1}''")
class Split (line 280) | @Nested
method bySpace_returnsCorrectParts (line 284) | @Test
method trailingDelimiter_preservesTrailingEmpty (line 290) | @Test
method noDelimiterPresent_returnsSingleElement (line 297) | @Test
class JoinWithSpace (line 303) | @Nested
method multipleElements_joinedWithSpace (line 307) | @Test
method singleElement_noSpaceAdded (line 312) | @Test
method emptyList_returnsEmptyString (line 317) | @Test
FILE: src/test/java/com/devskiller/jfairy/producer/util/ValidateUtilsTest.java
class ValidateUtilsTest (line 15) | @SuppressWarnings("checkstyle:MethodName")
class NotNull (line 19) | @Nested
method nonNullValue_returnsValue (line 23) | @Test
method nullValue_throwsWithMessage (line 29) | @Test
method nullValue_withFormatArgs_includesArgsInMessage (line 37) | @Test
class IsTrue (line 46) | @Nested
method trueExpression_doesNotThrow (line 50) | @Test
method falseExpression_throwsWithMessage (line 55) | @Test
method falseExpression_withFormatArgs_includesArgsInMessage (line 63) | @Test
Condensed preview — 219 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (904K chars).
[
{
"path": ".editorconfig",
"chars": 656,
"preview": "# EditorConfig — https://editorconfig.org\nroot = true\n\n# ── Defaults for all files ─────────────────────────────────────"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 693,
"preview": "name: Bug Report\ndescription: Report a bug in jFairy\nlabels: [\"bug\"]\nbody:\n - type: input\n id: version\n attribute"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.yml",
"chars": 427,
"preview": "name: Feature Request\ndescription: Suggest a new feature or improvement\nlabels: [\"enhancement\"]\nbody:\n - type: textarea"
},
{
"path": ".github/ISSUE_TEMPLATE/new_locale.yml",
"chars": 417,
"preview": "name: New Locale\ndescription: Request or offer support for a new language/country\nlabels: [\"locale\"]\nbody:\n - type: inp"
},
{
"path": ".github/workflows/build.yml",
"chars": 400,
"preview": "name: Build\n\non:\n push:\n branches: [ master ]\n pull_request:\n branches: [ master ]\n\njobs:\n build:\n runs-on: "
},
{
"path": ".github/workflows/release.yml",
"chars": 1315,
"preview": "name: Release\n\non:\n push:\n tags:\n - 'v*'\n\njobs:\n release:\n runs-on: ubuntu-latest\n\n steps:\n - name:"
},
{
"path": ".gitignore",
"chars": 160,
"preview": "### Maven ###\ntarget/\n\n### IntelliJ ###\n*.iml\n*.ipr\n*.iws\n.idea/\nout/\n\n### Eclipse ###\n/.classpath\n/.project\n/.settings\n"
},
{
"path": ".mvn/wrapper/maven-wrapper.properties",
"chars": 168,
"preview": "wrapperVersion=3.3.4\ndistributionType=only-script\ndistributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/"
},
{
"path": ".sdkmanrc",
"chars": 85,
"preview": "# Enable auto-env through sdkman auto-answer\n# sdkman_auto_env=true\njava=17.0.18-tem\n"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 5500,
"preview": "\n# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make particip"
},
{
"path": "CONTRIBUTING.md",
"chars": 1328,
"preview": "# Contributing to jFairy\n\nWe welcome contributions! Here's how to get started.\n\n## Getting Started\n\n1. Fork the reposito"
},
{
"path": "LICENSE",
"chars": 10273,
"preview": "Apache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AN"
},
{
"path": "README.md",
"chars": 3526,
"preview": "# jFairy by Devskiller\n\n[](https://github.com/SkillPanel/jfairy/actions/workflows/build.yml)\n[](https://central.sonatype"
},
{
"path": "mvnw",
"chars": 11790,
"preview": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Softwa"
},
{
"path": "mvnw.cmd",
"chars": 8481,
"preview": "<# : batch portion\r\n@REM ----------------------------------------------------------------------------\r\n@REM Licensed to "
},
{
"path": "pom.xml",
"chars": 18510,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "src/main/java/com/devskiller/jfairy/Bootstrap.java",
"chars": 8067,
"preview": "package com.devskiller.jfairy;\n\nimport java.io.IOException;\nimport java.util.Locale;\nimport java.util.function.Supplier;"
},
{
"path": "src/main/java/com/devskiller/jfairy/Fairy.java",
"chars": 4832,
"preview": "/*\n * Copyright (c) 2013 Codearte\n */\npackage com.devskiller.jfairy;\n\nimport java.util.Locale;\nimport java.util.function"
},
{
"path": "src/main/java/com/devskiller/jfairy/FairyFactory.java",
"chars": 117,
"preview": "package com.devskiller.jfairy;\n\n/**\n * @author Jakub Kubrynski\n */\ninterface FairyFactory {\n\n\tFairy createFairy();\n}\n"
},
{
"path": "src/main/java/com/devskiller/jfairy/FairyFactoryImpl.java",
"chars": 2154,
"preview": "package com.devskiller.jfairy;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com.devskiller.jfairy.produce"
},
{
"path": "src/main/java/com/devskiller/jfairy/LocaleSpecificProviders.java",
"chars": 799,
"preview": "package com.devskiller.jfairy;\n\nimport com.devskiller.jfairy.producer.VATIdentificationNumberProvider;\nimport com.devski"
},
{
"path": "src/main/java/com/devskiller/jfairy/LocaleSpecificProvidersFactory.java",
"chars": 12664,
"preview": "package com.devskiller.jfairy;\n\nimport java.util.Locale;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\nimpo"
},
{
"path": "src/main/java/com/devskiller/jfairy/UniqueEnforcer.java",
"chars": 2495,
"preview": "package com.devskiller.jfairy;\n\nimport java.util.HashSet;\nimport java.util.Objects;\nimport java.util.Set;\nimport java.ut"
},
{
"path": "src/main/java/com/devskiller/jfairy/UniqueFairy.java",
"chars": 2837,
"preview": "package com.devskiller.jfairy;\n\nimport com.devskiller.jfairy.producer.company.Company;\nimport com.devskiller.jfairy.prod"
},
{
"path": "src/main/java/com/devskiller/jfairy/UniqueGenerationException.java",
"chars": 225,
"preview": "package com.devskiller.jfairy;\n\npublic class UniqueGenerationException extends RuntimeException {\n\n\tprivate static final"
},
{
"path": "src/main/java/com/devskiller/jfairy/data/DataMaster.java",
"chars": 1711,
"preview": "package com.devskiller.jfairy.data;\n\nimport java.util.List;\n\nimport com.devskiller.jfairy.producer.util.LanguageCode;\n\n/"
},
{
"path": "src/main/java/com/devskiller/jfairy/data/MapBasedDataMaster.java",
"chars": 4360,
"preview": "/*\n * Copyright (c) 2013 Codearte\n */\n\npackage com.devskiller.jfairy.data;\n\nimport java.io.IOException;\nimport java.io.I"
},
{
"path": "src/main/java/com/devskiller/jfairy/package-info.java",
"chars": 472,
"preview": "/**\n * Core package of the jFairy library.\n * <p>\n * This package contains the main entry points for the library, such a"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/BaseProducer.java",
"chars": 6456,
"preview": "package com.devskiller.jfairy.producer;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.List;\n\npu"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/DateProducer.java",
"chars": 2991,
"preview": "/*\n * Copyright (c) 2013. Codearte\n */\npackage com.devskiller.jfairy.producer;\n\nimport java.time.Instant;\nimport java.ti"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/RandomGenerator.java",
"chars": 3268,
"preview": "package com.devskiller.jfairy.producer;\n\nimport java.util.Collections;\nimport java.util.List;\nimport java.util.Random;\n\n"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/TimeProvider.java",
"chars": 455,
"preview": "/*\n * Copyright (c) 2013. Codearte\n */\n\npackage com.devskiller.jfairy.producer;\n\nimport java.time.LocalDate;\nimport java"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/VATIdentificationNumberProvider.java",
"chars": 321,
"preview": "/*\n * Copyright (c) 2013 Codearte and authors\n */\npackage com.devskiller.jfairy.producer;\n\nimport java.util.function.Sup"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/Company.java",
"chars": 736,
"preview": "package com.devskiller.jfairy.producer.company;\n\npublic class Company {\n\n\tprivate final String name;\n\tprivate final Stri"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/CompanyFactory.java",
"chars": 176,
"preview": "package com.devskiller.jfairy.producer.company;\n\npublic interface CompanyFactory {\n\n\tCompanyProvider produceCompany(Comp"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/CompanyFactoryImpl.java",
"chars": 999,
"preview": "package com.devskiller.jfairy.producer.company;\n\nimport com.devskiller.jfairy.data.DataMaster;\nimport com.devskiller.jfa"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/CompanyProperties.java",
"chars": 1202,
"preview": "package com.devskiller.jfairy.producer.company;\n\npublic final class CompanyProperties {\n\n\tprivate CompanyProperties() {\n"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/CompanyProvider.java",
"chars": 603,
"preview": "package com.devskiller.jfairy.producer.company;\nimport java.util.function.Supplier;\n\npublic interface CompanyProvider ex"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/DefaultCompanyProvider.java",
"chars": 3326,
"preview": "package com.devskiller.jfairy.producer.company;\n\nimport java.util.Locale;\n\nimport com.devskiller.jfairy.data.DataMaster;"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/locale/br/BrVATIdentificationNumberProvider.java",
"chars": 1714,
"preview": "package com.devskiller.jfairy.producer.company.locale.br;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport co"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/locale/de/DeVATIdentificationNumberProvider.java",
"chars": 934,
"preview": "package com.devskiller.jfairy.producer.company.locale.de;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport co"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/locale/en/EnVATIdentificationNumberProvider.java",
"chars": 2013,
"preview": "package com.devskiller.jfairy.producer.company.locale.en;\n\nimport java.util.Set;\n\nimport com.devskiller.jfairy.producer."
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/locale/es/EsVATIdentificationNumberProvider.java",
"chars": 1387,
"preview": "package com.devskiller.jfairy.producer.company.locale.es;\n\nimport java.util.Locale;\nimport java.util.regex.Pattern;\n\nimp"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/locale/fr/FrVATIdentificationNumberProvider.java",
"chars": 1971,
"preview": "package com.devskiller.jfairy.producer.company.locale.fr;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport co"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/locale/ka/KaVATIdentificationNumberProvider.java",
"chars": 552,
"preview": "package com.devskiller.jfairy.producer.company.locale.ka;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport co"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/locale/pl/PlVATIdentificationNumberProvider.java",
"chars": 6579,
"preview": "package com.devskiller.jfairy.producer.company.locale.pl;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\nimp"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/locale/sk/SkVATIdentificationNumberProvider.java",
"chars": 6503,
"preview": "package com.devskiller.jfairy.producer.company.locale.sk;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\nimp"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/locale/sv/SvVATIdentificationNumberProvider.java",
"chars": 4742,
"preview": "package com.devskiller.jfairy.producer.company.locale.sv;\n\nimport java.time.LocalDate;\nimport java.time.ZoneId;\n\nimport "
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/locale/tr/TrVATIdentificationNumberProvider.java",
"chars": 1070,
"preview": "package com.devskiller.jfairy.producer.company.locale.tr;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport co"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/company/locale/zh/ZhVATIdentificationNumberProvider.java",
"chars": 1566,
"preview": "package com.devskiller.jfairy.producer.company.locale.zh;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport co"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/net/IPNumberProducer.java",
"chars": 516,
"preview": "package com.devskiller.jfairy.producer.net;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\n\npublic class IPNumberP"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/net/NetworkProducer.java",
"chars": 1274,
"preview": "package com.devskiller.jfairy.producer.net;\n\n/**\n * TODO: Add emails\n */\npublic class NetworkProducer {\n\n\tprivate final "
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/payment/CreditCard.java",
"chars": 1185,
"preview": "package com.devskiller.jfairy.producer.payment;\n\nimport java.time.LocalDateTime;\nimport java.time.format.DateTimeFormatt"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/payment/CreditCardProvider.java",
"chars": 2538,
"preview": "package com.devskiller.jfairy.producer.payment;\n\nimport java.time.LocalDateTime;\nimport java.time.Period;\nimport java.ut"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/payment/DefaultIBANProvider.java",
"chars": 1828,
"preview": "package com.devskiller.jfairy.producer.payment;\n\nimport java.util.List;\nimport java.util.Optional;\n\nimport de.speedbanki"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/payment/IBAN.java",
"chars": 1096,
"preview": "package com.devskiller.jfairy.producer.payment;\n\npublic class IBAN {\n\n\tprivate final String accountNumber;\n\tprivate fina"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/payment/IBANFactory.java",
"chars": 158,
"preview": "package com.devskiller.jfairy.producer.payment;\n\npublic interface IBANFactory {\n\n\tIBANProvider produceIBANProvider(IBANP"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/payment/IBANFactoryImpl.java",
"chars": 602,
"preview": "package com.devskiller.jfairy.producer.payment;\n\nimport com.devskiller.jfairy.data.DataMaster;\nimport com.devskiller.jfa"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/payment/IBANProperties.java",
"chars": 1579,
"preview": "package com.devskiller.jfairy.producer.payment;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\nimport de.speedbanking"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/payment/IBANProvider.java",
"chars": 230,
"preview": "package com.devskiller.jfairy.producer.payment;\n\nimport java.util.function.Supplier;\n\npublic interface IBANProvider exte"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/AbstractAddressProvider.java",
"chars": 1176,
"preview": "package com.devskiller.jfairy.producer.person;\n\nimport com.devskiller.jfairy.data.DataMaster;\nimport com.devskiller.jfai"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/Address.java",
"chars": 261,
"preview": "package com.devskiller.jfairy.producer.person;\n\npublic interface Address {\n\n\tString getStreet();\n\n\tString getStreetNumbe"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/AddressProvider.java",
"chars": 176,
"preview": "package com.devskiller.jfairy.producer.person;\n\nimport java.util.function.Supplier;\n\npublic interface AddressProvider ex"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/CompanyEmailProvider.java",
"chars": 791,
"preview": "package com.devskiller.jfairy.producer.person;\n\nimport java.util.function.Supplier;\n\nimport com.devskiller.jfairy.produc"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/Country.java",
"chars": 1951,
"preview": "package com.devskiller.jfairy.producer.person;\n\nimport java.util.Arrays;\nimport java.util.List;\nimport java.util.Locale;"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/DefaultPersonProvider.java",
"chars": 10447,
"preview": "package com.devskiller.jfairy.producer.person;\n\nimport java.time.LocalDate;\nimport java.time.LocalDateTime;\nimport java."
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/EmailProvider.java",
"chars": 1431,
"preview": "package com.devskiller.jfairy.producer.person;\n\nimport java.util.function.Supplier;\n\nimport com.devskiller.jfairy.data.D"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/NationalIdentificationNumber.java",
"chars": 251,
"preview": "package com.devskiller.jfairy.producer.person;\n\npublic class NationalIdentificationNumber {\n\n\tprivate final String value"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/NationalIdentificationNumberFactory.java",
"chars": 253,
"preview": "package com.devskiller.jfairy.producer.person;\n\npublic interface NationalIdentificationNumberFactory {\n\n\tNationalIdentif"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/NationalIdentificationNumberProperties.java",
"chars": 890,
"preview": "package com.devskiller.jfairy.producer.person;\n\nimport java.time.LocalDate;\n\npublic final class NationalIdentificationNu"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/NationalIdentificationNumberProvider.java",
"chars": 342,
"preview": "package com.devskiller.jfairy.producer.person;\n\nimport java.time.LocalDate;\nimport java.util.function.Supplier;\n\npublic "
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/NationalIdentityCardNumberProvider.java",
"chars": 193,
"preview": "package com.devskiller.jfairy.producer.person;\n\nimport java.util.function.Supplier;\n\npublic interface NationalIdentityCa"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/PassportNumberProvider.java",
"chars": 473,
"preview": "package com.devskiller.jfairy.producer.person;\n\nimport java.util.function.Supplier;\n\n/**\n * Provider for generating loca"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/Person.java",
"chars": 3442,
"preview": "package com.devskiller.jfairy.producer.person;\n\nimport java.time.LocalDate;\n\nimport com.devskiller.jfairy.producer.compa"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/PersonFactory.java",
"chars": 228,
"preview": "package com.devskiller.jfairy.producer.person;\n\n/**\n * Created by Jakub Kubrynski / 2014-05-26\n */\npublic interface Pers"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/PersonFactoryImpl.java",
"chars": 2213,
"preview": "package com.devskiller.jfairy.producer.person;\n\nimport com.devskiller.jfairy.data.DataMaster;\nimport com.devskiller.jfai"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/PersonProperties.java",
"chars": 7071,
"preview": "package com.devskiller.jfairy.producer.person;\n\nimport java.time.LocalDate;\nimport java.util.Optional;\n\nimport com.devsk"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/PersonProvider.java",
"chars": 1953,
"preview": "package com.devskiller.jfairy.producer.person;\n\nimport java.time.LocalDate;\nimport java.util.function.Supplier;\n\nimport "
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/AbstractAddress.java",
"chars": 1304,
"preview": "package com.devskiller.jfairy.producer.person.locale;\n\nimport com.devskiller.jfairy.producer.person.Address;\n\n/**\n * A b"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/ContinentalAddress.java",
"chars": 869,
"preview": "package com.devskiller.jfairy.producer.person.locale;\n\nimport static com.devskiller.jfairy.producer.util.StringUtils.isN"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/NoNationalIdentificationNumberFactory.java",
"chars": 1141,
"preview": "package com.devskiller.jfairy.producer.person.locale;\n\nimport java.time.LocalDate;\n\nimport com.devskiller.jfairy.produce"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/br/BrAddress.java",
"chars": 516,
"preview": "package com.devskiller.jfairy.producer.person.locale.br;\n\nimport com.devskiller.jfairy.producer.person.locale.Continenta"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/br/BrAddressProvider.java",
"chars": 562,
"preview": "package com.devskiller.jfairy.producer.person.locale.br;\n\nimport com.devskiller.jfairy.data.DataMaster;\nimport com.devsk"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/br/BrNationalIdentityCardNumberProvider.java",
"chars": 1466,
"preview": "package com.devskiller.jfairy.producer.person.locale.br;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/br/BrPassportNumberProvider.java",
"chars": 315,
"preview": "package com.devskiller.jfairy.producer.person.locale.br;\n\nimport com.devskiller.jfairy.producer.person.PassportNumberPro"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/de/DeAddress.java",
"chars": 436,
"preview": "package com.devskiller.jfairy.producer.person.locale.de;\n\nimport com.devskiller.jfairy.producer.person.locale.Continenta"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/de/DeAddressProvider.java",
"chars": 562,
"preview": "package com.devskiller.jfairy.producer.person.locale.de;\n\nimport com.devskiller.jfairy.data.DataMaster;\nimport com.devsk"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/de/DeNationalIdentityCardNumberProvider.java",
"chars": 1083,
"preview": "package com.devskiller.jfairy.producer.person.locale.de;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/de/DePassportNumberProvider.java",
"chars": 968,
"preview": "package com.devskiller.jfairy.producer.person.locale.de;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/en/EnAddress.java",
"chars": 677,
"preview": "package com.devskiller.jfairy.producer.person.locale.en;\n\nimport com.devskiller.jfairy.producer.person.locale.AbstractAd"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/en/EnAddressProvider.java",
"chars": 563,
"preview": "package com.devskiller.jfairy.producer.person.locale.en;\n\nimport com.devskiller.jfairy.data.DataMaster;\nimport com.devsk"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/en/EnNationalIdentityCardNumberProvider.java",
"chars": 2211,
"preview": "package com.devskiller.jfairy.producer.person.locale.en;\n\nimport java.util.List;\n\nimport com.devskiller.jfairy.producer."
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/en/EnPassportNumberProvider.java",
"chars": 484,
"preview": "package com.devskiller.jfairy.producer.person.locale.en;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/es/EsAddress.java",
"chars": 511,
"preview": "\npackage com.devskiller.jfairy.producer.person.locale.es;\n\nimport com.devskiller.jfairy.producer.person.locale.Continent"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/es/EsAddressProvider.java",
"chars": 563,
"preview": "package com.devskiller.jfairy.producer.person.locale.es;\n\nimport com.devskiller.jfairy.data.DataMaster;\nimport com.devsk"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/es/EsNationalIdentityCardNumberProvider.java",
"chars": 1218,
"preview": "package com.devskiller.jfairy.producer.person.locale.es;\n\nimport java.util.Locale;\nimport java.util.regex.Pattern;\n\nimpo"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/es/EsPassportNumberProvider.java",
"chars": 484,
"preview": "package com.devskiller.jfairy.producer.person.locale.es;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/fr/FrAddress.java",
"chars": 439,
"preview": "package com.devskiller.jfairy.producer.person.locale.fr;\n\nimport com.devskiller.jfairy.producer.person.locale.Continenta"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/fr/FrAddressProvider.java",
"chars": 562,
"preview": "package com.devskiller.jfairy.producer.person.locale.fr;\n\nimport com.devskiller.jfairy.data.DataMaster;\nimport com.devsk"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/fr/FrNationalIdentityCardNumberProvider.java",
"chars": 1494,
"preview": "package com.devskiller.jfairy.producer.person.locale.fr;\n\nimport java.time.Year;\nimport java.time.ZoneId;\n\nimport com.de"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/fr/FrPassportNumberProvider.java",
"chars": 815,
"preview": "package com.devskiller.jfairy.producer.person.locale.fr;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/ka/KaAddress.java",
"chars": 676,
"preview": "package com.devskiller.jfairy.producer.person.locale.ka;\n\nimport com.devskiller.jfairy.producer.person.locale.AbstractAd"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/ka/KaAddressProvider.java",
"chars": 558,
"preview": "package com.devskiller.jfairy.producer.person.locale.ka;\n\nimport com.devskiller.jfairy.data.DataMaster;\nimport com.devsk"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/ka/KaNationalIdentityCardNumberProvider.java",
"chars": 2006,
"preview": "package com.devskiller.jfairy.producer.person.locale.ka;\n\nimport java.util.Locale;\nimport java.util.function.Supplier;\n\n"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/ka/KaPassportNumberProvider.java",
"chars": 968,
"preview": "package com.devskiller.jfairy.producer.person.locale.ka;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/pl/PlAddress.java",
"chars": 437,
"preview": "\npackage com.devskiller.jfairy.producer.person.locale.pl;\n\nimport com.devskiller.jfairy.producer.person.locale.Continent"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/pl/PlAddressProvider.java",
"chars": 563,
"preview": "package com.devskiller.jfairy.producer.person.locale.pl;\n\nimport com.devskiller.jfairy.data.DataMaster;\nimport com.devsk"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/pl/PlNationalIdentificationNumberFactory.java",
"chars": 960,
"preview": "package com.devskiller.jfairy.producer.person.locale.pl;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/pl/PlNationalIdentificationNumberProvider.java",
"chars": 4906,
"preview": "package com.devskiller.jfairy.producer.person.locale.pl;\n\nimport java.time.LocalDate;\nimport java.time.format.DateTimeFo"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/pl/PlNationalIdentityCardNumberProvider.java",
"chars": 3174,
"preview": "package com.devskiller.jfairy.producer.person.locale.pl;\n\nimport java.time.LocalDate;\n\nimport com.devskiller.jfairy.prod"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/pl/PlPassportNumberProvider.java",
"chars": 4542,
"preview": "package com.devskiller.jfairy.producer.person.locale.pl;\n\nimport java.util.Collections;\nimport java.util.LinkedHashMap;\n"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/sk/SkAddress.java",
"chars": 436,
"preview": "package com.devskiller.jfairy.producer.person.locale.sk;\n\nimport com.devskiller.jfairy.producer.person.locale.Continenta"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/sk/SkAddressProvider.java",
"chars": 563,
"preview": "package com.devskiller.jfairy.producer.person.locale.sk;\n\nimport com.devskiller.jfairy.data.DataMaster;\nimport com.devsk"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/sk/SkNationalIdentificationNumberFactory.java",
"chars": 960,
"preview": "package com.devskiller.jfairy.producer.person.locale.sk;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/sk/SkNationalIdentificationNumberProvider.java",
"chars": 3981,
"preview": "package com.devskiller.jfairy.producer.person.locale.sk;\n\nimport java.time.LocalDate;\nimport java.time.format.DateTimeFo"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/sk/SkNationalIdentityCardNumberProvider.java",
"chars": 3207,
"preview": "package com.devskiller.jfairy.producer.person.locale.sk;\n\nimport java.time.LocalDate;\n\nimport com.devskiller.jfairy.prod"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/sk/SkPassportNumberProvider.java",
"chars": 3140,
"preview": "package com.devskiller.jfairy.producer.person.locale.sk;\n\nimport java.util.Collections;\nimport java.util.LinkedHashMap;\n"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/sv/SvAddress.java",
"chars": 437,
"preview": "\npackage com.devskiller.jfairy.producer.person.locale.sv;\n\nimport com.devskiller.jfairy.producer.person.locale.Continent"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/sv/SvAddressProvider.java",
"chars": 563,
"preview": "package com.devskiller.jfairy.producer.person.locale.sv;\n\nimport com.devskiller.jfairy.data.DataMaster;\nimport com.devsk"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/sv/SvNationalIdentificationNumberFactory.java",
"chars": 959,
"preview": "package com.devskiller.jfairy.producer.person.locale.sv;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/sv/SvNationalIdentificationNumberProvider.java",
"chars": 4064,
"preview": "package com.devskiller.jfairy.producer.person.locale.sv;\n\nimport java.time.LocalDate;\nimport java.time.format.DateTimeFo"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/sv/SvNationalIdentityCardNumberProvider.java",
"chars": 599,
"preview": "package com.devskiller.jfairy.producer.person.locale.sv;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/sv/SvPassportNumberProvider.java",
"chars": 545,
"preview": "package com.devskiller.jfairy.producer.person.locale.sv;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/tr/TrAddress.java",
"chars": 522,
"preview": "package com.devskiller.jfairy.producer.person.locale.tr;\n\nimport com.devskiller.jfairy.producer.person.locale.Continenta"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/tr/TrAddressProvider.java",
"chars": 562,
"preview": "package com.devskiller.jfairy.producer.person.locale.tr;\n\nimport com.devskiller.jfairy.data.DataMaster;\nimport com.devsk"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/tr/TrNationalIdentityCardNumberProvider.java",
"chars": 1302,
"preview": "package com.devskiller.jfairy.producer.person.locale.tr;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/tr/TrPassportNumberProvider.java",
"chars": 518,
"preview": "package com.devskiller.jfairy.producer.person.locale.tr;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/zh/ZhAddress.java",
"chars": 956,
"preview": "package com.devskiller.jfairy.producer.person.locale.zh;\n\nimport com.devskiller.jfairy.producer.person.locale.AbstractAd"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/zh/ZhAddressProvider.java",
"chars": 984,
"preview": "package com.devskiller.jfairy.producer.person.locale.zh;\n\nimport com.devskiller.jfairy.data.DataMaster;\nimport com.devsk"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/zh/ZhNationalIdentityCardNumberProvider.java",
"chars": 1741,
"preview": "package com.devskiller.jfairy.producer.person.locale.zh;\n\nimport java.time.LocalDateTime;\nimport java.time.format.DateTi"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/person/locale/zh/ZhPassportNumberProvider.java",
"chars": 608,
"preview": "package com.devskiller.jfairy.producer.person.locale.zh;\n\nimport com.devskiller.jfairy.producer.BaseProducer;\nimport com"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/text/TextProducer.java",
"chars": 2821,
"preview": "/*\n * Copyright (c) 2013 Codearte\n */\npackage com.devskiller.jfairy.producer.text;\n\nimport java.util.ArrayList;\nimport j"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/text/TextProducerInternal.java",
"chars": 5092,
"preview": "/*\n * Copyright (c) 2013. Codearte\n */\npackage com.devskiller.jfairy.producer.text;\n\nimport java.util.ArrayList;\nimport "
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/util/AlphaNumberSystem.java",
"chars": 2454,
"preview": "package com.devskiller.jfairy.producer.util;\n\nimport java.util.ArrayList;\nimport java.util.Collections;\nimport java.util"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/util/LanguageCode.java",
"chars": 415,
"preview": "package com.devskiller.jfairy.producer.util;\n\n/**\n * Supported language and country codes for data localization.\n * <p>\n"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/util/StringUtils.java",
"chars": 13330,
"preview": "package com.devskiller.jfairy.producer.util;\n\nimport java.text.Normalizer;\nimport java.util.List;\nimport java.util.Local"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/util/ValidateUtils.java",
"chars": 1929,
"preview": "package com.devskiller.jfairy.producer.util;\n\nimport org.jspecify.annotations.Nullable;\n\n/**\n * Utility class providing "
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/util/ZhFairyUtil.java",
"chars": 1839,
"preview": "package com.devskiller.jfairy.producer.util;\n\nimport java.util.List;\n\nimport com.devskiller.jfairy.producer.BaseProducer"
},
{
"path": "src/main/java/com/devskiller/jfairy/producer/util/package-info.java",
"chars": 870,
"preview": "/**\n * Internal utility classes for the jFairy fake data producer.\n *\n * <p>This package contains stateless helper utili"
},
{
"path": "src/main/resources/jfairy.yml",
"chars": 17264,
"preview": "creditCardPrefixes: {\n Visa: [4]\n}\nlastNames: {\n male: [Abbott, Acevedo, Acosta, Adams, Adkins, Aguilar, Aguirre, Albe"
},
{
"path": "src/main/resources/jfairy_br.yml",
"chars": 7927,
"preview": "alphabet: abcdefghijklmnopqrstuvwxyz\ndomains: [ com.br, br, app.br, blog, net.br ]\nfirstNames: {\n male: [ José, João,"
},
{
"path": "src/main/resources/jfairy_de.yml",
"chars": 171474,
"preview": "alphabet: aäbcdefghijklmnoöpqrsßtuüvwxyz\ndomains: [de, eu, com, info, net, org]\ncompanyNames: [Aachener Gold-Ankauf, ABC"
},
{
"path": "src/main/resources/jfairy_en.yml",
"chars": 19691,
"preview": "alphabet: abcdefghijklmnopqrstuvwxyz\ndomains: [com, eu, biz]\nfirstNames: {\n male: [Aaron, Adam, Adrian, Aiden, Alex, Al"
},
{
"path": "src/main/resources/jfairy_es.yml",
"chars": 4455,
"preview": "alphabet: aábcdeéfghiíjklmnñoópqrstuvwxyz\ndomains: [es, cat, com, eu]\nfirstNames: {\n male: [Francisco, Paco, Fran, Jose"
},
{
"path": "src/main/resources/jfairy_fr.yml",
"chars": 27566,
"preview": "alphabet: aâàbcdeéèfghiïîjklmnoôöpqrstuùvwxyz\ndomains: [fr, com, gouv.fr, net, org]\ncompanyNames: [AB Science, ABC Arbit"
},
{
"path": "src/main/resources/jfairy_it.yml",
"chars": 3928,
"preview": "alphabet: abcdefghijklmnopqrstuvwxyz\ndomains: [com, org, it]\nfirstNames: {\n male: [Andrea, Luca, Marco, Francesco, Matt"
},
{
"path": "src/main/resources/jfairy_ka.yml",
"chars": 6272,
"preview": "alphabet: აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰ\ndomains: [ge, com.ge, org.ge, net.ge]\nfirstNames: {\n male: [აბელ, აბრაამ, ა"
},
{
"path": "src/main/resources/jfairy_pl.yml",
"chars": 8110,
"preview": "alphabet: aąbcćdeęfghijklłmnoóprsśtuwyzżź\ndomains: [pl, com, eu, com.pl]\nfirstNames: {\n male: [Adam, Adrian, Aleksander"
},
{
"path": "src/main/resources/jfairy_sk.yml",
"chars": 44633,
"preview": "alphabet: aáäbcčdďeéfghiíjklĺľmnňoóôpqrŕsštťuúvwxyýzž\ndomains: [sk, com, eu]\nfirstNames: {\nmale: [Adam, Adolf, Adrián, A"
},
{
"path": "src/main/resources/jfairy_sv.yml",
"chars": 103577,
"preview": "alphabet: abcdefghijklmnopqrstuvwxyzåäö\ndomains: [se, nu, com]\nfirstNames: {\n male: [Anders, Alexander, Andreas, Arne, "
},
{
"path": "src/main/resources/jfairy_tr.yml",
"chars": 3069,
"preview": "alphabet: abcçdefgğhıijklmnoöprsştuüvyz\ndomains: [ com.tr, org.tr, net.tr, edu.tr, gov.tr, k12.tr, av.tr, dr.tr, bel.tr,"
},
{
"path": "src/main/resources/jfairy_zh.yml",
"chars": 1150,
"preview": "alphabet: abcdefghijklmnopqrstuvwxyz\ndomains: [com, cn, net, org]\nfirstNames: {\n male: [俊杰, 亚波, 耀鸿, 旦冉, 国辉, 国富, 小明, 俊佳,"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/FairyDeSpec.groovy",
"chars": 614,
"preview": "package com.devskiller.jfairy\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.producer.person.Person\n\n/**"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/FairyFrSpec.groovy",
"chars": 1995,
"preview": "package com.devskiller.jfairy\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.producer.person.Person\nimpo"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/FairyKaSpec.groovy",
"chars": 959,
"preview": "package com.devskiller.jfairy\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.producer.person.Person\n\ncla"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/FairyModuleSpec.groovy",
"chars": 2087,
"preview": "package com.devskiller.jfairy\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.data.MapBasedDataMaster\nimp"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/FairySpec.groovy",
"chars": 2541,
"preview": "package com.devskiller.jfairy\n\nimport java.util.function.Supplier\nimport spock.lang.Specification\n\nimport com.devskiller"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/FairyZhSpec.groovy",
"chars": 1646,
"preview": "package com.devskiller.jfairy\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.producer.company.Company\nim"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/UniqueEnforcerSpec.groovy",
"chars": 2909,
"preview": "package com.devskiller.jfairy\n\nimport java.util.function.Supplier\n\nimport com.devskiller.jfairy.producer.person.Person\ni"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/UniqueFairySpec.groovy",
"chars": 2235,
"preview": "package com.devskiller.jfairy\n\nimport com.devskiller.jfairy.producer.person.PersonProperties\nimport spock.lang.Specifica"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/data/MapBasedDataMasterSpec.groovy",
"chars": 1453,
"preview": "/*\n * Copyright (c) 2013. Codearte\n */\n\npackage com.devskiller.jfairy.data\n\nimport spock.lang.Specification\n\nimport com."
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/BaseProducerSpec.groovy",
"chars": 2125,
"preview": "/*\n * Copyright (c) 2013. Codearte\n */\n\npackage com.devskiller.jfairy.producer\n\nimport spock.lang.Specification\nimport s"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/CompanySpec.groovy",
"chars": 2376,
"preview": "package com.devskiller.jfairy.producer\n\nimport org.apache.commons.validator.routines.DomainValidator\nimport org.apache.c"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/DateProducerSpec.groovy",
"chars": 4775,
"preview": "/*\n * Copyright (c) 2013 Codearte and authors\n */\npackage com.devskiller.jfairy.producer\n\nimport java.time.LocalDateTime"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/TextSpec.groovy",
"chars": 1564,
"preview": "package com.devskiller.jfairy.producer\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.Fairy\nimport com.d"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/company/locale/CompanyProviderSpec.groovy",
"chars": 2855,
"preview": "package com.devskiller.jfairy.producer.company.locale\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.dat"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/company/locale/br/BrVATIdentificationNumberProviderSpec.groovy",
"chars": 633,
"preview": "package com.devskiller.jfairy.producer.company.locale.br\n\nimport com.devskiller.jfairy.Bootstrap\nimport com.devskiller.j"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/company/locale/de/DeVATIdentificationNumberProviderSpec.groovy",
"chars": 930,
"preview": "package com.devskiller.jfairy.producer.company.locale.de\n\nimport spock.lang.Specification\nimport spock.lang.Unroll\nimpor"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/company/locale/en/EnVATIdentificationNumberProviderSpec.groovy",
"chars": 1564,
"preview": "package com.devskiller.jfairy.producer.company.locale.en\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy."
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/company/locale/es/EsVATIdentificationNumberProviderSpec.groovy",
"chars": 923,
"preview": "package com.devskiller.jfairy.producer.company.locale.es\n\nimport spock.lang.Specification\nimport spock.lang.Unroll\n\nimpo"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/company/locale/ka/KaVATIdentificationNumberProviderSpec.groovy",
"chars": 778,
"preview": "package com.devskiller.jfairy.producer.company.locale.ka\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy."
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/company/locale/pl/PlVATIdentificationNumberProviderSpec.groovy",
"chars": 945,
"preview": "package com.devskiller.jfairy.producer.company.locale.pl\n\nimport spock.lang.Specification\nimport spock.lang.Unroll\n\nimpo"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/company/locale/se/SvVATIdentificationNumberProviderSpec.groovy",
"chars": 929,
"preview": "package com.devskiller.jfairy.producer.company.locale.se\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy."
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/company/locale/sk/SkVATIdentificationNumberProviderSpec.groovy",
"chars": 1085,
"preview": "package com.devskiller.jfairy.producer.company.locale.sk\n\nimport spock.lang.Specification\nimport spock.lang.Unroll\n\nimpo"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/company/locale/tr/TrVATIdentificationNumberProviderSpec.groovy",
"chars": 928,
"preview": "package com.devskiller.jfairy.producer.company.locale.tr\n\nimport com.devskiller.jfairy.producer.BaseProducer\nimport com."
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/net/NetworkSpec.groovy",
"chars": 806,
"preview": "package com.devskiller.jfairy.producer.net\n\nimport org.apache.commons.validator.routines.InetAddressValidator\nimport spo"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/payment/CreditCardProviderSpec.groovy",
"chars": 1691,
"preview": "package com.devskiller.jfairy.producer.payment\n\nimport java.time.LocalDateTime\n\nimport spock.lang.Specification\n\nimport "
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/payment/IBANSpec.groovy",
"chars": 2065,
"preview": "package com.devskiller.jfairy.producer.payment\n\nimport de.speedbanking.iban.IbanValidator\nimport spock.lang.Specificatio"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/CompanyEmailProviderSpec.groovy",
"chars": 1346,
"preview": "package com.devskiller.jfairy.producer.person\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.producer.co"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/EmailProviderSpec.groovy",
"chars": 2147,
"preview": "package com.devskiller.jfairy.producer.person\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.data.DataMa"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/PersonSpec.groovy",
"chars": 11966,
"preview": "package com.devskiller.jfairy.producer.person\n\nimport java.time.LocalDate\nimport java.time.Period\n\nimport org.apache.com"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/br/BrAddressSpec.groovy",
"chars": 688,
"preview": "package com.devskiller.jfairy.producer.person.locale.br\n\nimport com.devskiller.jfairy.Fairy\nimport com.devskiller.jfairy"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/br/BrNationalIdentityCardNumberProviderSpec.groovy",
"chars": 582,
"preview": "package com.devskiller.jfairy.producer.person.locale.br\n\nimport com.devskiller.jfairy.Fairy\nimport spock.lang.Specificat"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/de/DeAddressSpec.groovy",
"chars": 1298,
"preview": "package com.devskiller.jfairy.producer.person.locale.de\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.F"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/de/DeNationalIdentityCardNumberProviderSpec.groovy",
"chars": 1011,
"preview": "package com.devskiller.jfairy.producer.person.locale.de\n\nimport spock.lang.Specification\nimport spock.lang.Unroll\n\nimpor"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/de/DePassportNumberProviderSpec.groovy",
"chars": 879,
"preview": "package com.devskiller.jfairy.producer.person.locale.de\n\nimport spock.lang.Specification\nimport spock.lang.Unroll\n\nimpor"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/en/EnAddressSpec.groovy",
"chars": 1336,
"preview": "package com.devskiller.jfairy.producer.person.locale.en\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.F"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/en/EnNationalIdentityCardNumberProviderSpec.groovy",
"chars": 2424,
"preview": "package com.devskiller.jfairy.producer.person.locale.en\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.F"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/en/EnPassportNumberProviderSpec.groovy",
"chars": 683,
"preview": "package com.devskiller.jfairy.producer.person.locale.en\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.F"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/es/EsAddressSpec.groovy",
"chars": 1274,
"preview": "package com.devskiller.jfairy.producer.person.locale.es\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.F"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/es/EsNationalIdentityCardNumberProviderSpec.groovy",
"chars": 1316,
"preview": "/*\n * Copyright (c) 2013 Codearte and authors\n */\n\npackage com.devskiller.jfairy.producer.person.locale.es\n\nimport spock"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/es/EsPassportNumberProviderSpec.groovy",
"chars": 671,
"preview": "package com.devskiller.jfairy.producer.person.locale.es\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.F"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/ka/KaAddressSpec.groovy",
"chars": 1460,
"preview": "package com.devskiller.jfairy.producer.person.locale.ka\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.F"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/ka/KaNationalIdentityCardNumberProviderSpec.groovy",
"chars": 896,
"preview": "package com.devskiller.jfairy.producer.person.locale.ka\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.p"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/ka/KaPassportNumberProviderSpec.groovy",
"chars": 649,
"preview": "package com.devskiller.jfairy.producer.person.locale.ka\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.p"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/pl/PlAddressSpec.groovy",
"chars": 1287,
"preview": "package com.devskiller.jfairy.producer.person.locale.pl\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.F"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/pl/PlNationalIdentificationNumberSpec.groovy",
"chars": 1927,
"preview": "package com.devskiller.jfairy.producer.person.locale.pl\n\nimport java.time.LocalDate\n\nimport spock.lang.Specification\nimp"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/pl/PlNationalIdentityCardNumberProviderSpec.groovy",
"chars": 1272,
"preview": "/*\n * Copyright (c) 2013 Codearte and authors\n */\n\npackage com.devskiller.jfairy.producer.person.locale.pl\n\nimport java."
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/pl/PlPassportNumberProviderSpec.groovy",
"chars": 945,
"preview": "package com.devskiller.jfairy.producer.person.locale.pl\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.F"
},
{
"path": "src/test/groovy/com/devskiller/jfairy/producer/person/locale/pl/PlPersonSpec.groovy",
"chars": 646,
"preview": "package com.devskiller.jfairy.producer.person.locale.pl\n\nimport spock.lang.Specification\n\nimport com.devskiller.jfairy.B"
}
]
// ... and 19 more files (download for full content)
About this extraction
This page contains the full source code of the Devskiller/jfairy GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 219 files (807.4 KB), approximately 262.2k tokens, and a symbol index with 844 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.