Skip to content

HOWTO: How can one re-use Generator definitions? #46

@canthony

Description

@canthony

How can one define a "basic" generator template in a ben.xml and re-use it in multiple scenarios in the same .ben.xml ?

As an example, I am generating data for 3 different classes of organisation, where address and bank account generation are the same, but other attributes are overriden (and new attributes are added).

Currently, I can only see cut-and-paste reuse as an option, or define a Generator class in Java - which is doable, of course, but it's not terribly clear how to map the XML elements/attributes to the constituent generator classes...

<generate type="buyer" count="{buyers_count}" consumer="buyers.csv">
  <variable name="bank_data" source="bank.ent.csv" distribution="random"/>
  <variable name="swift_suffix" pattern="\d{2}[A-Z]{3}"/>
  <variable name="cg" generator="CompanyNameGenerator" dataset="GB" locale="en_GB"/>
  
[…]

  <attribute name="addressLine1" script="ag.houseNumber + ' ' + ag.street"/>
  <attribute name="city" script="ag.city.name"/>
  <attribute name="postcode" script="ag.postalCode"/>
</generate>


<generate type="seller" count="{seller_count}" consumer="sellers.csv">
  <variable name="bank_data" source="bank.ent.csv" distribution="random"/>
  <variable name="swift_suffix" pattern="\d{2}[A-Z]{3}"/>
  <variable name="cg" generator="CompanyNameGenerator" dataset="GB" locale="en_GB"/>
  
[…]

  <attribute name="addressLine1" script="ag.houseNumber + ' ' + ag.street"/>
  <attribute name="city" script="ag.city.name"/>
  <attribute name="postcode" script="ag.postalCode"/>
</generate>

Ideally, one would be able to define a basic generator and reuse them as a source for a variable, e.g.

  <generate type="company" consumer="NoConsumer">
     <variable name="bank_data" source="bank.ent.csv" distribution="random"/>
     <variable name="swift_suffix" pattern="\d{2}[A-Z]{3}"/>
     <variable name="cg" generator="CompanyNameGenerator" dataset="GB" locale="en_GB"/>
  
[…]

     <attribute name="addressLine1" script="ag.houseNumber + ' ' + ag.street"/>
     <attribute name="city" script="ag.city.name"/>
     <attribute name="postcode" script="ag.postalCode"/>
   </generate>   
  
  <!-- or <generator name="company">...</generator> -->
  
  <generate type="seller" count="{seller_count}" consumer="sellers.csv">
     <variable name="c" source="company"/>

     <attribute name="addressLine1" script="c.addressLine1"/>
     <attribute name="city" script="c.city"/>
     <attribute name="postcode" script="c.postcode"/>
  </generate>
  
  <generate type="buyer" count="{buyer_count}" consumer="buyers.csv">
     <variable name="c" source="company"/>

     <attribute name="addressLine1" script="c.addressLine1"/>
     <attribute name="city" script="c.city"/>
     <attribute name="postcode" script="c.postcode"/>
  </generate>

   

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions