transformation mm_header3(in ecore : ECORE, out uml : SimpleUML, out ecore2 : RDB);

modeltype ECORE uses "http://www.eclipse.org/emf/2002/Ecore";
modeltype SimpleUML uses 'http://www.eclipse.org/qvt/1.0.0/Operational/examples/simpleuml';
modeltype RDB uses 'http://www.eclipse.org/qvt/1.0.0/Operational/examples/rdb';


mapping main() {
	init {
		ecore.objects()->select(c|c.oclIsKindOf(EClass))->collect(c|c.oclAsType(EClass).toClass1());
		ecore.objects()->select(c|c.oclIsKindOf(EClass))->collect(c|c.oclAsType(EClass).toClass2());
		ecore.objects()->select(c|c.oclIsKindOf(EClass))->collect(c|c.oclAsType(EClass).toTable());
	}
}

mapping EClass::toClass1() : simpleuml::Class {
	name := self.name + '_SimpleClass1';
}

mapping EClass::toClass2() : SimpleUML::Class {
	name := self.name + '_SimpleClass2';
}

mapping EClass::toTable() : RDB::Table {
	name := self.name + '_Table';
}
