MENU

  /   Uitleg MetaFactory bestanden

Leer meer over de functionaliteit van metafactory.xml, model.xml en pattern.xml:

  • metafactory.xml is verantwoordelijk voor de configuratie van je project, het linkt naar de root van je source files (pattern en snippets). Het zet ook de output root pad van de gegenereerde code, met daarin onderscheid tussen XML, Java en overige gegenereerde bestanden. Standaard gedragingen voor code generatie kunnen gedefinieerd worden binnen het <businessStyle> element. Voeg je deze niet toe dan zal deze automatisch gegenereerd worden met standaardinstellingen zodra je MetaFactory start.

Het bovengenoemde stel je één keer in en behoeft in het vervolg van het ontwikkeltraject waarschijnlijk weinig aandacht meer. Dat is volledig anders voor je model en patterns, dit zijn namelijk de bouwstenen voor de code die MetaFactory genereert. Er is hierin een duidelijk onderscheid in verantwoordelijkheden. De patterns – waarvoor pattern.xml de basis vormt – bevat jouw code zoals je die normaal met de hand zou schrijven, maar dan in een abstracte vorm zodat deze code kan genereren voor alle entiteiten. Het model vult op verschillende manieren de lege plekken in van je pattern. Hieronder lees je daar meer over.

  • model.xml bevat alle data objecten (entiteiten) en kunnen gegroupeerd worden in packages. Elk object kan attributes en references naar andere objecten bevatten (het equivalent van Java’s entity properties).Zo kan het pattern alle entiteiten uit je model uitlezen en vervolgens voor iedere entiteit code genereren, afhankelijk van hoe de door jou gedefinieerde logica omgaat met data types van geneste attributes en references. Wellicht heb je voor een effectief pattern echter meer intelligente nodig dan het afhandelen van data. Dit is waar de optie om metadata toe te voegen – op object, attribute of reference niveau – veel extra mogelijkheden geeft. Metadata wordt in het model gespecificeerd als ‘properties’ en kan er als volgt uit zien:
    <attribute name="streetName" type="text" notnull="false">
      <properties>
        <crud.textarea.rows>3</crud.textarea.rows>
        <crud.vieworder.dialog>4</crud.vieworder.dialog>
      </properties>
    </attribute>

    In het laatste stukje code bepaalt ‘crud.textarea.rows’ hoe groot het textveld wordt en ‘crud.vieworder.dialog’ bepaalt de positie van het attribuut in het  dialoogscherm. Belangrijk hier om te weten is dat properties volledig vrij zijn om te definiëren. Niets is voorgedefinieerd door MetaFactory en een pattern property heft op zichzelf geen betekenis als deze niet actief wordt uitgelezen door een van de patterns. Zie het als ‘schakelaars’ of input data die je definieert om de logica van je pattern te kunnen laten functioneren. Merk ook op dat in het bovenstaande voorbeeld nummers gebruikt worden maar dat dit in feite ieder stukje tekst mag zijn. Het is de taak van het pattern om te bepalen hoe deze de string inhoud van de property moet behandelen.

  • pattern.xml is de basislocatie voor al je patterns (andere patterns kunnen daar geïmporteerd worden). Een pattern is een abstracte versie van je applicatiecode en gebruikt een XML structuur om java classes, methoden (genaamd ‘<operation>’), class/object velden etc. te genereren. Je kunt je volledige code verwerken in pattern.xml, gebruik maken van includes of de meer geavanceerde templating features van Freemarker/Velocity benutten omwille van meer structuur of simpelweg omdat je meer complexiteit nodig hebt. Dit geldt overigens alleen voor de generatie van Java code. Voor andere talen biedt MetaFactory geen xml structuur. Echter door vrijwel je volledige template te schrijven in Freemarker kan toch iedere taal gegenereerd worden. Deze snippet kan vervolgens rechtstreeks gebruikt worden in het <body> element van pattern.xml. Alle details wat betreft het gebruik van patterns zijn hier te vinden.