Module core contenant l'ensemble des générateurs et formats de sortie
Table of contents generated with markdown-toc
La syntaxe du fichier de définition est la suviante :
references:
<ref1>: <declaration_generateur>
<ref2>: <declaration_generateur>
...
template:
<champ1>: <declaration_generation>
<champ2>: <declaration_generation>
La partie references
permet de déclarer un générateur et de l'utiliser dans la déclaration d'un autre champ. 3 syntaxes sont disponibles :
$<ref>
: Utilise le générateurref
pour générer une valeur$$<ref>
: Utilise le générateurref
de façon fixe. Lors de la génération d'un objet. Le généraeurref
sera alors appelé une et une fois par objet pour générer une valeur$("expression avec reference ${<ref>}")
: Retourne une chaine de caractère en substituant ${} la valeur généré parref
.
Exemple avec references: definition.yml
references:
num: Integer(0, 10)
template:
ref: $num
ref2: $num
ref_fixe: $$num
ref_fixe2: $$num
expression: '$("Numéro: ${num}")'
Resultat pour 3 objets générés
[
{
"ref": 1,
"ref2": 5,
"ref_fixe": 8,
"ref_fixe2": 8,
"expression": "Numéro: 4"
},
{
"ref": 7,
"ref2": 1,
"ref_fixe": 3,
"ref_fixe2": 3,
"expression": "Numéro: 4"
},
{
"ref": 4,
"ref2": 3,
"ref_fixe": 2,
"ref_fixe2": 2,
"expression": "Numéro: 8"
}
]
Cette syntaxe, permet également de faire référence à un champ définit dans la partie
template
.
Exemple complet: definition.yml
references:
firstname: Faker("Name.firstName")
lastname: Faker("Name.lastName")
gen_date: Idempotent(FormatDate(Now(), "yyyy-MM-dd HH:mm:ss.SSS"))
id: UUID()
item:
parent_id: $$id
horodatage: $gen_date
expression: $("${firstname} ${lastname}")
template:
id: $$id
num: Increment()
random: Integer(100, 1000)
horodatage: $gen_date
items: Repeat($item, 2)
active: Boolean()
type: Enum(["A", "B", "C"])
group: Enum([EnumWeight("A", 10), EnumWeight("B", 90)])
array:
- Round(Double(0, 10), 2)
- Integer(10, 100)
Résultat au format JSON
[
{
"id": "5642e11c-d0fb-44f3-a5ad-2eb36b08071a",
"num": 0,
"random": 963,
"horodatage": "2021-07-09 02:59:55.310",
"items": [
{
"parent_id": "5642e11c-d0fb-44f3-a5ad-2eb36b08071a",
"horodatage": "2021-07-09 02:59:55.310",
"expression": "Louna Lemaire"
},
{
"parent_id": "5642e11c-d0fb-44f3-a5ad-2eb36b08071a",
"horodatage": "2021-07-09 02:59:55.310",
"expression": "Lola Da silva"
}
],
"active": true,
"type": "C",
"group": "B",
"array": [
8.3,
18
]
},
{
"id": "02b03213-b67f-4afe-8824-a3d961cf4bdc",
"num": 1,
"random": 341,
"horodatage": "2021-07-09 02:59:55.310",
"items": [
{
"parent_id": "02b03213-b67f-4afe-8824-a3d961cf4bdc",
"horodatage": "2021-07-09 02:59:55.310",
"expression": "Maëlys Mercier"
},
{
"parent_id": "02b03213-b67f-4afe-8824-a3d961cf4bdc",
"horodatage": "2021-07-09 02:59:55.310",
"expression": "Kylian Robin"
}
],
"active": false,
"type": "B",
"group": "B",
"array": [
6.63,
23
]
},
{
"id": "3bb6133a-7114-4bdb-88d0-5144aef94401",
"num": 2,
"random": 430,
"horodatage": "2021-07-09 02:59:55.310",
"items": [
{
"parent_id": "3bb6133a-7114-4bdb-88d0-5144aef94401",
"horodatage": "2021-07-09 02:59:55.310",
"expression": "Romane Olivier"
},
{
"parent_id": "3bb6133a-7114-4bdb-88d0-5144aef94401",
"horodatage": "2021-07-09 02:59:55.310",
"expression": "Yanis Lefèvre"
}
],
"active": false,
"type": "C",
"group": "B",
"array": [
7.31,
54
]
}
]
La liste et documentation des générateurs sont disponibles via la webui.
La définition peut se faire par héritage de la classe ObjectBuilder
.
La classe ObjectBuilder
contient des méthodes pour créer facilement un générateur :
public class SimpleObject extends ObjectBuilder {
@Override
public void configure() {
providerRef("randomInt", randomInt(0, 10));
field("randomFromListWithWeight", randomFromList(enumWeight("a", 1), enumWeight("b", 9)));
field("list", list(randomInt(0, 100), increment()));
field("randomUUID", randomUUID());
field("randomFromRegex", randomFromRegex("P[A-Z]{3}[0-9]{5}", 5));
field("firstname", ctx -> faker.name().firstName());
field("custom", ctx -> {
// votre générateur
return "custom_data";
});
field("expression", expression("${firstname} ${lastname}"));
field("reference", reference("randomInt"));
}
}
public class Test {
public static void main(String[] args) throws IOException {
SimpleObjectBuilder generator = new SimpleObjectBuilder();
ObjectOutput.from(generator)
.toJson().setPretty(true)
.writeMany(System.out, 2);
}
}
Résultat au format JSON
[
{
"randomFromList with weight": "b",
"list": [
22,
0
],
"randomUUID": "73b7a52b-1394-4eba-8249-6ab2d90c4616",
"randomFromRegex": "PHJV99665",
"firstname": "Valentin",
"custom": "custom_data",
"expression": "Valentin Bertrand",
"reference": 5
},
{
"randomFromList with weight": "b",
"list": [
83,
1
],
"randomUUID": "34d6ad81-a599-4ab3-92e2-4e553e0f64f7",
"randomFromRegex": "PWAT45684",
"firstname": "Clément",
"custom": "custom_data",
"expression": "Clément Pierre",
"reference": 2
}
]
Il est également possible de déclarer dynamiquement un générateur en créant une instance de ObjectProvider
:
ObjectProvider provider = new ObjectProvider()
.field("id", new IntAutoIncrement())
.field("name" () -> "Alice");
Exemple
ObjectProvider provider = new ObjectProvider()
.field("id", new IntAutoIncrement())
.field("name", new Sample("Name.firstName"));
JSON
ObjectOutput.from(provider)
.toJson().setPretty(true)
.writeMany(System.out, 2);
[ {
"id" : 0,
"name" : "Clara"
}, {
"id" : 1,
"name" : "Noa"
} ]
XML
ObjectOutput.from(provider)
.toXml().setPretty(true)
.writeMany(System.out, 2);
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<data>
<object>
<id>1</id>
<name>Clara</name>
</object>
<object>
<id>2</id>
<name>Noa</name>
</object>
</data>
CSV
ObjectOutput.from(provider)
.toCsv()
.writeMany(System.out, 2);
id;name
1;Clara
1;Noa
SQL
ObjectOutput.from(provider)
.toSQL()
.writeMany(System.out, 2);
INSERT INTO object(id,name) VALUE(1,'Clara');
INSERT INTO object(id,name) VALUE(2,'Noa');
YAML
ObjectOutput.from(provider)
.toYaml().setPretty(true)
.writeMany(System.out, 2);
- id: 1
name: Clara
- id: 2
name: Noa
Pour définir votre propre générateur, basez vous sur ceux existants
Par défaut le module core enregistre tous les générateurs présents dans le package io.github.datagenerator.plugins
.
Ce package peut être modifié en définissant la varialbe d'environnement PROVIDER_PLUGINS_SEARCH_PACKAGE
.