Model til tekst transformasjoner med MOFScript
MOFScript Brukes for å generere tekst fra modeller (f.eks. kode, dokumentasjon) Delvis imperativt og delvis deklarativt Regelebasert språk Plugin til eclipse
Bruk av MOFScript For å skrive et MOFScript program lager man en fil som har extensionen ’.m2t’. En vil da få MOFScript funksjonaliteten tilgjengelig. Metamodeller som skal benyttes legges i mappa ’eclipse\plugins\org.sintef.mofscript.editor_1.1.11\repository\metamodels’.
Bruk av MOFScript Output directory for transformasjonen settes ved å høyreklikke på MOFScript fila, velge Properties, og deretter sette en path i Select Root Output Directory propertiet under MOFScript. Input modellen (den modellen det skal genereres tekst fra velges første gang transformasjonen kjøres)
Eksempel: Generere SQL kode fra relational modellen vi genererte forige øvingstime
Metamodellen
Inputmodellen
relational2sql.m2t texttransformation relationalModel2sql (in relational : "http:///relational.ecore"){ property fileExtension = '.sql' relational.DBModel::main(){ stdout.println( 'starting transformation ' ) self.mapDBModel() }
relational2sql.m2t relational.DBModel::mapDBModel(){ file(self.name + fileExtension) '\nCREATE DATABASE ' self.name ';' self.tables -> forEach( table:relational.Table ){ table.mapTable() }
relational2sql.m2t relational.Table::mapTable(){ '\n\nCREATE TABLE ' self.name '(' self.columns -> forEach ( col:relational.Column ){ col.mapColumn() if( !self.columns.last() == col ){ ',' } '\n);'
relational2sql.m2t relational.Column::mapColumn(){ '\n\t' self.name ' ' self.type.mapType() if( self.keyOf != null ){ ' PIMARY KEY NOT NULL' }
relational2sql.m2t relational.Type::mapType(){ if(self.name.equalsIgnoreCase("INTEGER")){ 'INT' }else if( self.name.equalsIgnoreCase("STRING")){ 'VARCHAR(255)' }
Resultatet CREATE DATABASE ScoolSystem; CREATE TABLE Student( StudentId INT PIMARY KEY NOT NULL, name VARCHAR(255), age INT ); CREATE TABLE Course( courseName VARCHAR(255), courseLocationID INT, CourseId INT PIMARY KEY NOT NULL CREATE TABLE CourseLocation( CourseLocationId INT PIMARY KEY NOT NULL, buildingName VARCHAR(255), roomNr INT CREATE TABLE emailAdresses( emailAdresses VARCHAR(255) CREATE TABLE Student_courses( coursesId INT PIMARY KEY NOT NULL
Tekst vs Model CREATE DATABASE ScoolSystem; CREATE TABLE Student( StudentId INT PIMARY KEY NOT NULL, name VARCHAR(255), age INT ); CREATE TABLE Course( courseName VARCHAR(255), courseLocationID INT, CourseId INT PIMARY KEY NOT NULL CREATE TABLE CourseLocation( CourseLocationId INT PIMARY KEY NOT NULL, buildingName VARCHAR(255), roomNr INT CREATE TABLE emailAdresses( emailAdresses VARCHAR(255) CREATE TABLE Student_courses( coursesId INT PIMARY KEY NOT NULL