-
Notifications
You must be signed in to change notification settings - Fork 1
Operations: Application Layer
addStandardClass(_name : String, _isAbstract : Boolean, _inheritanceType : InheritanceType)
Popis: Vytvoření třídy typu StandardClass (standardní třída jakou známe z JAVA). InheritanceType představuje typ mapování třídy v databázi (Single Table, Joined, Table Per Class)
addPrimitiveClass(_name : String, _primitiveType : PrimitiveType)
Popis Vytvoření primitivní třídy. Tedy třídy zastupující primitivní typ (int, char, atd.). Třída může mít libovolný název ale stále zastupuje pouze daný primitivní typ (Integer -> int, Popokatepetl -> char).
addEmbeddedClass(_name : String)
Popis: Vytvoření embedované třídy. Nezaměňovat za Nested Class z jazyka JAVA (tedy vnitřní třídu). U nás se jedná spíše o jakou si výčtovou třídu, kterou využíváme v jiných třídách (v databázi jsou pak její sloupce vloženy do tabulky, která jí využívá - nemá své databázové zastoupení).
renameEntity(_name : String, _newName : String)
Popis: Entita je v našem meta-modelu předkem všech typů tříd (StandardClass, EmbeddedClass, PrimitiveClass). Tato operace je dovoluje přejmenovat.
removeEntity(_name : String)
Popis: Smazání entity z modelu.
addProperty(_owningClassName : String, _name : String, _type : String, defaultValue : String, lowerBound : Integer, upperBound : Integer, isOrdered : Boolean, isUnique : Boolean)
Popis: Vytvoření atributu (property) v zadané třídě. Atribut může být i kolekcí - lowerBound nastavuje minimální hodnotu, upperBound maximální. Je-li upperBound -1, jedná se o nekonečno. Seřazení kolekce nastavíme parametrem isOrdered (v databázi to pro nás znamená vytvoření speciálního sloupečku s pořadím). Unikátnost prvků v kolekci parametrem isUnique.
renameProperty(_owningClassName : String, _name : String, _newName : String)
Popis: Přejmenování atributu ve třídě.
removeProperty(_owningClassName : String, _name : String)
Popis: Smazání atributu ze třídy.
setOpposite(_firstClassName : String, _firstPropertyName : String, _secondClassName : String, _secondPropertyName : String, _isOpposite : Boolean)
Popis: Operace vytvoří spojení mezi dvěma atributy. Spojením v našem případě máme namysli opositum. Atribut v první třídě má jako oppositeProperty nastaven atribut ve třídě druhé. A obráceně. Parametr isOpposite slouží k tomu, že zapojuje, nebo následně rozpojuje dané spojení. Pokud spojení existuje a mi ho chceme zrušit, zadáme oba atributy a isOpposite nastavíme na FALSE. V opačném případě obráceně.
setAbstract(_name : String, _isAbstract : Boolean)
Popis: Nastaví třídu jako abstraktní. V případě, že již abstraktní je, můžeme abstrakci zrušit parametrem isAbstract nastaveným na FALSE.
setParent(_name : String, _parentName : String)
Popis: Nastavení předka dané třídě.
setType(_owningClassName : String, _name : String, _type : String)
Popis: Změna typu atributu. Atribut může být typu PrimitiveClass nebo StandardClass (tyto dva typy tříd v našem metamodelu zastřešuje entita AbstractClass, která je jich předky).
setBounds(_owningClassName : String, _name : String, _lowerBound : Integer, _upperBound : Integer)
Popis: Změna velikosti kolekce.
setOrdered(_owningClassName : String, _name : String, _isOrdered : Boolean)
Popis: Aktivování nebo deaktivování kolekce jako seřazené.
setUnique(_owningClassName : String, _name : String, _isUnique : Boolean)
Popis: Nastavení nebo deaktivování kolekce jako unikátní
copyProperty(owningClassName : String, _name : String, _targetClassName : String, _type : APP::ops::MergeType)
Popis: Kopírování atributu funguje pouze v rámci hierarchie - směrem dolu i směrem nahoru. Důvod omezení přesunu pouze v rámci hierarchie je zakořeněný až u skutečných datových instancí(záznamů) v databázi. Problémem je přiřazení. Představme si, že v databázi chceme kopírovat sloupeček plný dat z jedné tabulky do druhé, přičemž tabulky mezi sebou nemají žádnou vazbu, ani hierarchickou. Jakým způsobem by jsme nadefinovali přiřazovací pravidlo pro jednotlivé řádky (instance) tabulke? Ne vždy je totiž správné řešení typu - první řádek z tabulky A přiřadit k prvnímu z tabulky B. Je to tedy docela oříšek. Samozřejmě není neřešitelný, ale my, v rámci zjednodušení, pracujeme pouze v hierarchii, kde máme všechny instance provázané společným ID od kořenové tabulky.
MergeType je parametr, který má svůj původ také v samotných instancích. Pokud nastane, že při přesunu z tabulky A do tabulky B, bude mít A více či méně instancí než B, musíme programu říci, jak se má zachovat - k tomu nám slouží MergeType.
MergeType má tři stavy - strict, force, tolerant. Strict - pokud má tabulka jiný počet instancí, neprováděj přenos. Force - pokud má tabulka jiný počet instancí, klidně proveď přenos - přebytečná data se oříznou. Tolerant - pokud má tabulka nižší počet instancí, klidně proveď přenos (Tolerant je slabší odvar Strict omezení).
moveProperty(_owningClassName : String, _name : String, _targetClassName : String, _type : APP::ops::MergeType)
Popis: Myšlenka MovePropety se zdá být stejná jako u operace CopyProperty. Zase jde o přesun atributu v rámci hierarchie. Zde je ale rozdíl v tom, že MoveProperty uplně přesune atribut jinam, kdežto CopyProperty pouze zduplikovala atribut
extractClass(_sourceClassName : String, _associationPropertyName : String, _extractClassName : String)
Restrictions:
- @restriction : Class with @sourceClassName must exist in model
- @restriction : Class with @extractClassName cannot exist in model
- @restriction : Class name @extractClassName must be valid
- @restriction : Property name @associationPropertyName cannot exists in class @sourceClassName
Description: The meaning of ExtractClass operation is to create a new class with name extractClassName and connect this new empty class with sourceClassName by unidirectional association with cardinality 1:1 (that means create pointer with associationPropertyName in sourceClassName).
ORM mapping: The main idea of ORM mapping is that operation ExtractClass create "empty" instances in extracted class. Empty means, that they are represent (in database) just by number in ID column of extracted class. So operation ExtractClass create new class and in the database create new instances which belong to new extracted class.
// addition of the extracted table to the schema addTable(schemaName, extractClassName); // addition of a column to extracted table addColumn(schemaName, extractClassName, idColumnName, type); // addition of a primary key to extracted table addPrimaryKey(schemaName, extractClassName, idColumnName, pkName); // generate new sequence number to id column of extract class generateSequenceNumbers(schemaName, extractClassName, idColumnName, sequenceName); // addition of a new column (pointer to extracted class) to source class addColumn(schemaName, sourceClassName, associationPropertyName, type); // add FK contraint on new pointer column addForeignKey(schemaName, sourceClassName, associationPropertyName, fkName, extractClassName); // add values to FK insertRow(schemaName, extractClassName, idExtractClassName, sourceClassName, associationPropertyName);
extractParent(_sourceClassName : String, _extractPropertiesNames : OrderedSet(String), _extractParentName : String)
Popis: