var m : new Model; m.name := 'm'; -- Create five packages for (i in Sequence{1..5}){ var package : Package := new Package; package.name := 'p' + i; package.package := m; -- Create three classes in each package for (j in Sequence{1..3}) { var class : Class := new Class; class.name := 'c' + i + '' + j; class.isAbstract := false; class.package := package; } } -- Assign random supertypes to the classes created for (c in Class.allInstances) { c.extends := Class.allInstances.random(); }
@namespace(uri="OO", prefix="OO") package OO; class Model extends Package { } abstract class PackageableElement extends NamedElement { ref Package#contents ~package; } abstract class AnnotatedElement { val Annotation[*] annotations; } class Annotation { attr String key; attr String value; } abstract class NamedElement extends AnnotatedElement { attr String name; } class Package extends PackageableElement { val PackageableElement[*]#~package contents; } abstract class ~Classifier extends PackageableElement { } class ExternalClass extends ~Class { } class ~Class extends ~Classifier { ref ~Class#extendedBy ~extends; ref ~Class[*]#~extends extendedBy; val Feature[*]#owner features; attr Boolean isAbstract; } class Datatype extends ~Classifier { } abstract class Feature extends NamedElement { ref ~Class#features owner; ref ~Classifier type; attr VisibilityEnum visibility; } abstract class StructuralFeature extends Feature { attr Boolean isMany; } class Operation extends Feature { val Parameter[*]#owner parameters; } class Parameter extends NamedElement { ref ~Classifier type; ref Operation#parameters owner; } class Reference extends StructuralFeature { } class Attribute extends StructuralFeature { } enum VisibilityEnum { public = 1; private = 2; }
There are two ways to get the code of this example:
Once you have checked out/imported the code, to run the example you need to go through the following steps:
In this example we use the Epsilon Object Language (EOL) to programmatically construct a model that conforms to the OO.emf metamodel.
.emf files are Ecore metamodels expressed using the Emfatic textual syntax.
More examples are available in the examples folder of the SVN repository.