6. Cvičenie - Generovanie kódov II. (Úloha 4)

Ciele
  1. Upraviť generátor skriptu pre vytvorenie štruktúry databázy s ohľadom na definované obmedzenia.
  2. Upraviť šablónu pre generovanie implementácie CRUD rozhrania so zohľadnením obmedzení.
  3. Otestovať funkčnosť generovacieho systému aj funkčnosť vygenerovanej aplikácie.
Úvod
    Cieľom dnešného cvičenia bude upraviť generátor skriptu databázy a šablóny z minulých cvičení tak, aby zohľadňovali obmedzenia vlastností entít definované v predchádzajúcom cvičení.
Postup
  1. Úloha: Upravte generátor skriptu pre vytvorenie databázy tak, aby boli zohľadnené obmedzenia vlastností entít.


    Pošli
    Poznámka: Využite aspoň povinnosť zadania hodnoty vlastnosti (Required) a obmedzenie dĺžky reťazca pre hodnotu vlastnosti entity (Length).
    Príklad: na základe nasledujúcej definície obmedzení pre vlastnosť priezvisko entity Zamestnanec
    
    entity_ref("Zamestnanec",
        property_ref("priezvisko",
            required(),
            max_length(16)
        )
    );
    
    je možné generovať nasledujúci fragment skriptu zohľadňujúci obmedzenia vlastnosti priezvisko.
    
    priezvisko VARCHAR(16) NOT NULL
    
  2. V tomto kroku je cieľom upraviť generátor pre generovanie implementácie CRUD rozhrania tak, aby boli taktiež zohľadnené obmedzenia. Testovanie splnenia obmedzení sa vykoná vždy pri realizácii operácie vloženia (create) a zmeny (edit) entity. Na základe predošlého príkladu definície obmedzení pre entitu Zamestnanec je možné generovať overenie nasledovne:
    
    public class ZamestnanecDaoImpl extends CRUDDaoImpl<Zamestnanec> implements ZamestnanecDao {
    //...CRUD operácie
    
        @Override
        protected void test(Zamestnanec object) {
            if(object.getPriezvisko() == null) {
                throw new ValidatorException("Property 'priezvisko' is required!");
            }
    
            if(object.getPriezvisko() != null) {
                if( object.getPriezvisko().length() > 16) {
                    throw new ValidatorException("Property 'priezvisko' has length out of range!");
                }
            }
        }
    }
    Úloha: Upravte šablónu pre generovanie implementácie CRUD rozhrania zohľadňujúc všetky implementované obmedzenia pre hodnoty vlastností.


    Pošli
    Aby sme sa v šablóne vyhli neprehľadným if..else konštrukciám podľa typu obmedzenia, pokúsime sa rozdeliť šablónu na menšie časti. Na základe názvu triedy obmedzenia tak vyberieme príslušnú šablónu. Našim cieľom je definovať kód pre jednotlivé obmedzenia mimo súboru šablóny pre generovanie CRUD implementácie. Tento prístup bude jednoducho použiteľný aj v používateľskom rozhraní pre overenie obmedzenia nad vstupom. Súbory so šablónami pre obmedzenia budú umiestnené v adresári constraint. Podľa nasledujúceho kódu definujte v šablóne dao_impl.java.vm premennú constraintsDir, ktorá bude obsahovať cestu k uloženým šablónam pre obmedzenia.
    
    #set( $constraintsDir = "/sk/tuke/magsa/tools/generator/templates/constraint/" )
    
    Vložte na miesto generovania kódu pre obmedzenia uvedený kód obsahujúci konštrukciu parse a doplňte chýbajúci kód. Pre každé obmedzenie sa použitím parse spracuje šablóna zvolená na základe mena.
    
    @Override
    protected void test(${entityName} object) {
    
        //Doplňte zvyšný kód
    
        #foreach( $constraint in $property.constraints )
        #set( $file = $constraintsDir + $constraint.getClass().getSimpleName() + ".vm" )
        #parse( $file )
        #end
    
        //Doplňte zvyšný kód
    
    }
    
    Jednotlivé šablóny budú umiestnené v adresári templates/constraint a budú mať názov zodpovedajúci triede obmedzenia, teda Required.vm, Length.vm, Range.vm, Regex.vm. Príklad šablóny pre obmedzenie Required je v required.zip.
  3. Otestujte generovanie systému na základe správne vytvorených tried vygenerovanej aplikácie.
  4. Otestujte funkčnosť vygenerovanej aplikácie.
    Úloha: Otestujte funkčnosť obmedzení so zvolenou entitou.


    Pošli
  5. Vymažte súbory z disku a zrušte všetky vami vytvorené nastavenia vo vývojovom prostredí!
Doplňujúce úlohy
    Úloha: Doplňte generátory pre obmedzenia, ktoré ste definovali nad rámec uvedených obmedzení.
    UkončenáPoznámka


    Pošli
    Úloha: Skúste generovať v skripte pre štruktúru databázy aj ďalšie fragmenty pre obmedzenia.
    UkončenáPoznámka


    Pošli
comments powered by Disqus