transformation multipletracerecords;

modeltype ECORE uses 'http://www.eclipse.org/emf/2002/Ecore';

mapping main(in model: ecore::EPackage): ecore::EPackage {
	init {
		result := model.toEcorePackage();
	}
    	name := 'OK';
}

mapping ecore::EPackage::toEcorePackage(): ecore::EPackage {
	name := self.name;
	eSubpackages := self.eSubpackages.toEcorePackage()->asOrderedSet();
	eClassifiers += self.eClassifiers.oclAsType(ecore::EClass).toEcoreClass();
}

mapping ecore::EClass::toEcoreClass(): ecore::EClass {
	init {
		result := self.resolveoneIn(ecore::EClass::toEcoreClass, ecore::EClass);
	}
	
		name := self.name;
		eSuperTypes += self.eSuperTypes.oclAsType(ecore::EClass).toEcoreClass();
}
